Was sind Java-Servlets? Anforderungsbearbeitung für Java-Webanwendungen

Die Bearbeitung von Anfragen ist das A und O der Entwicklung von Java-Webanwendungen. Um auf Anforderungen aus dem Netzwerk zu antworten, muss eine Java-Webanwendung zuerst bestimmen, welcher Code auf die Anforderungs-URL reagiert, und dann eine Antwort zusammenstellen. Jeder Technologie-Stack bietet eine Möglichkeit, die Anforderung-Antwort-Behandlung durchzuführen. In Java verwenden wir zu diesem Zweck Servlets (und die Java-Servlet-API). Stellen Sie sich ein Servlet als einen winzigen Server vor, dessen Aufgabe es ist, Anforderungen anzunehmen und Antworten auszugeben.

URL gegen Endpunkt

Als Internetbenutzer kennen Sie URLs als Website-Adresse in Ihrem Browser. Als Entwickler kennen Sie möglicherweise auch URLs als Endpunkte für Webdienste. Eine URL (Uniform Resource Locator) ist eine Standardmethode zum Beschreiben und Auffinden von Internetressourcen mithilfe von Text. Der Begriff Endpunkt bezieht sich auf eine URL, die einen Webdienst bezeichnet. Die Begriffe Endpunkt und URL werden häufig synonym verwendet, obwohl sie sich auf verschiedene Verwendungsdomänen beziehen.

Software als Ebenen

Wie ich in meiner Einführung in die Java-Laufzeitumgebung erklärt habe, können wir Software als eine Reihe von Ebenen anzeigen. Jede Schicht in einem Softwaresystem enthält bestimmte Funktionen, die von den darüber liegenden Schichten benötigt werden. Beispielsweise befindet sich die Hardwareschicht unterhalb der Firmware-Schicht und unterstützt deren Funktionalität. Ebenso wird die Firmware-Schicht (BIOS auf einem PC oder EFI auf einem Mac) benötigt, um das Betriebssystem auszuführen. Abbildung 1 zeigt diese drei Komponenten in einem Schichtdiagramm.

Matthew Tyson

Sie können ein Softwaresystem auch als eine Reihe von Containern betrachten , wobei die unteren Schichten als Container für die höheren fungieren. Jede Schicht dient als Kontext für die Ausführung der nächsten Funktionalitätsebene: Hardware enthält Firmware und Firmware enthält das Betriebssystem.

Serverseitiges Java

Eine serverseitige Java- Anwendung gehört zu einer breiten Klasse von Anwendungen, die als Netzwerkendpunkte dienen, HTTP-Anforderungen von einer bestimmten URL empfangen und Daten in einem Austauschformat wie HMTL oder JSON zurücksenden. Serverseitiges Java besteht sowohl aus standardisierten Java-Servern als auch aus Technologien für die Interaktion mit diesen Servern. Die Java-Servlet-API ist der Standard für die Interaktion mit einem Java-Server.

Java-Server und die JVM

In Java-basierten Systemen enthält das Betriebssystem die JVM, die eine konsistente Umgebung zum Ausführen von Java-Anwendungen bietet. Ein Java-Server befindet sich über der JVM. So wie die JVM der Vermittler zwischen dem Betriebssystem und Ihrer Java-Anwendung ist, bietet der Java-Server einen konsistenten, optimierten Zugriff auf die Netzwerk- und Verarbeitungsfunktionen des Betriebssystems. Auf dem Server wird eine Java-Anwendung ausgeführt, die über die Java-Servlet-API auf die Funktionen des Servers zugreift.

Abbildung 2 zeigt einen Software-Stack für serverseitiges Java.

Matthew Tyson

Die Java-Servlet-Spezifikation

Die Java-Servlet-Spezifikation enthält die zugrunde liegende Definition für einen Java-Server und verwandte Komponenten. Es definiert, wie der Server Anforderungen und Antworten während Netzwerkinteraktionen über HTTP sendet. Alle Java-Server müssen mit der Java-Servlet-Spezifikation kompatibel sein. Die meisten Java-Server sind heute mit Servlet 4.0 kompatibel.

