Qu'est-ce que WEB-INF utilisé dans une application web Java EE?
Je travaille sur une application web Java EE avec le code source suivant la structure:
src/main/java <-- multiple packages containing java classes
src/test/java <-- multiple packages containing JUnit tests
src/main/resources <-- includes properties files for textual messages
src/main/webapp/resources <-- includes CSS, images and all Javascript files
src/main/webapp/WEB-INF
src/main/webapp/WEB-INF/tags
src/main/webapp/WEB-INF/views
Le peu qui m'intéresse c'est WEB-INF
- il contient web.xml
, des fichiers XML pour la création de servlets, Printemps bean câblage des contextes et des JSP des balises et des points de vue.
J'essaie de comprendre quelles sont les contraintes/définit cette structure. E. g. serait des fichiers JSP toujours être à l'intérieur de WEB-INF
ils ou pourraient-ils être quelque part d'autre? Et est-il autre chose qui pourrait aller dans WEB-INF
? Wikipédia est La GUERRE des fichiers entrée mentionne classes
pour les classes Java et lib
pour les fichiers JAR - pas sûr que j'ai pleinement compris lorsque celles-ci seraient nécessaires, en plus des autres emplacements de fichiers source.
- Cela peut être utile: gordondickens.com/wordpress/2012/07/03/...
- Pour info... Pour apprendre comment conteneurs de servlet charger à partir
WEB-INF
et d'autres emplacements de voir la question, Contrôler le chemin de classe dans une servlet, en particulier cette Réponse.
Vous devez vous connecter pour publier un commentaire.
La Servlet 2.4 spécifications dit ceci à propos de WEB-INF (page 70):
Cela signifie que
WEB-INF
ressources sont accessibles au chargeur de ressources de vos Applications Web et n'est pas directement visible pour le public.C'est pourquoi beaucoup de projets, de mettre leurs ressources comme des fichiers JSP, Pots/bibliothèques et de leurs propres fichiers de classe ou des fichiers de propriété ou toute autre information sensible dans le
WEB-INF
dossier. Sinon, ils seraient accessibles à l'aide d'une URL statique (utile pour charger les CSS ou Javascript par exemple).Vos fichiers JSP peut être n'importe où mais à partir d'un point de vue technique. Par exemple au Printemps, vous pouvez les configurer pour être en
WEB-INF
explicitement:La
WEB-INF/classes
etWEB-INF/lib
dossiers mentionnés dans le Wikipedia de La GUERRE des fichiers article sont des exemples de dossiers requis par la spécification Servlet au moment de l'exécution.Il est important de faire la différence entre la structure d'un projet et la structure de la GUERRE de fichier.
La structure du projet dans certains cas reflètent que partiellement la structure du fichier WAR (pour les ressources statiques tels que les fichiers JSP ou de fichiers HTML et JavaScript, mais ce n'est pas toujours le cas.
La transition de la structure du projet dans la GUERRE de fichier se fait par un processus de construction.
Pendant que vous êtes généralement libre de la conception de votre propre processus de construction, de nos jours, la plupart des gens vont utiliser une approche normalisée comme Apache Maven. Entre autres choses Maven définit les valeurs par défaut pour les ressources dans le projet de la structure de la carte à ce que les ressources dans le résultat de l'artefact (l'artefact résultant est le fichier WAR dans ce cas). Dans certains cas, la cartographie se compose d'une plaine processus de copie dans d'autres cas, le processus inclut une transformation, telles que le filtrage ou de compiler et d'autres.
Un exemple: Le
WEB-INF/classes
dossier contiendra tous compilé des classes java et des ressources (src/main/java
etsrc/main/resources
) qui ont besoin d'être chargé par le chargeur de classe pour démarrer l'application.Un autre exemple: Le
WEB-INF/lib
dossier contiendra tous les fichiers jar requis par l'application. Dans un projet maven les dépendances sont gérées pour vous et maven automatiquement une copie de la nécessaire fichiers jar à laWEB-INF/lib
dossier pour vous. Ce qui explique pourquoi vous n'avez pas delib
dossier dans un projet maven.WAR
>WEB-INF
>lib
>JAR
fichier >resources
WAR
fichier >WEB-INF
>lib
>JAR
fichier >META-INF
>resources
> yourStaticFilesGoHere.Lorsque vous déployez une application web Java EE (en utilisant des cadres ou pas),sa structure doit suivre certaines exigences/spécifications. Ces caractéristiques proviennent de :
Si vous utilisez Apache Tomcat, le répertoire racine de votre application doit être placé dans le répertoire de la webapp. Qui peut être différent si vous utilisez un autre conteneur de servlet ou de l'application serveur.
Java Servlet API exigences
Java Servlet API stipule que la racine de votre répertoire d'application doit avoir la structure suivante :
Ces exigences sont définies par Java Servlet API.
3. Votre domaine d'application
Maintenant que vous avez suivi les exigences du conteneur de Servlet(ou serveur d'application) et la Java Servlet API exigences, vous pouvez organiser les autres parties de votre webapp basés sur ce que vous avez besoin.
- Vous pouvez mettre vos ressources (fichiers JSP, de simples fichiers texte, des fichiers de script) dans votre répertoire racine de l'application. Mais alors, les gens peuvent accéder directement à partir de leur navigateur, au lieu de leurs demandes en cours de traitement par une certaine logique fournis par votre application. Donc, pour éviter que vos ressources directement accessible comme ça, vous pouvez le mettre dans le répertoire WEB-INF, dont le contenu est uniquement accessible par le serveur.
-Si vous utilisez certains cadres, ils utilisent souvent des fichiers de configuration. La plupart de ces frameworks (struts, spring, hibernate) vous obliger à mettre leurs fichiers de configuration dans le classpath (les "classes" directory).
Vous devriez mettre dans WEB-INF toutes les pages, ou des morceaux de pages, que vous ne voulez pas être public. Généralement, JSP ou facelets sont trouvés en dehors de WEB-INF, mais dans ce cas, ils sont facilement accesssible pour n'importe quel utilisateur. Dans le cas où vous avez quelques restrictions d'autorisation, WEB-INF peut être utilisée pour cela.
WEB-INF/lib peut contenir 3ème partie les bibliothèques dont vous ne voulez pas de pack au niveau système (Bocaux peuvent être disponibles pour toutes les applications en cours d'exécution sur votre serveur), mais uniquement pour cette application.
Une manière générale, de nombreux fichiers de configurations aussi aller dans WEB-INF.
Comme pour le WEB-INF/classes - il existe dans toute application web, parce que c'est le dossier dans lequel toutes les sources compilées sont placés (pas des POTS, mais compilé .fichiers java que vous avez écrit vous-même).
Cette convention est suivie pour des raisons de sécurité. Par exemple, si une personne non autorisée est autorisé à accéder à la racine du fichier JSP directement à partir de l'URL, puis ils peuvent naviguer à travers toute l'application sans aucune authentification et ils peuvent accéder à toutes les données sécurisées.
Il y a une convention (pas nécessaire) de placer des pages jsp sous répertoire WEB-INF de sorte qu'ils ne peuvent pas être profondément lié ou un signet pour.
De cette façon, toutes les demandes de page jsp doit être réalisé par le biais de notre application, de sorte que l'expérience utilisateur est garanti.