60 votes

Parfois, l'URL de JSF est *.jsf, parfois *.xhtml et parfois /faces/*. Pourquoi ?

J'essaie d'apprendre JSF, et parfois je vois que l'URL est *.jsf et est parfois *.xhtml o /faces/* . Quelqu'un peut-il compléter mes connaissances, s'il vous plaît ? Lorsque je crée un JSF en utilisant Facelet, l'extension de fichier est .xhtml alors où est-ce que .jsf L'extension de l'URL vient-elle de ?

104voto

BalusC Points 498232

El .jsf L'extension est l'endroit où le FacesServlet c'est pendant la période JSF 1.2, souvent décrite dans la section web.xml .

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

El .xhtml L'extension est de l'ordre de réel Facelets que vous avez physiquement placé dans le contenu web de votre application web, par ex. Webapp/WebContent/page.xhtml .

Si vous invoquez cette page avec l'option .jsf extension, par exemple http://localhost:8080/webapp/page.jsf alors le FacesServlet sera invoqué, localiser le page.xhtml et analyser/rendre ses composants JSF. Si le FacesServlet n'est pas invoqué, l'utilisateur final se retrouverait avec le code source XHTML brut (qui peut être vu par un clic droit, Voir la source ).

Parfois, un *.faces extension ou /faces/* Le foldermapping est utilisé. Mais cela remonte à l'époque de JSF 1.0/1.1. Vous êtes libre de choisir et d'utiliser n'importe quel mappage que vous voulez pour laisser FacesServlet écoutez, même si c'est un rien du tout. *.xyz . La page proprement dite doit toujours avoir l'adresse .xhtml mais celle-ci est configurable par les moyens suivants <context-param> en web.xml :

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xml</param-value>
</context-param>

Cela modifiera le FacesServlet pour localiser page.xml à la place de (par défaut) page.xhtml .

Plus récemment, avec JSF/Facelets 2.0 une *.xhtml a été utilisé. Dans JSF/Facelets 1.x, il n'était pas possible d'utiliser la même extension de mappage que le fichier physique. Cela entraînait une boucle infinie. Mais depuis JSF/Facelets 2.0 c'est possible et cela vous permet d'appeler la page par http://localhost:8080/webapp/page.xhtml .

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

De cette façon, vous n'avez pas besoin de configurer des restrictions de sécurité pour cacher les fichiers sources bruts dans les cas où l'utilisateur final modifie, par exemple, l'un des éléments suivants .jsf en URL à .xhtml dans la barre d'adresse du navigateur. Seuls les outils (IDE et plugins) et les ressources d'apprentissage doivent encore rattraper le passage préconisé de l'informatique à l'informatique. *.jsf à *.xhtml . Conformément à la version 2.3 de JSF, l'option FacesServlet sera par défaut auto-enregistré sur *.xhtml également (à côté de /faces/* , *.faces y *.jsf ). Ceci est rétroporté vers Mojarra 2.2.11.

Voir aussi :

0 votes

Je vois, pouvez-vous me montrer comment le mappage a lieu dans web.xml.

10 votes

Lorsque le servletcontainer démarre, il analyse le fichier web.xml, charge toutes les servlets, se souvient des mappings et, à chaque requête, il vérifie si l'url correspond au mappage de la servlet, puis invoque la servlet. Voir aussi cette réponse pour un exemple approximatif.

1 votes

Cette réponse est si bonne qu'elle devrait probablement figurer dans le manuel de Java EE :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X