Jakarta Servlet
Originalautor (en) | Pavni Diwanji |
---|---|
Entwickler (en) | Eclipse Foundation |
Erstveröffentlichung | Dezember 1996 |
Stabile Version | 5.0 / 7. September 2020 |
Repository | |
Geschrieben in | Java |
Plattform | Jakarta ee 9 |
Größe | 2,56 MB |
Typ | Softwarekomponente zum Web -API |
Lizenz | Eclipse Public Lizenz |
Webseite | Jakarta |

A Jakarta Servlet (ehemals Java Servlet) ist a Java Softwarekomponente Das erweitert die Fähigkeiten von a Server. Obwohl Servlets auf viele Arten von Anfragen reagieren können, implementieren sie am häufigsten Webcontainer zum Hosting Web Applikationen an Webserver und qualifizieren sich so als serverseitiges Servlet Web -API. Solche Web -Servlets sind die Java Gegenstück zu anderen Dynamischer Webinhalt Technologien wie Php und ASP.NET.
Einführung
Ein Jakarta -Servlet verarbeitet oder speichert a Java -Klasse in Jakarta ee Das entspricht der Jakarta Servlet -API,[1] Ein Standard für die Implementierung von Java -Klassen, die auf Anfragen reagieren. Servlets könnten im Prinzip über jeden kommunizieren Kundenserver Protokoll, aber sie werden am häufigsten mit verwendet Http. Somit wird "Servlet" oft als Abkürzung für "HTTP Servlet" verwendet.[2] Also a Softwareentwickler kann ein Servlet verwenden, um hinzuzufügen dynamischer Inhalt zu einem Webserver Verwendung der Java -Plattform. Der generierte Inhalt ist häufig Html, aber es können andere Daten sein, wie z. Xml und häufiger, JSON. Servlets können aufrechterhalten Zustand in Sitzung Variablen über viele Servertransaktionen über verwenden HTTP -Kekse, oder URL -Zuordnung.
Die Jakarta Servlet -API wurde in gewissem Maße von zwei Standard -Java -Technologien für Webdienste ersetzt:
- das Jakarta Rastful Web Services (JAX-RS 2.0) Nützlich für Ajax, JSON und REST-Dienste und
- das Jakarta XML Web Services (Jax-ws) nützlich für SEIFE Internetdienste.
Ein Servlet bereitzustellen und auszuführen, a Webcontainer muss benutzt werden. Ein Webcontainer (auch als Servlet -Container bezeichnet) ist im Wesentlichen die Komponente eines Webservers, der mit den Servlets interagiert. Der Webcontainer ist für die Verwaltung des Lebenszyklus von Servlets, die Zuordnung einer URL auf ein bestimmtes Servlet verantwortlich und sicherzustellen, dass der URL -Antragsteller über die richtigen Zugriffsrechte verfügt.
Das Servlet API, enthalten in der Java -Paket Hierarchie Javax.servlet
definiert die erwarteten Interaktionen des Webcontainers und eines Servlets.[2]
A Servlet
ist ein Objekt Das empfängt eine Anfrage und generiert eine Antwort basierend auf dieser Anfrage. Das grundlegende Servlet -Paket definiert Java -Objekte, um Servlet -Anfragen und -antworten sowie Objekte darzustellen, um die Konfigurationsparameter und Ausführungsumgebungen des Servlets zu reflektieren. Das Paket javax.servlet.http
Definiert Http-Spezifische Unterklassen der generischen Servlet -Elemente, einschließlich Sitzungsverwaltungsobjekten, die mehrere Anforderungen und Antworten zwischen dem Webserver und einem Client verfolgen. Servlets können in a verpackt werden Kriegsdatei Als ein Internetanwendung.
Servlets können automatisch aus generiert werden Jakarta Serverseiten (Jsp) durch die Jakarta Serverseiten Compiler. Der Unterschied zwischen Servlets und JSP besteht darin, dass Servlets normalerweise HTML in Java -Code einbetten, während JSPs Java -Code in HTML einbetten. Während die direkte Verwendung von Servlets zur Generierung von HTML (wie im folgenden Beispiel gezeigten) selten geworden ist, ist das mvC -Web -Framework auf höherer Ebene in Jakarta EE (JSF) verwendet die Servlet -Technologie immer noch explizit für die Anforderung/Antwort mit niedriger Ebene über die FACESSERVLET
. Eine etwas ältere Verwendung besteht darin, Servlets in Verbindung mit JSPs in einem Muster genannt zu verwenden. "Modell 2", was ein Geschmack der ist Model View Controller.
Die aktuelle Version von Servlet ist 5.0.[3]
Geschichte
Die Java Servlet -API wurde erstmals öffentlich im Eröffnungsgrad angekündigt Javaone Konferenz im Mai 1996.[4][5] Ungefähr zwei Monate nach den Ankündigungen auf der Konferenz wurde die erste öffentliche Implementierung auf der Javasoft -Website zur Verfügung gestellt. Dies war das erste Alpha des Java -Webservers (JWS; damals unter seinem Codenamen bekannt Jeeves)[6] Dies würde schließlich am 5. Juni 1997 als Produkt versendet werden.[7]
In seinem Blog auf Java.net, Sun Veteran und Glasfische Leiten Sie Jim Driscoll die Geschichte der Servlet -Technologie.[8] James Gosling Erster Gedanke an Servlets in den frühen Tagen von JavaAber das Konzept wurde erst im Dezember 1996 zu einem Produkt, als Sun JWS versandte.[9][10][11] Dies war vor dem, was jetzt das ist Jakarta ee wurde in eine Spezifikation gemacht.
Die Servlet1 -Spezifikation wurde von Pavni Diwanji erstellt[12][13] Während sie bei der Arbeit bei der Arbeit Sun Microsystems, mit Version 1.0 im Juni 1997 abgeschlossen. Ab Version 2.2 wurde die Spezifikation unter dem entwickelt Java Community -Prozess.
Servlet API -Version | Veröffentlicht | Spezifikation | Plattform | Wichtige Änderungen |
---|---|---|---|---|
Jakarta Servlet 6.0 | 15. Oktober 2021 | 6.0 | Jakarta ee 10 | Entfernen Sie veraltete Funktionen und implementieren Sie angeforderte Verbesserungen |
Jakarta Servlet 5.0 | 9. Oktober 2020 | 5.0 | Jakarta ee 9 | API vom Paket bewegt javax.servlet zu jakarta.servlet |
Jakarta Servlet 4.0.3 | 10. September 2019 | 4.0 | Jakarta ee 8 | Umbenannt in "Java" -Marke |
Java Servlet 4.0 | September 2017 | JSR 369 | Java ee 8 | Http/2 |
Java Servlet 3.1 | Mai 2013 | JSR 340 | Java ee 7 | Nicht blockierende I/O-, HTTP-Protokoll-Upgrade-Mechanismus (MechanismusWebsocket)[14] |
Java Servlet 3.0 | Dezember 2009 | JSR 315 | Java ee 6, Java SE 6 | Steckbarkeit, einfache Entwicklung, Async -Servlet, Sicherheit, Datei -Hochladen |
Java Servlet 2.5 | September 2005 | JSR 154 | Java ee 5, Java SE 5 | Erfordert Java SE 5, unterstützt Annotation |
Java Servlet 2.4 | November 2003 | JSR 154 | J2EE 1.4, J2SE 1.3 | web.xml verwendet XML -Schema |
Java Servlet 2.3 | August 2001 | JSR 53 | J2EE 1.3, J2SE 1.2 | Zugabe von Filter |
Java Servlet 2.2 | August 1999 | JSR 902, JSR 903 | J2EE 1.2, J2SE 1.2 | Wird Teil von J2EE, eingeführte unabhängige Webanwendungen in .war -Dateien |
Java Servlet 2.1 | November 1998 | 2.1a | Nicht spezifiziert | Erste offizielle Spezifikation, hinzugefügt RequestDispatcher , ServletContext |
Java Servlet 2.0 | Dezember 1997 | — | JDK 1.1 | Teil des April 1998 Java Servlet Development Kit 2.0[15] |
Java Servlet 1.0 | Dezember 1996 | — | Teil des Juni 1997 Java Servlet Development Kit (JSDK) 1.0[9] |
Lebenszyklus eines Servlets
Drei Methoden sind von zentraler Bedeutung für den Lebenszyklus eines Servlets. Diese sind drin()
, Service()
, und zerstören()
. Sie werden von jedem Servlet implementiert und zu bestimmten Zeiten vom Server aufgerufen.
- Während der Initialisierungsphase des Servlets Lebenszyklus, der Webcontainer initialisiert die Servlet -Instanz, indem Sie das aufrufen
drin()
Methode, ein Objekt übergeben, das die implementierenjavax.servlet.servletConfig
Schnittstelle. Mit diesem Konfigurationsobjekt kann das Servlet zugreifen Namenswerten Initialisierungsparameter aus der Webanwendung. - Nach der Initialisierung kann die Servlet -Instanz Client -Anfragen bedienen. Jeder Anfrage wird in einem eigenen separaten Thread gewartet. Der Webcontainer ruft die auf
Service()
Methode des Servlets für jede Anfrage. DasService()
Die Methode bestimmt die Art der gestellten Anforderung und sendet sie an eine geeignete Methode, um die Anforderung zu verarbeiten. Der Entwickler des Servlets muss eine Implementierung für diese Methoden bereitstellen. Wenn eine Anforderung für eine Methode gestellt wird, die nicht vom Servlet implementiert wird, wird die Methode der übergeordneten Klasse aufgerufen, was normalerweise dazu führt, dass ein Fehler an den Antragsteller zurückgegeben wird. - Schließlich ruft der Webcontainer die auf
zerstören()
Methode, die das Servlet aus dem Dienst nimmt. Daszerstören()
Methode wiedrin()
, wird nur einmal im Lebenszyklus eines Servlets genannt.
Das Folgende ist ein typisches Benutzerszenario dieser Methoden.
- Nehmen Sie an, dass ein Benutzer anfordert, a zu besuchen URL.
- Der Browser generiert dann eine HTTP -Anforderung für diese URL.
- Diese Anfrage wird dann an den entsprechenden Server gesendet.
- Die HTTP -Anforderung wird vom Webserver empfangen und an den Servlet -Container weitergeleitet.
- Der Container ordnet diese Anfrage an ein bestimmtes Servlet ab.
- Das Servlet wird dynamisch abgerufen und in den Adressraum des Containers geladen.
- Der Behälter ruft die auf
drin()
Methode des Servlets.- Diese Methode wird nur aufgerufen, wenn das Servlet zum ersten Mal in den Speicher geladen wird.
- Es ist möglich, Initialisierungsparameter an das Servlet zu übergeben, damit es sich selbst konfigurieren kann.
- Der Behälter ruft die auf
Service()
Methode des Servlets.- Diese Methode wird aufgerufen, um die HTTP -Anforderung zu verarbeiten.
- Das Servlet kann Daten lesen, die in der HTTP -Anfrage bereitgestellt wurden.
- Das Servlet kann auch eine HTTP -Antwort für den Client formulieren.
- Das Servlet bleibt im Adressraum des Containers und steht zur Verfügung, um alle anderen von Kunden erhaltenen HTTP -Anfragen zu verarbeiten.
- Das
Service()
Die Methode ist für jede HTTP -Anforderung aufgerufen.
- Das
- Der Container kann sich irgendwann entscheiden, das Servlet aus seinem Speicher zu entladen.
- Die Algorithmen, mit denen diese Entscheidung getroffen wird, sind für jeden Container spezifisch.
- Der Container ruft das Servlet an
zerstören()
Methode zur Abgabe aller Ressourcen wie Dateihandles, die für den Servlet zugewiesen werden; Wichtige Daten können in einem persistenten Geschäft gespeichert werden. - Der für das Servlet und seine Objekte zugewiesene Speicher kann dann Müll gesammelt werden.
Beispiel
Das folgende Beispiel wird druckt, wie oft es sein Service()
Methode wurde genannt.
Beachten Sie, dass HttpServlet
ist eine Unterklasse von GenericServlet
eine Umsetzung der Servlet
Schnittstelle.
Das Service()
Methode von HttpServlet
Klassenversandanfragen an die Methoden bekommen()
, Dopost ()
, Doput ()
, dodelete ()
, usw; Nach der HTTP -Anfrage. Im folgenden Beispiel Service()
ist überschrieben und unterscheidet nicht, welche HTTP -Anforderungsmethode es dient.
importieren Java.io.ioException; importieren Jakarta.servlet.servletConfig; importieren jakarta.servlet.servletException; importieren jakarta.servlet.http.httpServlet; importieren jakarta.servlet.http.httpServletRequest; importieren jakarta.servlet.http.httpServletResponse; Öffentlichkeit Klasse ServletLifecycleExample erweitert HttpServlet { Privatgelände Ganze Zahl SharedCounter; @Override Öffentlichkeit Leere drin(Finale ServletConfig Konfiguration) Würfe ServletException { super.drin(Konfiguration); GetServletContext().Protokoll("init () genannt"); SharedCounter = 0; } @Override geschützt Leere Service(Finale HttpServletRequest Anfrage, Finale HttpServletResponse Antwort) Würfe ServletException, IoException { GetServletContext().Protokoll("service () genannt"); int Localcounter; synchronisiert (SharedCounter) { SharedCounter++; Localcounter = SharedCounter; } Antwort.GetWriter().schreiben("Inkrementierung der Anzahl zu" + Localcounter); // Zugriff auf eine lokale Variable } @Override Öffentlichkeit Leere zerstören() { GetServletContext().Protokoll("zerstören () genannt"); } }
Containerserver
Die Spezifikation für die Servlet -Technologie wurde in vielen Produkten implementiert. Sehen Sie sich eine Liste von Implementierungen an der Webcontainer Seite.
Es gibt auch andere Arten von Servlet -Behältern wie solche für SIP -Servlets, z. B., Segelfinale.
Verweise
- ^ "Servlet (Java (TM) EE 7 Spezifikation APIs)". Oracle.com. Abgerufen 2018-07-25.
- ^ a b "Servlet Essentials - Kapitel 1". novocode.com. Archiviert von das Original Am 2017-12-18.
- ^ "Jakarta Servlet 5.0 | Die Eclipse Foundation".
- ^ Freedman, Matt (26. Juni 1996). "Javaone Conference Report". JavaRld.
- ^ Diwanji, Pavani; Connelly, Dave; Wagle, Prasad (29. Mai 1996). "Java -Server und Servlets" (PDF). Server und Servererweiterungen. Javaone 1996. Archiviert (PDF) vom Original am 2000-08-16. Abgerufen 2020-02-01.
- ^ Chang, Phil Inje (1. Juli 1997). "Interview: Das Java Web Server -Team gibt Ihnen die Skinny". JavaRld. Abgerufen 2018-07-25.
- ^ Chang, Phil Inje (1. Juni 1997). "Java -Webserver geliefert!". JavaRld. Abgerufen 2018-07-25.
- ^ "Servlet History | Community.oracle.com". Weblogs.java.net. 2005-12-10. Abgerufen 2013-06-14.
- ^ a b Hunter, Jason (März 2000). "Servlet Timeline". Jenseits der Java Servlet -Programmierung. O'Reilly -Konferenz über Java. O'Reilly Media.
- ^ "Java Web Server". Javasoft. Sun Microsystems. Archiviert vom Original am 1998-01-11. Abgerufen 2020-02-01.
- ^ "Java Web Server (TM)". Sun Microsystems. Archiviert vom Original am 2002-02-06. Abgerufen 2020-02-01.
- ^ "Pavni Diwanji". Family Online Safety Institute. Abgerufen 12. November 2016.
- ^ US -Patent 5928323, Gosling, James A.; Diwanji, Pavni & Connelly, David W., "Apparat und Methode zum dynamischen Generieren von Informationen mit serverseitigen Softwareobjekten", veröffentlicht 1999-07-27, ausgestellt 1999-07-27, zugewiesene Sun Microsystems
- ^ "Was ist neu in Servlet 3.1? - Java ee 7 bewegt sich vorwärts (Arun Gupta, Meilen zu gehen ...)". Oracle.com. Abgerufen 22. November 2016.
- ^ Crawford, William; Hunter, Jason (November 1998). "Vorwort". Java Servlet -Programmierung (1. Aufl.). O'Reilly Media. p. ix - x. ISBN 978-1-56592-391-1.
Wir behandeln Version 2.0 der Servlet -API, die im Dezember 1997 im Rahmen des Java Web Server 1.1 eingeführt und durch die Veröffentlichung des Java Servlet Development Kit 2.0 im April 1998 geklärt wurde.