Servlet 4.0

Jede Version der Java Servlet-Spezifikation bringt neue Funktionen. Servlet 4.0 unterstützt das HTTP / 2-Protokoll und seinen Server-Push-Mechanismus. Mit Server Push kann ein Server die für eine Webseite erforderlichen Assets vorladen, anstatt auf eine bestimmte Anforderung zu warten. Die Servlet 4.0-Spezifikation enthält auch die Möglichkeit, URL-Zuordnungen zur Laufzeit zu erkennen, eine Funktion, die als Laufzeiterkennung bezeichnet wird .

Eclipse Enterprise für Java

Servlet 4.0 ist Teil der Open-Source-Initiative EE4J (Eclipse Enterprise für Java), die einen vorgeschlagenen Ersatz für das JCP enthält.

Beachten Sie den Artikel, den Sie gerade lesen, um ein praktisches Verständnis der Funktionsweise der Servlet-Spezifikation zu erhalten. Irgendwo im Darm der JavaWorld-Infrastruktur wurde dieser Artikel formatiert und zur Veröffentlichung eingereicht. Es wurde eine URL zugewiesen, über das Netzwerk geleitet und erreichte einen Server. Der Server hat das Artefakt (Artikel) mit der URL verbunden und festgestellt, dass bei Eingang einer GET-Anforderung für diese URL dieser Artikel als HTML zurückgegeben wird.

Wenn Sie eine Java-Webanwendung erstellen, erstellen Sie Software, die auf dem Java-Server ausgeführt wird. Die Anwendung verwendet die vom Serverkontext bereitgestellten Funktionen. Eine dieser Funktionen ist die Servlet-API. Aus diesem Grund wird ein Java-Server, der die Servlet-Spezifikation implementiert, manchmal als Servlet-Container bezeichnet .

Um ein Servlet zu erstellen, implementieren Sie die ServletSchnittstelle und stellen sie in einem Servlet-Container bereit. Abbildung 3 zeigt, wie Ihre Anwendung auf dem Servlet basiert.

Matthew Tyson

Servlets mit Tomcat schreiben

Nachdem Sie einen konzeptionellen Überblick erhalten haben, können Sie nun ein Java-Servlet schreiben.

Als erstes benötigen Sie einen Servlet-Container, der auch als Java-Anwendungsserver bezeichnet wird. Tomcat und Jetty sind zwei der beliebtesten Servlet-Container. Wir werden Tomcat verwenden, da es einer der ältesten Anwendungsserver für Java ist. Tomcat ist kostenlos und enthält nur minimale Schnickschnack, was die Dinge für unser Beispiel einfach hält. ("Schnickschnack" ist übrigens ein Fachbegriff.)

Laden Sie Tomcat herunter und installieren Sie es

Wenn Sie Tomcat noch nicht haben, öffnen Sie zunächst die Tomcat-Downloadseite. Dort können Sie entweder das Windows-Installationsprogramm oder den am besten geeigneten ZIP-Download für Ihren Computer auswählen (z. B. lade ich die 64-Bit-Windows-Zip herunter).

Das war's: Sie haben gerade die Java-Serverschicht zu Ihrem Betriebssystem hinzugefügt!

Stellen Sie sicher, dass Tomcat ausgeführt wird

Bevor Sie fortfahren, stellen Sie sicher, dass Sie Tomcat ausführen können. Entweder starten Sie den Windows - Dienst oder ausführen startup.shoder startup.batDatei von der Befehlszeile.

Wenn Sie jetzt einen Webbrowser öffnen und zu gehen localhost:8080, sollte der folgende Bildschirm Sie begrüßen:

Matthew Tyson

Wenn beim Ausführen von Tomcat Probleme auftreten, können Sie die Tomcat-Dokumentation zur Fehlerbehebung aufrufen.

Führen Sie das Tomcat-Servlet-Beispiel aus

Schauen wir uns nun ein Java-Servlet an. Praktischerweise hat Tomcat einige einfache Beispiele beigefügt.

