J'ai vu des exemples de création de pages JSF avec .jsp
extension, d'autres exemples les créant avec .xhtml
extension et d'autres exemples choisissant .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.
Réponses
Trop de publicités?JSP est un ancien point de vue de la technologie et largement utilisé en combinaison avec la JSF 1.x. Facelets (par certaines personnes overgeneralized comme XHTML) est le successeur de JSP et présenté comme vue par défaut de la technologie JSF 2.x à la fin de 2009. Lorsque vous avez été voir les Jsp, vous étiez peut-être en lisant des livres obsolètes, des tutoriels ou des ressources ciblées sur JSF 1.x. Vous devriez les ignorer lors du développement avec JSF 2.x et de la tête aux ressources ciblées sur JSF 2.x, sinon vous pouvez vous retrouver dans la confusion parce que beaucoup de choses sont faites différemment dans JSF 2.x sur Facelets.
L' *.jsf
est juste l'un des largement utilisé des modèles URL de l' FacesServlet
cartographie en web.xml
. Les autres sont *.faces
et /faces/*
, mais ceux qui sont de retour dans le programme JSF 1.0/1.1 âges. Elles ne représentent pas le béton de l'extension de fichier/chemin d'accès, mais juste un virtuel extension de fichier/chemin d'accès et doit être spécifié dans l'Url comme http://example.com/contextname/page.jsf. Si vous êtes familier avec la base de Servlets, alors vous devriez savoir que la servletcontainer appeler le servlet lorsque l'URL de la requête correspond à la servlet modèle d'URL. Ainsi, lorsque l'URL de la requête correspond *.jsf
, puis l' FacesServlet
sera appelé de cette façon. Lors de l'utilisation des pages Jsp, il serait effectivement exécuter page.jsp
. Lors de l'utilisation de Facelets, ce serait en fait compiler 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 d'obtenir confus lors de la spécification d'Url. À l'aide de *.xhtml
comme modèle d'URL n'a pas été possible dans JSF 1.x avec Facelets 1.x, parce que l' FacesServlet
serait alors exécuter dans une boucle infinie d'appel lui-même à chaque fois. Un avantage supplémentaire de l'utilisation de *.xhtml
, c'est que l'utilisateur final ne sera pas en mesure de voir raw JSF code source à chaque fois que l'utilisateur final à dessein les changements de l'extension de l'URL dans la barre d'adresse du navigateur, par exemple, .jsf
de .xhtml
. Il n'est pas possible d'utiliser *.jsp
comme modèle d'URL, car de cette façon, le conteneur builtin JspServlet
, ce qui est déjà à l'aide de ce modèle d'URL, serait remplacée et puis l' FacesServlet
ne serait pas capable de se nourrir sur les Jsp plus.
Voir aussi:
.jsp
des fichiers sont généralement utilisés pour les JSF vues définies à l'aide des Pages Jsp. .xhtml
des fichiers sont généralement utilisés pour les JSF vues définies à l'aide de Facelets.
Ceci peut être modifié via la configuration (voir, par exemple, l' javax.faces.DEFAULT_SUFFIX
et javax.faces.FACELETS_SUFFIX
paramètres de configuration.)
D'autres mappages d'extension (*.jsf
, *.faces
) ont tendance à être utilisé pour le traitement des demandes par l' FacesServlet
. C'est une logique de cartographie de la vue qui le JSF runtime poignée. Comment les mappages sont traitées est défini dans l' web.xml
(qui ne doit pas être fait en utilisant des extensions; l' /faces/*
cartographie est souvent utilisé.
À partir de la spécification:
Le Mappage Des Servlets
Toutes les demandes d'une application web sont mappés à une servlet basée sur la correspondance d'un modèle d'URL (tel que défini dans la Servlet Java Spécification) contre la partie de l'URL de la requête après la chemin de contexte qui a choisi cette application web. JSF implémentations doivent soutenir application web qui permet de définir un
<servlet-mapping>
que des cartes valides url-pattern à l' FacesServlet. Le préfixe ou le mappage d'extension peut être utilisé. Lors de l'utilisation de préfixe cartographie, le mappage suivant est recommandé, mais pas requis:<servlet-mapping> <servlet-name> faces-servlet-name </servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping>
Lors de l'utilisation de l'extension de la cartographie la cartographie suivant est recommandé, mais pas besoin:
<servlet-mapping> <servlet-name> faces-servlet-name </servlet-name> <url-pattern>*.faces</url-pattern> </servlet-mapping>
En plus de FacesServlet, JSF implémentations peuvent soutenir d'autres moyens d'invoquer le JavaServer Faces du traitement de la requête du cycle de vie, mais les applications qui s'appuient sur ces mécanismes ne sera pas portable.