Puis-je enregistrer un fichier sur le serveur à l'aide de FileOutputStream?
Je suis en train de créer un flux RSS de manière dynamique et de la stocker sur le serveur, tels que l'accès à la création de flux RSS que je peux il suffit de taper l'URL dans le navigateur. Est-il possible de le faire?
Je peux créer le flux RSS, mais lorsque j'essaie de l'enregistrer sur le serveur à l'aide de FileOutputStream("WebContent/filename.xml")
il me donne FileNotFoundException
. Mon approche correcte, ou est-il un autre moyen pour stocker un fichier sur le serveur et d'y accéder en utilisant une URL simple?
Je suis en utilisant le printemps des planificateurs pour exécuter mon application toutes les minutes pour créer le flux RSS de manière dynamique.
Vous devez vous connecter pour publier un commentaire.
En général, vous n'avez pas "générer un & magasin de telles choses. Vous servir de façon dynamique & de les mettre en cache (à la fois le cache http (pour les clients) et le cache interne (afin de ne pas extraire plusieurs fois)). Printemps 3.1 cache abstraction permettrait facilement.
Afin de stocker des fichiers sur le serveur, vous devez savoir ce que le répertoire racine de la webapp est. Vous pouvez l'obtenir en
request.getServletContext().getRealPath("/")
. Notez que ces fichiers auront disparu après l'annulation du déploiement, de sorte que vous pourriez envisager de les stocker dans un absolu, en dehors de l'application de l'emplacement. Notez également que vous ne pouvez pas écrire dans non explosées archives de la guerre. Et une autre chose - il n'y a pas deWebContent
par défaut - c'est le projet directement, mais elle ne correspond pas à un répertoire dans l'application web distribuable.File.createTempFile(..)
new FileOutputStream(File.createTempFile(..))
Ma recommandation serait de les exposer à un répertoire sur le serveur à l'aide de votre démon HTTP (probablement Apache) et ensuite l'application y écrire. Autant que je sache, vous ne pouvez pas écrire des fichiers à l'intérieur de votre GUERRE/de l'OREILLE.
Vous êtes confus au répertoire que vous utilisez pour stocker les fichiers source de votre projet et le répertoire où l'application est déployée sur le serveur.
D'abord définir comment et où vous allez déployer l'application (si c'est comme une guerre de fichier, vous n'aurez même pas un répertoire racine), puis la conception de votre application en conséquence.
Si vous voulez rester portable, vous devez définir un paramètre de configuration (dans votre web.xml) définir l'emplacement des fichiers externes sont enregistrées, et ont une servlet de la lecture de fichiers à partir de ce répertoire et de la rédaction de leur contenu dans la réponse au flux de sortie.
Mais vous pouvez également configurer votre serveur pour servir les fichiers statiques à partir d'un répertoire spécifique et écrire le fichier XML de ce répertoire. Lire la documentation de votre serveur pour savoir si et comment il est possible de le faire.
Ce que Justin dit est juste, mais je voudrais aller plus loin et dire avez-vous réellement besoin de le stocker sur le disque?
Si ce n'est pas que les grandes d'un fichier, (mon pari serait pas), puis simplement avoir l'url de point à une servlet qui renvoie à partir de la mémoire cache, et alors que le servlet également reconstruit à chaque minute.
Voici ma solution dans un Servlet méthode doGet(...). Il n'a pas d'enregistrer le flux RSS dans le système de fichiers, il sera créé à chaque fois (quand il y a une demande). Je l'écris comme la réponse HTTP.
Quand il est nécessaire de l'écrire sur le système de fichiers, ici, c'est une solution, je l'ai utilisé pour enregistrer une image sur le serveur, de son à nouveau dans une servlet méthode: