web-dev-qa-db-fra.com

Quelle est la différence entre la création de pages JSF avec l'extension .jsp ou .xhtml ou .jsf

J'ai vu quelques exemples de création de pages JSF avec .jsp extension, d'autres exemples les créant avec .xhtml extension, et d'autres exemples choisissez .jsf. Je voudrais juste savoir quelle est la différence entre les extensions ci-dessus lorsque vous travaillez avec des pages JSF, et comment choisir l'extension appropriée?

52
fresh_dev

JSP est une ancienne technologie de vue et largement utilisée en combinaison avec JSF 1.x. Facelets (par certaines personnes trop généralisées en XHTML ) est le successeur de JSP et introduit comme technologie d'affichage par défaut de JSF 2.x fin 2009. Quand vous étiez en voyant les JSP, vous lisiez peut-être des livres, des tutoriels ou des ressources obsolètes ciblés sur JSF 1.x. Vous devez généralement les ignorer lors du développement avec JSF 2.x et vous diriger vers des ressources ciblées sur JSF 2.x, sinon vous risquez de vous retrouver dans la confusion car beaucoup de choses sont faites différemment dans JSF 2.x sur Facelets.

Le *.jsf n'est qu'un des modèles d'URL largement utilisés du mappage FacesServlet dans web.xml. Les autres sont *.faces et /faces/*, mais ceux-ci remontent aux âges JSF 1.0/1.1. Ils ne représentent pas tous l'extension/le chemin du fichier concret, mais juste une extension/le chemin du fichier virtuel et doivent être spécifiés dans les URL uniquement comme cela http://example.com/nomcontexte/page.jsf . Si vous connaissez basique Servlets , vous devez savoir que le servletcontainer invoquera le servlet lorsque l'URL de demande correspond au modèle d'URL du servlet. Ainsi, lorsque l'URL de la demande correspond à *.jsf, alors le FacesServlet sera invoqué de cette façon. Lors de l'utilisation de JSP, il exécuterait en fait page.jsp. Lors de l'utilisation de Facelets, cela compilerait en fait page.xhtml.

Depuis JSF 2.x, vous pouvez également utiliser *.xhtml comme modèle d'URL. De cette façon, vous n'avez pas besoin de vous embrouiller lorsque vous spécifiez des URL. En utilisant *.xhtml car le modèle d'URL n'était pas possible dans JSF 1.x avec Facelets 1.x, parce que le FacesServlet s'exécuterait alors dans une boucle infinie s'appelant à chaque fois. Un avantage supplémentaire de l'utilisation de *.xhtml est que l'utilisateur final ne sera pas en mesure de voir le code source JSF brut à chaque fois qu'il modifie volontairement l'extension URL dans la barre d'adresse du navigateur, par exemple .jsf à .xhtml. Il n'est pas possible d'utiliser *.jsp en tant que modèle d'URL, car de cette façon, la fonction intégrée du conteneur JspServlet, qui utilise déjà ce modèle d'URL, serait remplacée et le FacesServlet ne pourrait plus se nourrir de JSP.

Voir également:

61
BalusC

Les fichiers .jsp Sont généralement utilisés pour les vues JSF définies à l'aide des pages JavaServer. Les fichiers .xhtml Sont généralement utilisés pour les vues JSF définies à l'aide de Facelets.

Ceci peut être modifié via la configuration (par exemple, voir les paramètres de configuration javax.faces.DEFAULT_SUFFIX Et javax.faces.FACELETS_SUFFIX.)

D'autres mappages d'extension (*.jsf, *.faces) Ont tendance à être utilisés pour le traitement des demandes via FacesServlet. Il s'agit d'un mappage logique vers la vue que le runtime JSF va gérer. La façon dont les mappages sont gérés est définie dans le web.xml (Cela ne doit pas être fait à l'aide d'extensions; le mappage /faces/* Est souvent utilisé.

De la spécification:

Mappage de servlet

Toutes les demandes adressées à une application Web sont mappées vers un servlet particulier en fonction de la correspondance avec un modèle d'URL (tel que défini dans la spécification Java Servlet) par rapport à la partie de l'URL de demande après le chemin de contexte qui a sélectionné ce application Web. Les implémentations JSF doivent prendre en charge l'application Web qui définit un <servlet-mapping> qui mappe tout modèle d'URL valide au FacesServlet. Le mappage de préfixe ou d'extension peut être utilisé. Lors de l'utilisation du mappage de préfixe, le mappage suivant est recommandé, mais pas Champs obligatoires:

<servlet-mapping>
<servlet-name> faces-servlet-name </servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>

Lors de l'utilisation du mappage d'extension, le mappage suivant est recommandé, mais pas obligatoire:

<servlet-mapping>
<servlet-name> faces-servlet-name </servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>

En plus de FacesServlet, les implémentations JSF peuvent prendre en charge d'autres façons d'invoquer le cycle de vie du traitement des demandes JavaServer Faces, mais les applications qui s'appuient sur ces mécanismes ne seront pas portables.

14
McDowell