60 Stimmen

Was ist der Unterschied zwischen dem Erstellen von JSF-Seiten mit .jsp, .xhtml oder .jsf-Erweiterung?

Ich habe einige Beispiele gesehen, die die JSF-Seiten mit der Erweiterung .jsp erstellen, andere Beispiele erstellen sie mit der Erweiterung .xhtml und wieder andere Beispiele wählen .jsf. Ich würde gerne wissen, was der Unterschied zwischen den oben genannten Erweiterungen bei der Arbeit mit JSF-Seiten ist und wie man die passende Erweiterung auswählt?

67voto

BalusC Punkte 1034465

JSP ist eine alte Ansichtstechnologie und wird häufig in Kombination mit JSF 1.x verwendet. Facelets (von einigen Leuten verallgemeinert als XHTML) ist der Nachfolger von JSP und wurde Ende 2009 als Standard-Ansichtstechnologie von JSF 2.x eingeführt. Wenn Sie JSPs gesehen haben, haben Sie möglicherweise veraltete Bücher, Tutorials oder Ressourcen zu JSF 1.x gelesen. Sie sollten diese im Allgemeinen ignorieren, wenn Sie mit JSF 2.x entwickeln, und sich stattdessen auf Ressourcen zu JSF 2.x konzentrieren, da viele Dinge in JSF 2.x mit Facelets anders gemacht werden.

Das *.jsf ist nur eines der weit verbreiteten URL-Muster des FacesServlet-Mappings in der Datei web.xml. Andere sind *.faces und /faces/*, aber diese stammen aus der Zeit von JSF 1.0/1.1. Sie repräsentieren alle keine konkrete Dateierweiterung/-pfad, sondern nur eine virtuelle Dateierweiterung/-pfad und müssen nur in URLs angegeben werden, wie z. B. http://example.com/contextname/page.jsf. Wenn Sie mit grundlegenden Servlets vertraut sind, sollten Sie wissen, dass der Servletcontainer das Servlet aufrufen wird, wenn die Anforderungs-URL mit dem URL-Muster des Servlets übereinstimmt. Wenn also die Anforderungs-URL mit *.jsf übereinstimmt, wird der FacesServlet auf diese Weise aufgerufen. Bei der Verwendung von JSPs würde tatsächlich page.jsp ausgeführt werden. Bei der Verwendung von Facelets würde tatsächlich page.xhtml kompiliert.

Seit JSF 2.x können Sie auch *.xhtml als URL-Muster verwenden. Auf diese Weise müssen Sie sich bei der Angabe von URLs nicht verwirren lassen. Die Verwendung von *.xhtml als URL-Muster war bei JSF 1.x mit Facelets 1.x nicht möglich, da der FacesServlet dann in einer Endlosschleife sich selbst aufrufen würde. Ein zusätzlicher Vorteil der Verwendung von *.xhtml besteht darin, dass der Endbenutzer keinen Roh-JSF-Quellcode sehen kann, wenn der Endbenutzer die URL-Erweiterung im Browseradressfeld absichtlich von z. B. .jsf auf .xhtml ändert. Es ist nicht möglich, *.jsp als URL-Muster zu verwenden, da auf diese Weise das integrierte JspServlet des Containers, das bereits dieses URL-Muster verwendet, überschrieben würde und dann der FacesServlet nicht mehr auf JSPs zugreifen könnte.

Siehe auch:

14voto

McDowell Punkte 105255

.jsp-Dateien werden im Allgemeinen für JSF-Ansichten verwendet, die mit JavaServer Pages definiert sind. .xhtml-Dateien werden im Allgemeinen für JSF-Ansichten verwendet, die mit Facelets definiert sind.

Dies kann über Konfiguration geändert werden (siehe z. B. die Konfigurationsparameter javax.faces.DEFAULT_SUFFIX und javax.faces.FACELETS_SUFFIX.)

Andere Erweiterungszuordnungen (*.jsf, *.faces) werden in der Regel für die Verarbeitung von Anfragen über den FacesServlet verwendet. Dies ist eine logische Zuordnung zur Ansicht, die von der JSF-Laufzeitumgebung verarbeitet wird. Wie Zuordnungen behandelt werden, ist in der web.xml definiert (die nicht unbedingt über Erweiterungen gemacht werden muss; oft wird die /faces/*-Zuordnung verwendet.

Aus der Spezifikation:

Servletoverbindung

Alle Anfragen an eine Webanwendung werden an ein bestimmtes Servlet über eine Übereinstimmung mit einem URL-Muster (wie im Java Servlet-Spezifikation definiert) zugeordnet, das dem Teil der Anforderungs-URL nach dem Kontextpfad entspricht, der diese Webanwendung ausgewählt hat. JSF-Implementierungen müssen Webanwendungen unterstützen, die ein definieren, das jedes gültige URL-Muster auf den FacesServlet abbildet. Präfix- oder Erweiterungszuordnung kann verwendet werden. Bei der Verwendung von Präfixzuordnung wird die folgende Zuordnung empfohlen, ist aber nicht erforderlich:

 faces-servlet-name 
/faces/*

Bei der Verwendung von Erweiterungszuordnung wird die folgende Zuordnung empfohlen, ist aber nicht erforderlich:

 faces-servlet-name 
*.faces

Neben dem FacesServlet können JSF-Implementierungen möglicherweise andere Möglichkeiten unterstützen, den Lebenszyklus der JavaServer Faces-Anforderungsverarbeitung aufzurufen. Anwendungen, die auf diese Mechanismen angewiesen sind, werden jedoch nicht portabel sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X