Quelle est la différence entre créer des pages JSF avec.jsp ou.xhtml ou.jsf extension

j'ai vu quelques exemples créer les pages JSF avec .jsp extension, d'autres exemples les créer avec .xhtml extension, et d'autres exemples choisir .jsf . Je voudrais juste savoir quelle est la différence entre les extensions ci-dessus lorsqu'on travaille avec des pages JSF, et comment choisir l'extension appropriée?

43
demandé sur BalusC 2011-10-27 14:31:30

2 réponses

JSP est une technologie de vision ancienne et largement utilisé en combinaison avec JSF 1.x. Facelets (by some people overgeneralized as XHTML ) est le successeur de JSP et introduit comme technologie de vue par défaut de JSF 2.x à la fin de 2009. Lorsque vous voyiez JSPs, vous lisiez peut-être des livres, des tutoriels ou des ressources désuets ciblés sur JSF 1.x. Vous devriez généralement les ignorer lorsque vous développez avec JSF 2.x et dirigez-vous vers les ressources ciblées sur le JSF 2.x, sinon vous risquez de se retrouver dans la confusion parce que beaucoup de choses sont faites différemment dans le JSF 2.x sur Facelets.

le *.jsf est juste un des modèles D'URL largement utilisés de la FacesServlet cartographie dans web.xml . D'autres sont *.faces et /faces/* , mais ceux-ci sont de retour dans les âges JSF 1.0/1.1. Ils ne représentent pas tous l'extension/chemin de fichier concret, mais juste une extension/chemin de fichier virtuel et doit être spécifié dans les URLs seulement comme so http://example.com/contextname/page.jsf . Si vous êtes familier avec la base Servlets , alors vous devez savoir que le servletcontainer invoquera le servlet lorsque l'URL de la requête correspond au modèle D'URL du servlet. Ainsi, lorsque l'URL de la requête correspond à *.jsf , alors le FacesServlet sera invoqué de cette façon. En utilisant JSPs, 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 motif D'URL. De cette façon, vous n'avez pas besoin d'être confus lorsque vous spécifiez des URLs. L'utilisation de *.xhtml comme motif D'URL n'était pas possible dans JSF 1.x avec Facelets 1.x, parce que le FacesServlet fonctionnerait 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 que l'utilisateur final modifie délibérément l'extension URL dans la barre d'adresse du navigateur à partir de for exemple .jsf à .xhtml . Il n'est pas possible d'utiliser *.jsp comme motif D'URL, parce que de cette façon l'option JspServlet du conteneur , qui utilise déjà ce motif D'URL, serait annulée et alors le FacesServlet ne serait plus capable de se nourrir sur JSPs.

voir aussi:

54
répondu BalusC 2017-05-23 11:53:53

.jsp les fichiers sont généralement utilisés pour les vues JSF définies en utilisant des Pages JavaServer. Les fichiers .xhtml sont généralement utilisés pour les vues JSF définies à L'aide de Facelets.

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

les autres mappages d'extension ( *.jsf , *.faces ) ont tendance à être utilisés pour traiter les requêtes via le FacesServlet . Il s'agit d'une correspondance logique avec le vue que le JSF runtime gérera. La façon dont les correspondances sont manipulées est définie dans le web.xml (qui ne doit pas être fait en utilisant des extensions; le /faces/* cartographie est souvent utilisé.

De la spec:

Servlet "Mappage De 1519220920"

toutes les requêtes à une application web sont mappées sur un servlet particulier basé sur l'appariement D'un modèle D'URL (tel que défini dans le Servlet Java Spécification) contre la portion de l'URL de la requête après le chemin de contexte qui a sélectionné cette application web. JSF les implémentations doivent prendre en charge une application web qui définit <servlet-mapping> qui relie n'importe quel url-pattern valide à la FacesServlet. On peut utiliser un préfixe ou une extension. Lors de l'utilisation de préfixe cartographie, la cartographie suivante est recommandée, mais pas requis:

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

lors de l'utilisation de la cartographie par extension, la cartographie suivante est recommandée, mais non requis:

<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 supporter d'autres les façons d'invoquer le JavaServer font face au cycle de vie du traitement des requêtes, mais les applications qui s'appuient sur ces mécanismes ne seront pas portables.

11
répondu McDowell 2011-10-27 10:55:17