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

J’ai vu des exemples de création des pages JSF avec l’extension .jsp , d’autres exemples les créant avec l’extension .xhtml , et d’autres exemples choisissent .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?

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

Le *.jsf n’est que l’un des modèles d’URL les plus FacesServlet mappage FacesServlet dans web.xml . D’autres sont *.faces et /faces/* , mais ceux-ci remontent à l’âge de JSF 1.0 / 1.1. Ils ne représentent pas tous l’extension / chemin du fichier concret, mais seulement une extension / chemin de fichier virtuel et doivent être spécifiés uniquement dans les URL comme http://example.com/contextname/page.jsf . Si vous êtes familier avec les servlets de base, vous devez savoir que le servletcontainer appellera le servlet lorsque l’URL de la demande correspond au modèle d’URL du servlet. Donc, lorsque l’URL de la requête correspond à *.jsf , alors le FacesServlet sera invoqué de cette manière. Lorsque vous utilisez des JSP, il exécutera réellement page.jsp . En utilisant Facelets, cela comstackrait réellement 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 confondre lorsque vous spécifiez des URL. L’utilisation de *.xhtml comme modèle d’URL n’était pas possible dans JSF 1.x avec Facelets 1.x, car le FacesServlet serait alors exécuté dans une boucle infinie s’appelant à chaque fois. Un avantage supplémentaire de l’utilisation de *.xhtml est que l’utilisateur *.xhtml ne pourra pas voir le code source JSF brut lorsque l’utilisateur final modifie délibérément l’extension d’URL dans la barre d’adresse du navigateur, par exemple de .jsf à .xhtml . Il n’est pas possible d’utiliser *.jsp tant que modèle d’URL, car de cette façon, le JspServlet JspServlet au JspServlet , qui utilise déjà ce modèle d’URL, serait remplacé, et FacesServlet ne pourrait plus se nourrir de JSP.

Voir également:

  • Quelle est la différence entre JSF, Servlet et JSP?
  • Pourquoi Facelets est préféré au JSP comme langage de définition de vue à partir de JSF2.0?
  • Facelets JSF: Parfois, je vois que l’URL est .jsf et parfois .xhtml. Pourquoi?

.jsp fichiers .jsp sont généralement utilisés pour les vues JSF définies à l’aide de JavaServer Pages. .xhtml 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 parameters de configuration javax.faces.DEFAULT_SUFFIX et javax.faces.FACELETS_SUFFIX ).

D’autres mappages d’extension ( *.jsf , *.faces ) ont tendance à être utilisés pour traiter les requêtes via le FacesServlet . Ceci est un mappage logique à la vue que le runtime JSF va gérer. La manière dont les mappages sont gérés est définie dans le web.xml (cela n’a pas besoin d’être fait avec des 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 à une servlet particulière en fonction de la correspondance d’un modèle d’URL (défini dans la spécification de servlet Java) avec la partie de l’URL de requête après le chemin de contexte qui a sélectionné cette application Web. Les implémentations JSF doivent prendre en charge les applications Web qui définissent un qui mappe tout modèle d’URL valide sur le FacesServlet. Le mappage de préfixe ou d’extension peut être utilisé. Lors de l’utilisation du mappage de préfixes, le mappage suivant est recommandé, mais n’est pas obligatoire:

   faces-servlet-name  /faces/*  

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

   faces-servlet-name  *.faces  

En plus de FacesServlet, les implémentations JSF peuvent prendre en charge d’autres méthodes pour appeler le cycle de vie du traitement des requêtes JavaServer Faces, mais les applications qui s’appuient sur ces mécanismes ne sont pas portables.