web-dev-qa-db-fra.com

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

Été essayer d'apprendre JSF, et parfois je vois que l'URL est *.jsf et est parfois *.xhtml ou /faces/*. Quelqu'un peut-il remplir mes connaissances, s'il vous plaît? Lorsque je crée un JSF à l'aide de Facelet, l'extension de fichier est .xhtml, alors d'où vient .jsf L'extension URL provient-elle?

56
Thang Pham

Le .jsf l'extension est l'endroit où se trouve FacesServlet pendant la période JSF 1.2 souvent mappée dans web.xml.

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

Le .xhtml l'extension correspond au fichier Facelets réel tel que vous l'avez physiquement placé dans le contenu Web de votre application Web, par exemple Webapp/WebContent/page.xhtml.

Si vous appelez cette page avec le .jsf extension, par exemple http://localhost:8080/webapp/page.jsf puis le FacesServlet sera invoqué, localisez le page.xhtml fichier et analyser/rendre ses composants JSF. Si le FacesServlet n'est pas invoqué, l'utilisateur final finira par obtenir le code source XHTML brut (qui peut être vu par clic droit, Voir la source).

Parfois, un *.faces extension ou /faces/* la carte de pliage a été utilisée. Mais c'était de retour dans les âges JSF 1.0/1.1. Vous êtes libre de choisir et d'utiliser le mappage que vous souhaitez laisser FacesServlet écouter, même s'il ne s'agit pas de dire *.xyz. La page elle-même doit toujours avoir le .xhtml extension, mais elle est configurable par le <context-param> dans web.xml:

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

Cela changera le FacesServlet pour localiser page.xml au lieu de (par défaut) page.xhtml.

Plus récemment, avec JSF/Facelets 2.0 a *.xhtml le mappage 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. Il en résulterait 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 certaines restrictions de sécurité pour masquer les fichiers source bruts dans les cas où l'utilisateur final change par exemple .jsf dans l'URL de .xhtml dans la barre d'adresse du navigateur. Seuls les outils (IDE et plugins) et les ressources d'apprentissage doivent encore rattraper le mouvement préconisé de *.jsf à *.xhtml. Selon JSF 2.3, le FacesServlet sera par défaut enregistré automatiquement sur *.xhtml aussi (à côté de /faces/*, *.faces et *.jsf). Ceci est rétroporté vers Mojarra 2.2.11.

Voir également:

98
BalusC