Klicken Sie auf den Link Beispiele , den Sie im Abschnitt Entwickler-Schnellstart auf der Tomcat-Begrüßungsseite sehen. Klicken Sie dort auf den Link Servlet-Beispiele .

Now you can see a simple Servlet in action by clicking the Hello World sample's Execute link. That will bring your browser to the //localhost:8080/examples/servlets/servlet/HelloWorldExample URL, where you will see the perennial programmer's salutation.

Viewing the servlet source code

Click the Back arrow in your browser, then click the source link for the HelloWorld app. The source is shown in Listing 1.

Listing 1. Source code for HelloWorld example

 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println("Hello World!"); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); } } 

This very simple code listing contains the basic components of a Java servlet. Let's consider it step by step.

The first line calls the standard Java imports. After that, the program defines a new class, which extends the HttpServlet class. This is critical because servlets must implement the Servlet interface in order to run inside a servlet container.

Next, the HelloWorld class defines a method called doGet(). This is a standard method on servlets: it tells the server to route HTTP GET requests to this method. Other HTTP methods, like POST, are handled by similarly named methods, like doPost.

Notice that that doGet() has two parameters: (HttpServletRequest request, HttpServletResponse response). These two objects represent the request and response. They provide access to everything your code needs to deal with the request and issue a response. In the HelloWorld.doGet servlet method, for example, the response object is used to inform the server what content type header to issue. In this case, it's response.setContentType("text/html");.

Finally, the program obtains a Java Writer object from the response response.getWriter(). The Writer is then used to create a simple HTML response to return to the browser.

URL mapping

The structure and code flow in Listing 1 are fairly intuitive, but there is a glaring omission. How does the server know to associate the //localhost:8080/examples/servlets/servlet/HelloWorldExample URL to the HelloWorld.doGet method?

You will find the answer to this mystery in the application meta-data. Every Java web application includes a standard meta-data file, called web.xml, which tells the server how to map URLs to servlets.

What is meta-data?

Meta-data is any information that is used to control the operation of software from outside the software itself.

In the Tomcat example apps, the web.xml is found at \apache-tomcat-9.0.11\webapps\examples\WEB-INF\web.xml. The \WEB-INF\web.xml is the standard location of the meta-data file for servlets. If you open this file, you'll see how the server is configured.

The abbreviated web.xml in Listing 2 has just the information we need for our discussion.

Listing 2. Source code for the Tomcat HelloWorld example

     HelloWorldExample HelloWorldExample   HelloWorldExample /servlets/servlet/HelloWorldExample    

Listing 2 shows a typical XML file header referencing the schema for a Java web application descriptor. This is followed by two entries: and.

The call to assigns a logical name, HelloWorldExample, to the HelloWorldExample class, via the and fields.

The call to assigns that logical name to the value, thereby associating the code to the URL.

Note that the field supports wild cards in order to handle a variety of flexible URL mappings.

Other servlet capabilities

Neben der URL-Zuordnung bieten Servlets zusätzliche Funktionen zum Filtern und Authentifizieren. Filter werden zum Verarbeiten von Anforderungen verwendet, und die Authentifizierung wird verwendet, um URL-Mustern einfache Benutzer und Rollen zuzuweisen. Die JavaServer Pages (JSP) -Spezifikation bietet Unterstützung für eine wesentlich leistungsfähigere Generierung von HTML.

Fazit

Dieser Artikel bietet eine konzeptionelle Übersicht über Java-Servlets, einschließlich der Verarbeitung von URL-Anforderungen und -Antworten innerhalb eines Java-Servers. Wenn Sie diese Grundelemente von serverseitigem Java kennen, können Sie erweiterte Konzepte wie Server-Push und Laufzeiterkennung von URL-Zuordnungen integrieren, die in Servlet 4.0 neu sind.

Diese Geschichte "Was sind Java-Servlets? Anforderungsbearbeitung für Java-Webanwendungen" wurde ursprünglich von JavaWorld veröffentlicht.