JSPs sind eigentlich Servlets, wie Sie bereits gesehen haben. Der Container konvertiert alle JSP-Dateien in Servlets, bevor sie ausgeführt werden. JSPs bieten nur eine einfache Möglichkeit, Komponenten zu erstellen, die Nicht-Java-Code enthalten.
Sobald eine JSP-Seite erstellt und bereitgestellt wurde, führt der Container einige Lebenszyklusereignisse aus, einschließlich des Aufrufs einiger seiner Methoden, die Servlet-Lebenszyklusereignissen ähneln.
- JSP-Seitenübersetzung (Validierungs-, Übersetzungs-, Kompilierungsphasen)
- Klasse laden
- Instanziieren
- jspInit-Methode heißt
- _jspService-Methode heißt
- jspDestroy-Methode heißt
JSP-Seitenübersetzung (Validierungs-, Übersetzungs-, Kompilierungsphasen)
Die Validierung wird vor der Übersetzung durchgeführt. Die Syntaxprüfung erfolgt und alle Verweise auf Tag-Bibliotheken, Aktionen und EL-Funktionen in der JSP werden validiert, um sicherzustellen, dass sie vorhanden sind und auf die Seite zugegriffen werden kann.
Vor der Validierung wird die JSP-Seite in eine XML-Ansicht konvertiert, und diese XML-Ansicht wird dann validiert und übersetzt.
Die anfängliche JSP-Eingabeseite wird in Servlet-Quellcode übersetzt. Dabei werden die print-Anweisungen für jede Ihrer Nicht-Java-Zeilen in die JSP geschrieben. Dieses generierte Servlet sollte HttpJspPage oder sein übergeordnetes JspPage implementieren, je nachdem, ob die Umgebung HTTP-basiert ist oder nicht. Verwandter Blog: Angular Training in Chennai
- Ein Anbieter verfügt normalerweise über ein spezialisiertes JSP-Basisservlet, das alle erforderlichen Klassen oder Schnittstellen erweitert und implementiert. In Tomcat wird dies org genannt.Apache.Jasper.Laufzeit.In: HttpJspBase. HttpJspBase erweitert HttpServlet und GenericServlet und implementiert HttpJspPage, JspPage, Serializable, Servlet, ServletConfig.
Der Servlet-Quellcode wird dann in eine Servlet-Klassendatei kompiliert.
Ausgänge
- Innerhalb der Translationsphase gibt es zwei Ausgänge.
- Die erste ist eine Zwischenausgabe: eine Java-Quelldatei für ein Servlet.
- Die zweite ist die kompilierte Klassendatei aus der Servlet-Quelle.
- Die Klassendatei wird für die zukünftige Verwendung beibehalten, und die meisten JSP-Container behalten oder geben Ihnen möglicherweise eine Option, mit der Sie die Servlet-Quelle für Debugging-Zwecke beibehalten können.
- In Tomcat werden die generierte Servlet-Java-Quelle und die kompilierte Klasse während der JSP-Übersetzung standardmäßig im Verzeichnis <Tomcat-Installation-Directory>/work/Catalina/localhost/<context- directory>/org/apache/jsp .
Timing
- Obwohl ein JSP-Container über einen Ermessensspielraum verfügt, wann die Übersetzung erfolgt, wird die JSP standardmäßig (in den meisten Fällen) in ein Servlet kompiliert und dann beim ersten Zugriff geladen.
- Dies kann zu einer kleinen Verzögerung bei der ersten Anforderung führen, bei nachfolgenden Anforderungen tritt jedoch keine Verzögerung auf.
- In bestimmten Anwendungsservern können Sie JSPs auch vorkompilieren, bevor Sie sie in JARs einfügen.
Fehler
- Wenn eine Seite nicht übersetzt werden kann, sollte eine HTTP-Anforderung für die Seite zu einem Statuscode 500 (Serverfehler) führen, der in der HTTP-Antwort zurückgemeldet wird.
Load Class
- Die generierte Servlet-Klasse wird mit dem Klassenlader der Anwendung geladen.
Instanziieren
- Eine Instanz der Servlet-Klasse wird erstellt.
- Für jede Servlet-Mapping-Deklaration der JSP im Web.xml (ähnlich wie Servlets) wird eine neue Instanz zusätzlich zur Standard-JSP-Dateiinstanz erstellt. Wenn ich eine JSP-Seite im Kontextstammverzeichnis habe und dieselbe JSP-Seite auch im Web registriert habe.xml, ich werde zwei Instanzen dieser JSP erstellt haben.
Die jspInit-Methode heißt
- Sie können diese Methode überschreiben.
Die _jspService-Methode wird aufgerufen
- Wenn Anforderungen gestellt werden, ruft der Container die service(request, response) -Methode des generierten Servlets auf, die die Methode _jspService() aufrufen und die Anforderungs- und Antwortparameter übergeben soll.
- Wir sollten _jspService() von unserer JSP-Seite nicht überschreiben. Diese Methode stellt Ihre Seitenquelle in Java-Codeform dar — es liegt an den Seitengeneratoren des Containers, diese Methode für jede einzelne JSP zu implementieren.
- Die JSP-Spezifikation ist jedoch flexibel genug, um jedes Anforderungs- / Antwortprotokoll aufzunehmen, das Sie implementieren möchten, indem Sie diese Methode überschreiben. und dafür müssen Sie nur die _jspService-Methode überschreiben.
Die jspDestroy-Methode wird aufgerufen
- Wird aufgerufen, bevor die Instanz des JSP-Servlets ungültig gemacht und Müll gesammelt wird