Servlet - Dies ist Java-nporpaMMa, das die Klasse als Oberklasse verwendet HttpServiet. Ein Servlet wird verwendet, um die Fähigkeiten eines vorhandenen Servers, insbesondere eines Webservers, zu erweitern. Typischerweise läuft ein Servlet auf einem speziellen Server. Solche Server werden Java Application Server genannt. Ein Java-Anwendungsserver umfasst als Baustein einen Webserver (manchmal nicht einen, sondern mehrere) sowie Server, die mit Serverkomponenten, Hilfsdienstservern usw. arbeiten. Ein Servlet arbeitet in der Umgebung, die ihm der Server zur Verfügung stellt. Der Teil des Servers, der für die Verarbeitung von Servlets konzipiert ist, wird als Servlet-Container bezeichnet. Die Servlet-Spezifikation setzt das Vorhandensein von Standardmethoden in der Servlet-Klasse voraus, deren Ausführung in der einen oder anderen Phase des Servlet-Lebenszyklus erfolgt. Diese Methoden werden vom Servlet-Container aufgerufen. Eine Implementierung der Servlet-Spezifikation ist in den Standard-Java-Sprachpaketen enthalten.
Dieses Buch behandelt einen Java-Anwendungsserver namens Blazix. Blazix Server bietet einen vollständigen Satz an Funktionen für die Arbeit mit Servlets. Zusätzlich zum Erstellen einer Servlet-Klasse (oder -Klassen) sowie zum Konfigurieren des erstellten Servlet-Programms und seiner Installation auf dem Server müssen Sie die Konfigurationsdatei des Webservers ändern. Grundwerte werden in der Konfigurationsdatei wie folgt angegeben: servlet.name: myservlet
servlet.myservlet.className: mypackage.MyServletClass servlet.myservlet.url: /mysrvlet
Jedem Servlet muss ein Name gegeben werden(servlet.name), durch den es auf dem Server identifiziert wird. Dieser Name wird verwendet, um die Eigenschaften des Servlets festzulegen, insbesondere um den Namen der Klasse anzugeben, in der das Servlet-Programm gespeichert ist (nächste Zeile), sowie die Adresse, unter der auf dieses Servlet zugegriffen wird (dritte Zeile).
Der Client fragt den Webserver nach der Adresse, an der sich das Servlet befindet (die Adresse muss als Wert von servlet.myservlet.url in der Konfigurationsdatei des Webservers angegeben werden). Der Server übergibt die Anfrage und die Daten (falls vorhanden) an das Servlet, empfängt die Antwort vom Servlet und leitet sie an den Client weiter.
Dies könnte das Ende der Erklärung dessen sein, was ein Servlet ist. Es gibt jedoch viele interessante und nützliche Details, auf die Sie achten und die Sie genauer studieren sollten.
Es ist besonders wichtig zu beachten, dass der Servlet-Klassenpfad in einer Variablen angegeben werden muss ciasspath oder es kann im Verzeichnis C:\Blazix\classes oder in dem Verzeichnis abgelegt werden, das in der Webserver-Konfigurationsdatei als server.ciassDir angegeben ist. Nachdem die Konfigurationsdatei so geändert wurde, dass sie Informationen über das neue Servlet enthält, muss der Server gestoppt und erneut gestartet werden. Das Servlet kann auch mithilfe des Verwaltungsdienstprogramms auf einem laufenden Server platziert werden. Dazu muss das Servlet jedoch in eine WAR-Datei für ein Webarchiv gepackt werden. Wenn die Servlet-Klassendatei geändert wurde, ist es nicht erforderlich, den Server zu stoppen und erneut zu starten. Standardmäßig ist der Server so konfiguriert, dass der Aufruf eines Servlets unter http://localhost:81/_reload dazu führt, dass alle Klassen neu geladen werden und die geänderte Servlet-Klasse für Client-Anfragen verfügbar ist (Abbildung 4.1). Besuchen Sie diese Seite, nachdem die Servlet-Klassendatei geändert wurde. Ein Stoppen des Servers ist einfach nicht notwendig.
Wenn der Leser Erfahrung mit Servlets hat, wird er die Einfachheit des Blazix-Servers im Vergleich zu anderen Java-Servern wie Tomcat zu schätzen wissen.
Um gleich loszulegen, schauen wir uns ein einfaches Beispiel an, ein Servlet etwas-Servlet (Listing 4.1).
Auflistung 4.1. Servlet SomeServlet.java I
java.io.* importieren; import javax.servlet.*; import javax.servlet.http.*;
öffentliche Klasse SomeServlet erweitert HttpServlet ( public void doGet(HttpServletRequest request,
HttpServletResponse (Antwort) löst ServletException, IOException ( Printwriter out = Response.getWriter(); out.println("Hello World");
Schreiben Sie in die Konfigurationsdatei des Webservers Folgendes:
servlet.name: zuerst
servlet.first.className: SomeServlet
servlet.first.url: /dofirst
Dann sieht der Zugriff auf das Servlet über den Browser so aus http://localhost:81 /dofirst (Abbildung 4.2).
Java-Servlets bieten eine plattformunabhängige Methode zum Erstellen von Webanwendungen (dies ist nicht unumstritten, wir werden jedoch nicht weiter auf dieses Thema eingehen, da wir dann entscheiden müssen, was wir unter einer Webanwendung verstehen, die nicht in der Liste enthalten ist). der behandelten Themen) und viele Anwendungen. Sie sind schnell in Betrieb und frei von den Einschränkungen, die CGI-Anwendungen haben. Ein Servlet wird von einem Webserver gesteuert und benötigt im Gegensatz zu einem Applet keine grafische Benutzeroberfläche. Das Servlet interagiert mit dem Server, indem es Anfragen und Antworten mit ihm austauscht. Das Client-Programm stellt Anfragen an den Server. Die Anfrage wird vom Server verarbeitet, an das Servlet weitergeleitet und das Servlet sendet eine Antwort über den Server an den Client. Heutzutage erfreuen sich Servlets großer Beliebtheit bei der Erstellung interaktiver Webanwendungen. Es gibt viele Webserver, die Servlets verarbeiten können, darunter Tomcat und iPlanet Web Server (ehemals Netscape).
Enterprise Server), Blazix. J Builder Enterprise nutzt den mitgelieferten Borland Enterprise Server (BES) und unterstützt auch Webserver Logik, WebSphere und iPlanet. J Builder Enterprise Server enthält einen Standard-Tomcat-Server.
Reis. 4.2. Aufruf eines Servlets
Ein wichtiger Vorteil von Servlets ist ihre Geschwindigkeit. Im Gegensatz zu CGI-Anwendungen werden Servlets nur einmal in den Speicher geladen und dann direkt aus dem Speicher ausgeführt. Servlets sind im Wesentlichen Multithread-Anwendungen. Darüber hinaus sind sie plattformunabhängig, da sie in Java geschrieben sind.
JSP-Technologie, die gewidmet ist Kapitel 3 ist eine Erweiterung der Servlet-Technologie auf JSP Besondere Aufmerksamkeit Der Schwerpunkt liegt auf der Arbeit mit HTML- und XML-Dokumenten. JSP-Fragmente finden ihre häufigste Verwendung als Teil von HTML- und XML-Code. Wie trifft man eine Auswahl und entscheidet, ob man Servlets oder Serverseiten verwendet? Servlets eignen sich eher zur Lösung von Programmierproblemen auf niedriger Ebene und weniger zur Lösung von Problemen bei der Erstellung von Anwendungspräsentationslogik. Bei JSP-Serverseiten geht es dagegen hauptsächlich darum, wie das Ergebnis dem Benutzer auf die bequemste Art und Weise präsentiert werden kann. Serverseitige Seiten werden im HTML-Dokumenterstellungsstil eingebettet in HTML-Code erstellt. Die JSP-Technologie bietet viel umfangreichere Funktionen als einfaches HTML. JSP-Seiten können die Möglichkeit bieten, Anwendungslogik mithilfe einfacher Java-Komponenten sowie EJB-Serverkomponenten zu implementieren, indem benutzerdefinierte Verknüpfungsbibliotheken erstellt werden. Java-Serverseiten selbst können modulare, wiederverwendbare Präsentationslogikkomponenten sein, die in Verbindung mit verschiedenen Vorlagen und Filtern verwendet werden können. JSP-Seiten werden in Servlets konvertiert, sodass Sie theoretisch ausschließlich Servlets verwenden können. Die JSP-Technologie wurde jedoch entwickelt, um den Prozess der Erstellung von Webdokumenten zu vereinfachen, indem die Anwendungspräsentationslogik vom Dokumentinhalt getrennt wird. In den meisten Fällen besteht die an den Kunden gesendete Antwort sowohl aus Dokumentpräsentationsvorlagen als auch aus Daten, die durch das Ausfüllen der Vorlage automatisch generiert werden. In solchen Situationen erweist sich die Arbeit mit JSP als viel einfacher als mit Servlets.
Eines der besten Dinge an Java ist seine Vielseitigkeit. Natürlich ist die Erstellung traditioneller Desktops und sogar möglich mobile Anwendungen- es ist toll. Aber was ist, wenn Sie ausgetretene Pfade verlassen und das Gebiet der Webanwendungsentwicklung in Java betreten möchten? Es gibt eines für Sie gute Nachrichten: Die Sprache verfügt über eine vollwertige Servlet-API, mit der Sie ohne großen Aufwand zuverlässige Webanwendungen erstellen können.
Erstellen von Java-Anwendungen mit Servlets
Wir haben also bereits die Anwendungskonfigurationsdateien erstellt. In seinem aktuellen Zustand tut es jedoch buchstäblich nichts. Wir möchten, dass sich Kunden über ein HTML-Formular registrieren können. Als Nächstes müssen wir daher JSP-Dateien erstellen, die das obige Formular und die Kundendaten anzeigen, sobald die Registrierung erfolgreich abgeschlossen wurde. Das werden wir jetzt tun.
Wir arbeiten am Erscheinungsbild
Das Erscheinungsbild der Anwendung wird durch zwei JSP-Dateien definiert – im MVC-Kontext werden diese Ansichten genannt. Der erste ist für die Anzeige des Anmeldeformulars und verantwortlich mögliche Fehler, aufgerufen nach Überprüfung der eingegebenen Daten. Die zweite Seite wird eine reguläre Willkommensseite sein, auf der die vom Kunden eingegebenen Daten angezeigt werden, sobald der Registrierungsprozess erfolgreich abgeschlossen wurde.
Hier ist die erste JSP-Datei:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Anmeldung
$(Verstoß).
Die Datei enthält einfaches HTML mit einigen Ergänzungen. Das ist das Schöne an JSP in Kombination mit JSTL und JEL. Beachten Sie, wie einfach es ist, mithilfe von Standard-Tags wie „Validierungsfehler“ zu überprüfen<с:if>Und
Das Aktionsattribut des Registrierungsformulars verweist auf die folgende URL: $(pageContext.request.contextPath)/processcustomer . Dies bedeutet, dass jedes Mal, wenn ein Kunde versucht, sich zu registrieren, Daten an den Prozesskunden gesendet werden, unabhängig von der URL, über die auf das Formular zugegriffen wird. Dies wird durch die Funktionalität von Objekten erreicht, auf die über die JSP-Datei zugegriffen werden kann, beispielsweise request .
Wir werden bald sehen, wie das Servlet an die URL „processcustomer“ bindet und wie es mit der Eingabe interagiert. Schauen wir uns zunächst die JSP-Datei an, die für die Begrüßungsseite verantwortlich ist:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Danke für die Registrierung!
Ihre eingegebenen Daten:
Name:$(Vorname)
Nachname:$(Nachname)
Email:$(E-Mail)
Nachdem wir nun das Rendern der Seite verstanden haben, besteht der nächste Schritt darin, ein Servlet zu erstellen, das für das Sammeln von Client-Daten aus POST-Anfragen und das Validieren der Daten auf einfache Weise verantwortlich ist.
Einen Controller schreiben
Das Schreiben eines Servlets, das Daten aus einem Registrierungsformular abrufen kann, könnte nicht einfacher sein. Alles, was wir tun müssen, ist, eine Unterklasse der HttpServlet-Klasse zu schreiben und ihre Methoden doGet() oder doPost() (oder beide, falls erforderlich) zu implementieren. In diesem Fall interagiert das Servlet mit Daten, die von POST-Anfragen stammen.
So sieht es aus:
@WebServlet(name = "CustomerController", urlPatterns = "/processcustomer") öffentliche Klasse CustomerController erweitert HttpServlet ( @Override protected void doPost(HttpServletRequest request, HttpServletResponse Response) löst ServletException, IOException ( RequestCustomer customer = RequestCustomer.fromRequestParameters(request); customer aus .setAsRequestAttributes(request); Verstöße auflisten = customer.validate(); if (!violations.isEmpty()) ( request.setAttribute("violations", Violations); ) String url = discoverUrl(violations); request.getRequestDispatcher(url ).forward(request, Response); ) private String discoverUrl(List crimes) ( if (!violations.isEmpty()) ( return "/"; ) else ( return "/WEB-INF/views/customerinfo.jsp"; ) ) private statische Klasse RequestCustomer ( private final String firstName; private final String lastName; private final String email; private RequestCustomer(String firstName, String lastName, String email) ( this.firstName = firstName; this.lastName = lastName; this.email = E-Mail; ) public static RequestCustomer fromRequestParameters(HttpServletRequest request) ( return new RequestCustomer(request.getParameter("firstname"), request.getParameter("lastname"), request.getParameter("email")); ) public void setAsRequestAttributes(HttpServletRequest request) ( request.setAttribute("Vorname", Vorname); request.setAttribute("Nachname", Nachname); request.setAttribute("E-Mail", E-Mail); ) public List validieren() ( Listenverletzungen = neue ArrayList<>(); if (!StringValidator.validate(firstName)) ( Violations.add("Vorname ist ein Pflichtfeld"); ) if (!StringValidator.validate(lastName)) ( Violations.add("Nachname ist ein Pflichtfeld") ; ) if ( !EmailValidator.validate(email)) ( Violations.add("E-Mail muss wohlgeformt sein"); ) return Violences; ) ) )
Das erste, was hier zu beachten ist, ist die Verwendung der Annotation @WebServlet(name ="CustomerController", urlPatterns = "/processcustomer"). Es weist den Servlet-Container an, die CustomerController-Klasse zu verwenden, um HTTP-Anfragen an /processcustomer zu verarbeiten. Der gleiche Effekt kann durch das Hinzufügen von Servlet-Mapping-Direktiven zu web.xml wie folgt erzielt werden. Da wir jedoch die Servlet-Spezifikation 3.1 verwenden, ist dies nicht erforderlich.
Hier haben wir das Servlet „CustomerController“ genannt, weil es als bewährte Praxis gilt, den Namen der Servlet-Klasse als Wert des Namensattributs der Annotation „@WebServlet“ zu verwenden. Andernfalls können einige Container nicht übereinstimmen, was zu einem 404-Fehler führt.
Die CustomerController-Klasse selbst erledigt ein paar einfache Dinge. Zunächst sammelt es Formulareingaben mithilfe einer Implementierung der HttpServletRequest-Schnittstelle, die Werte enthält, die den Feldern „Vorname“, „Nachname“ und „E-Mail“ des Formulars entsprechen. Anschließend werden diese Werte als Abfrageattribute festgelegt, sodass sie entweder im Formular oder auf der Ergebnisseite erneut angezeigt werden können. Abschließend überprüfen Validatoren die Richtigkeit der eingegebenen Daten.
Validatoren sind einfache Klassen, die bestimmte Eigenschaften überprüfen, beispielsweise ob eine Zeichenfolge leer ist oder ob eine E-Mail wie eine E-Mail aussieht. Sie können sich ihre Implementierung im GitLab des Autors ansehen.
Das Validierungsergebnis beeinflusst den weiteren Ablauf: Sind die Daten ungültig, wird der Client über das RequestDispatcher-Objekt auf die Registrierungsseite weitergeleitet, wo die entsprechenden Fehler angezeigt werden. Wenn alles in Ordnung ist, wird die Willkommensseite angezeigt.
Deshalb haben wir eine komplette Webanwendung in Java erstellt, die es Ihnen ermöglicht, Clients mithilfe eines HTML-Formulars, eines einfachen Servlets und einiger JSP-Dateien zu registrieren. Es ist Zeit, es zu starten.
Anwendung starten
Um die Anwendung zu starten, müssen Sie die folgenden Schritte ausführen:
IntelliJ-IDEE). Wenn Sie das Projekt bereitstellen und ausführen, sollte der Standardbrowser mit einem Registrierungsfenster starten.
Abschluss
Sie haben sich also alle nötigen Fähigkeiten angeeignet, um Ihre eigene Webanwendung in Java zu erstellen, ohne auf komplexe Frameworks zurückgreifen zu müssen. Sie benötigen lediglich eine Servlet-API, Technologien wie JSP zum Rendern und native Java-Tools. Großartig, oder?
Es ist erwähnenswert, dass die Implementierung der CustomerController-Klasse die Stärken und Schwächen von Servlets hervorhebt: Einerseits wird kurz gezeigt, wie einfach es ist, Anforderungsparameter zu verarbeiten und Antworten an den Client zu senden verschiedene Formate. Diese Funktionalität hat jedoch ihren Preis: Beide Implementierungen der Schnittstellen HttpServletResponse und HttpServletResponse sind reguläre Service-Locators. Das soll nicht heißen, dass dies eine schlechte Sache ist, da Locators lediglich Daten enthalten. Sie müssen jedoch bedenken, dass diese Implementierungen immer an das Servlet gebunden sind.
Servlet ist ein Java-Programm, das auf der Serverseite einer Webanwendung ausgeführt wird. Genauso wie sich Applets dynamisch erweitern Funktionalität Webbrowser-Servlets erweitern dynamisch die Funktionalität des Webservers.
Arbeit Servlet„und kann wie folgt beschrieben werden: Wenn eine Anfrage von einem Client eintrifft, kann der Webserver mithilfe einer speziellen Konfigurationsdatei bestimmen, welches Servlet ausgeführt werden muss. Danach startet der Webserver die JVM, die wiederum das ausführt Servlet. Das Servlet verarbeitet die Anfrage und überträgt den Inhalt an das Web – an den Server (möglicherweise in Form einer HTML-Seite). Der Webserver sendet eine Antwort an den Client (eine vom Servlet generierte HTML-Seite).
Ein WEB-Server ist im Wesentlichen eine Art Container, der lädt Servlet"s, führt sie aus und sendet es, nachdem sie das Ergebnis von ihnen erhalten haben, an den Client.
Servlet in der Webanwendungsarchitektur
Aufgrund seiner Kraft und Flexibilität Servlet„s können eine wichtige Rolle in der Systemarchitektur spielen. Sie können für die Middleware vorgesehene Anwendungsaufgaben ausführen, als Proxy für den Client fungieren und sogar die Funktionalität der Middleware erweitern, indem sie Unterstützung für neue Protokolle und andere Funktionen hinzufügen. Die Middleware fungiert als Anwendungsserver in einem sogenannten dreistufigen Client-Server-System und sitzt zwischen einem leichtgewichtigen Client, beispielsweise einem Webbrowser, und der Datenquelle.
Servlet als Proxyserver
Um Applets zu unterstützen, können Servlets als deren Proxys fungieren. Dies kann wichtig sein, da die Java-Sicherheit Applets nur erlaubt, eine Verbindung zu dem Server herzustellen, von dem sie heruntergeladen wurden. Wenn das Applet eine Verbindung zu einem Datenbankserver auf einem anderen Computer herstellen muss, Servlet kann diese Verbindung für das Applet erstellen.
Temporär und dauerhaft Servlet"S
Servlets können für jede Client-Anfrage gestartet und gestoppt werden. Sie können auch beim Starten des Webservers gestartet werden und bis zum Stoppen bestehen bleiben. Vorübergehend Servlet„s werden bei Bedarf geladen und bieten eine gute Möglichkeit, Serverressourcen für selten verwendete Funktionen zu sparen. Persistente Servlets werden geladen, wenn der Webserver startet, und bleiben bestehen, bis er gestoppt wird. Servlets werden als persistente Erweiterungen des Servers installiert, wenn die Betriebskosten steigen Sie sind sehr hoch (z. B. beim Aufbau einer Datenbankverbindung), wenn sie dauerhafte serverseitige Funktionalität bieten (z. B. der RMI-Dienst) oder in Fällen, in denen sie so schnell wie möglich auf Client-Anfragen reagieren müssen. Es ist kein spezifischer Code zuzuweisen Servlet"und permanent oder temporär; dies ist eine Funktion der Einrichtung des Webservers.
Servlet-Lebenszyklus, javax.servlet.Servlet
Servlets werden auf der Webserverplattform als Teil desselben Prozesses wie der Webserver selbst ausgeführt. Der Webserver ist für die Initialisierung, den Aufruf und die Zerstörung jeder Servlet-Instanz verantwortlich. Der Webserver interagiert mit dem Servlet über eine einfache Schnittstelle: javax.servlet.Servlet.
Die javax.servlet.Servlet-Schnittstelle umfasst drei Hauptmethoden:
- drin()
- Service()
- zerstören()
und zwei Hilfsmethoden:
- getServletConfig()
- getServletInfo()
Ähnlichkeiten zwischen Schnittstellen Servlet„und das Java-Applet sind offensichtlich. Genau so wurde es entworfen! Java-Servlets sind für Webserver das, was Applets für Webbrowser sind. Das Applet wird im Webbrowser ausgeführt und führt über eine spezielle Schnittstelle Aktionen auf seine Anfrage aus. Das Servlet erledigt dies Das Gleiche gilt für die Arbeit auf einem Webserver.
Servlet-Initialisierung, init()-Methode
Beim ersten Laden des Servlets wird die Methode init() aufgerufen. Dadurch kann das Servlet alle Einrichtungsarbeiten durchführen, beispielsweise Dateien öffnen oder Verbindungen zu ihren Servern herstellen. Wenn das Servlet dauerhaft auf dem Server installiert ist, wird es beim Start des Servers geladen. Andernfalls aktiviert der Server das Servlet, wenn er die erste Anfrage von einem Client erhält, den von diesem Servlet bereitgestellten Dienst auszuführen.
Es ist garantiert, dass die Methode drin() wird vor jedem anderen Aufruf des Servlets beendet, beispielsweise einem Methodenaufruf Service(). beachten Sie, dass drin() wird nur einmal aufgerufen; Es wird erst aufgerufen, wenn das Servlet entladen und dann erneut vom Server geladen wird.
Methode drin() akzeptiert ein Argument – eine Referenz auf ein Objekt ServletConfig, das die Argumente zum Initialisieren des Servlets enthält. Dieses Objekt verfügt über eine Methode getServletContext() ein Objekt zurückgeben ServletContext, das Informationen über die Umgebung des Servlets enthält.
Servlet-Kern, service()-Methode
Methode Service() ist das Herzstück des Servlets. Jede Anfrage vom Client führt zu einem Methodenaufruf Service(). Diese Methode liest die Anfrage und generiert eine Antwortnachricht mit ihren beiden Argumenten ServletRequest und ServletResponse:
Es gibt also zwei Möglichkeiten, Informationen vom Client an das Servlet zu übergeben. Die erste besteht darin, Werte in Anforderungsparametern zu übergeben. Parameterwerte können in die URL eingefügt werden. Die zweite Möglichkeit, Informationen von einem Client an ein Servlet zu übergeben, ist über einen InputStream (oder Reader).
Wie die Methode funktioniert Service() ist im Wesentlichen einfach: Es erstellt eine Antwort für jede Client-Anfrage, die vom Server an ihn weitergeleitet wird. Beachten Sie jedoch, dass möglicherweise mehrere parallele Anfragen gleichzeitig bearbeitet werden. Wenn die Methode Service() Wenn externe Ressourcen wie Dateien oder Datenbanken erforderlich sind, muss sichergestellt werden, dass der Zugriff auf Ressourcen threadsicher ist.
Entladen eines Servlets, destroy()-Methode
Methode zerstören() aufgerufen, um alle Ressourcen freizugeben (z. B. Dateien öffnen und Datenbankverbindungen), bevor Sie das Servlet entladen. Diese Methode kann leer sein, wenn keine Endbearbeitungsvorgänge durchgeführt werden müssen. Vor dem Aufruf der Methode zerstören() Der Server wartet entweder auf den Abschluss aller Wartungsvorgänge oder auf den Ablauf einer bestimmten Zeitspanne. Dies bedeutet, dass die Methode zerstören() kann während der Ausführung einer lang laufenden Methode aufgerufen werden Service().
Es ist wichtig, die Methode zu formalisieren zerstören() und zwar so, dass die notwendigen Ressourcen nicht geschlossen werden, bis alle Anrufe abgeschlossen sind Service() wird nicht abgeschlossen.
Servlet-Konfiguration, Methode getServletConfig()
Methode getServletConfig() gibt einen Verweis auf ein Objekt zurück, das die Schnittstelle implementiert ServletConfig. Dieses Objekt bietet Zugriff auf Informationen über die Servlet-Konfiguration, d. h. Zugriff auf Servlet-Initialisierungsparameter und Servlet-Kontextobjekt ServletContext, was den Zugriff auf das Servlet und seine Umgebung ermöglicht.
Servlet-Informationen, getServletInfo()-Methode
Methode getServletInfo() Wird vom Programmierer definiert, der das Servlet erstellt, um eine Zeichenfolge zurückzugeben, die Informationen über das Servlet enthält, z. B. den Autor und die Version des Servlets.
ServletRequest-Schnittstelle
ServletRequest stellt dem Servlet Client-Informationen über die HTTP-Anforderungsparameter zur Verfügung, d. h. Stellt Daten bereit, einschließlich Parameternamen und -werten, Attributen und Eingabestream. Diese Informationen werden an die Methode übergeben Service().
Nächste Servlet-Beispiel zeigt, wie man Informationen aus einem Parameter erhält Anfrage Methode Service():
Buffered Reader-Leser; String param1; String param2; öffentlicher Void-Dienst (ServletRequest-Anfrage, ServletResponse-Antwort) ( Reader = request.getReader(); param1 = request.getParameter("First"); param2 = request.getParameter("Second"); )
Zusätzliche Informationen über die Anfrage stehen dem Servlet über Methoden zur Verfügung, von denen die wichtigsten in der folgenden Tabelle aufgeführt sind:
getAttribute() | Gibt den Wert des angegebenen Attributs dieser Anfrage zurück. |
getContentLength() | Anfragegröße, falls bekannt. |
getContentType() | Gibt den MIME-Typ des Anforderungstexts zurück. |
getInputStream() | Gibt einen InputStream zum Lesen von Binärdaten aus dem Anforderungshauptteil zurück. |
GetParameterNames() | Gibt ein Array von Zeichenfolgen mit den Namen aller Parameter zurück. |
getParameterValues() | Gibt ein Array von Werten für den angegebenen Parameter zurück. |
getProtocol() | Gibt das Protokoll und die Version für die Anfrage als Zeichenfolge des Formulars zurück |
getReader() | Gibt einen BufferedReader zurück, um Text aus dem Anforderungstext abzurufen. |
getRealPath() | Gibt den realen Pfad für den angegebenen virtuellen Pfad zurück. |
getRemoteAddr() | IP-Adresse des Clients, der diese Anfrage gesendet hat. |
getRemoteHost() | Der Hostname des Clientcomputers, der diese Anfrage gesendet hat. |
getScheme() | Gibt das in der URL dieser Anfrage verwendete Schema zurück (z. B. https, http, ftp usw.). |
getServerName() | Der Hostname des Servers, der diese Anfrage angenommen hat. |
getServerPort() | Gibt die Portnummer zurück, die zum Empfangen dieser Anfrage verwendet wird. |
ServletResponse-Schnittstelle
Schnittstelle ServletResponse ist ein Tool zum Senden von Daten an den Client. Alle Methoden dieses Tools werden gezielt zur Lösung dieses Problems eingesetzt:
Public java.lang.String getCharacterEncoding() public void setLocale(java.util.Locale loc) public java.util.Locale getLocale()
Die erste Methode gibt den MIME-Kodierungstyp (z. B. UTF8) zurück, in dem die Informationen angezeigt werden. Die zweiten beiden Methoden funktionieren auch mit Zeichensätzen. Sie geben die im Dokument verwendete Sprache an (z. B. Russisch).
Der öffentliche ServletOutputStream getOutputStream() löst eine java.io.IOException aus
Die getOutputStream-Methode gibt den Ausgabestream für das Servlet zurück. Dieser Stream wird beispielsweise zur Ausgabe von Binärdateien verwendet. Textdaten können mit java.io.Writer ausgegeben werden:
Der öffentliche java.io.PrintWriter getWriter() löst eine java.io.IOException aus
Die Methode getWriter() konvertiert Zeichenfolgen automatisch in den in den Methoden getCharacterEncoding() und getLocale() angegebenen Zeichensatz.
Public void setContentLength(int len)
Die setContentLength-Methode legt den Wert des HTTP-Header-Felds „Content-Length“ fest.
Public void setContentType(String-Typ)
Die setContentType-Methode wird verwendet, um den MIME-Inhaltstyp des Dokuments zu senden. HTTP-Header-Feld „Content-Type“.
Der Ausgabedatenstrom wird gepuffert. Dies bedeutet, dass ein Datenelement erst dann an den Client ausgegeben wird, wenn der Puffer voll ist.
Public void setBufferSize(int size) public int getBufferSize() public voidlushBuffer() löst java.io.IOException aus public void resetBuffer()
Mit den oben genannten 4 Methoden können Sie jeweils die Größe des Sendepuffers festlegen, seine Größe ermitteln, das Senden des Inhalts des Puffers an den Client initialisieren, ohne darauf zu warten, dass er gefüllt wird, und außerdem diesen Puffer von Daten löschen.
Öffentlicher boolescher Wert isCommitted()
Mit der Methode isCommitted können Sie ein Flag erhalten, das angibt, ob das Senden von Daten an den Client bereits begonnen hat. Das Flag ist positiv, wenn der HTTP-Antwortheader bereits gesendet wurde.
Öffentliche Leere zurücksetzen()
Wenn der HTTP-Header noch nicht gesendet wurde, „setzt“ die Reset-Methode den HTTP-Header auf seine Standardwerte zurück.
JFreeChart-Diagramme in Servlets
Die JFreeChart-Grafikbibliothek kann in Servlets verwendet werden, um Diagramme zu erstellen und diese als Bilder auf Website-Seiten anzuzeigen. Es werden Einzelheiten zur Beschreibung und Beispiele für die Verwendung von JFreeChart in Servlets vorgestellt.
Servlet mit Grafikbibliothek Chart.js
JNI im Servlet
In manchen Fällen kann es notwendig sein, JNI in einer WEB-Anwendung zu verwenden. Es wird ein Beispiel für die Verwendung von JNI in Servlets vorgestellt.
JMS-Nachrichten in einem Servlet
Servlet kann zur Kommunikation verwendet werden JMS Nachrichten zwischen Anwendungen. Es wird ein Beispiel für die Verwendung eines Servlets zum Senden und Lesen von JMS-Nachrichten in einem JBoss-Container vorgestellt.
Java Servlet ist ein serverseitiges Programm, das in der gleichnamigen Programmiersprache geschrieben ist und Signale vom Client empfängt und Antworten an diesen zurücksendet. Es ist das Schlüsselelement, das neben JSP, EJB, XML und anderen verwandten Technologien das typische Java EE bildet. Die Anwendung kann gepackt werden WAR-Datei(Web AR Chive) zur Bereitstellung auf einem Webserver. Ein Server, der ein Java-Servlet ausführen kann, wird als Container bezeichnet. Ein Programm, das auf einem solchen Server läuft, kann dynamische Webseiten erstellen.
Java-Servlet: Grundlagen
Die beliebtesten und am weitesten verbreiteten Container sind Tomcat und JBoss. Technisch gesehen ist ein Servlet eine normale Java-Klasse, die eine Erweiterung für das Common Client-Server Protocol oder HTTP hat. In der Praxis wird es verwendet, um Anforderungen über die HttpServlet-GET- bzw. POST-Überschreibungen zu verarbeiten. Der Java-Servlet-Container stellt Http.ServletRequest und Http.ServletResponse bereit, bei denen es sich um Anforderungs-Antwort-Objekte handelt. Und wird normalerweise in Kombination mit JSP verwendet, um dynamische Inhalte zu generieren.
Typisches Modellszenario:
Java-Servlet-Filter sind Java-Plug-in-Komponenten, die zum Abfangen und Verarbeiten von Anforderungen verwendet werden, bevor sie an Servlets gesendet werden und nach Abschluss des Codes und bevor der Container die Antwort an den Client sendet, antworten.
Häufige Aufgaben, die mit Filtern ausgeführt werden:
Filter werden in einer Bereitstellungsdeskriptordatei (web.xml) aktiviert und konfiguriert. Servlets und Filter wissen nichts voneinander, daher können Sie einen Filter einfach durch Bearbeiten der web.xml hinzufügen oder entfernen. Es ist möglich, mehrere Filter für eine Ressource zu haben oder eine Filterkette für web.xml zu erstellen oder Java-Servlet-Filter auszuführen, die die javax.servlet.Filter-Schnittstelle implementieren.
Parallele Anfragen an den Server werden von Threads verarbeitet, was wichtige Eigenschaften des Webs bietet – Multithreading und Parallelität.
Hauptfunktionen:
Die Notwendigkeit, dynamische Webseiten zu verwenden
Es gibt viele Gründe, warum ein Unternehmen spontan dynamische Webseiten erstellen möchte, beispielsweise wenn sich die Daten auf der Website häufig ändern. Nachrichten- und Wetterseiten verlassen sich in der Regel auf CGI, um Inhalte auf dem neuesten Stand zu halten, ohne dass die Entwickler ständig darauf achten müssen. E-Commerce-Webseiten, die aktuelle Preise und Lagerbestände auflisten, verwenden CGI, um diese Inhalte bei Bedarf abzurufen und sie aus der internen Infrastruktur des Unternehmens zu beziehen.
Viele Benutzer haben Erfahrung mit der Java-Technologie zum Erstellen von CGI-basierten Webdiensten, aber Java-Servlets sind effizienter, leistungsfähiger, benutzerfreundlicher und kostengünstiger als herkömmliche CGI-Alternativen.
Vorteile von Java-Servlets:
Seit dem Aufkommen der Programmiersprache Java sind fast zwanzig Jahre vergangen. Es wurde vorhergesagt, dass Java in dieser Zeit sterben und in Vergessenheit geraten würde; Programmierer lachten über seine Trägheit und Gier nach Ressourcen. Aber es gab auch diejenigen, die an Java glaubten, sie entwickelten alle möglichen Bibliotheken, entwickelten die Community, bewiesen beharrlich, dass es für Java keine Grenzen gibt: Echtzeit, eingebettet, KI – alles ist möglich. Wir haben uns entschieden, nicht beiseite zu bleiben und in diesem Abschnitt eine kleine Artikelserie über Java zu verfassen. Gehen!
Ihre Teekanne wählt Java
Laut Oracle selbst ist heute das Virtuelle Java-Maschine auf mehr als drei Milliarden Geräten installiert. Und das sind nicht nur Computer und Smartphones, sondern auch Kameras, Fernseher, Blue-ray-Player, Drucker, SIM-Karten, Geldautomaten und sogar Autos. Diese Liste wird stetig wachsen und mit ihr auch die Angebote von Arbeitgebern für Java-Programmierer. Schon jetzt übersteigt die Zahl der offenen Stellen für Java-Programmierer den Rest. Und Unternehmen sind bereit, immer mehr zu zahlen, Mitarbeiter anzulocken und günstigere Arbeitsbedingungen zu organisieren.
Was ist gut an ihr?
Java-Programmierer werden vom Minimalismus seiner Syntax angezogen. Keine unnötigen Modifikatoren oder Funktionswörter. Auch der Verzicht auf Mehrfachvererbung, der C++-Programmierer zunächst etwas verwirrte, erweist sich letztlich als sinnvoll und gerechtfertigt. Einfache Logik, automatische Arbeit mit dem Speicher, ausführliche Dokumentation, Foren mit Antworten auf alle möglichen Fragen, Open Source – all das ermöglicht ein schnelles Verständnis des Entwicklungsprozesses und reduziert die Anzahl potenzieller Fehler deutlich. Sogar indische Bauern beherrschen Java in ein paar Monaten, zumindest steht das in ihren Diplomen :). Darüber hinaus ist Java eine interpretierte Sprache. Der Compiler wandelt den Quellcode in sogenannten Bytecode um, der sich leicht zurückkonvertieren lässt, was Java besonders für Reverse Engineering attraktiv macht.
Nun, fangen wir an
Java ist eine objektorientierte Sprache, was bedeutet, dass alle Variablen, Methoden und Konstanten innerhalb einer Klasse deklariert werden. Neben Klassen gibt es auch Schnittstellen – ein spezielles abstraktes Konstrukt, mit dem Sie das Verhalten eines Objekts beschreiben können, ohne eine bestimmte Implementierung anzugeben. Und wenn es in Java keine Mehrfachvererbung von Klassen gibt, kann eine Klasse eine beliebige Anzahl von Schnittstellen implementieren, wodurch ein Objekt viele Funktionen haben, aber nur einige davon bereitstellen kann.
Datentypen können in zwei Gruppen unterteilt werden: einfache (int, long, char usw.) und Objekttypen: Klassen, Schnittstellen, Arrays. Einfache Typen haben immer und überall eine feste Dimension. Beispielsweise belegt int auf jeder Architektur und jedem Gerät vier Byte Speicher. Dies ist für Berechnungen sehr praktisch. Das Datenarray enthält ein spezielles Längenattribut, das die Größe des Arrays speichert, wofür den Entwicklern ein besonderer Dank gilt. Verschiedene Datentypen werden unterschiedlich an Methoden übergeben. Einfache Typen werden immer als Wert übergeben. Objekt – immer als Referenz, um Speicherplatz zu sparen. Das heißt, wenn wir int a = 10 übergeben und seinen Wert in der aufgerufenen Methode auf 5 ändern, dann ist a in der ursprünglichen Methode immer noch 10. Wenn wir jedoch eine Eigenschaft des Objekts ändern, ändert sich dies auch in der ursprünglichen Methode .
Erinnere dich an die Erinnerung
Obwohl der Java-Programmierer von der Notwendigkeit befreit ist, Speicher zuzuweisen und freizugeben, ist er mit einigen Betriebsfunktionen nicht vertraut virtuelle Maschine und der Garbage Collector kann Ihr Programm leicht in ein unersättliches Monster verwandeln, das CPU-Zeit und den gesamten verfügbaren Speicher verschlingt.
Denken Sie beim Erstellen eines neuen Arrays immer daran, dass es viel einfacher ist, viele kleine Speicherbereiche zu erstellen als einen großen. Andernfalls besteht die Gefahr, dass der Fehler „Nicht genügend Arbeitsspeicher“ auftritt. Dies bedeutet in etwa, dass zwar noch Speicher vorhanden war, aber alles weg ist.
Wenn viele Programmierer zu Java wechseln und sich mit der automatischen Speicherbereinigung vertraut machen, beginnen sie damit, Objekte in großen Mengen zu erstellen, in der Hoffnung, dass sich alles von selbst bereinigt. Mittlerweile ist ein Müllsammler wie eine Maschine, die nur Müll entfernen kann, der in einen Mülleimer in der Nähe des Hauses geworfen wird. Wenn Sie einige Daten nicht mehr benötigen, sollten Sie sie nicht nur für den Fall aufbewahren, wie einen Haufen alter Postkarten – weisen Sie dem Datenzeiger Null zu und helfen Sie dem Hausmeister beim Aufräumen :). Es empfiehlt sich auch, die Liste zu löschen, wenn Sie sie nicht mehr benötigen. Denken Sie daran, dass das Objekt so lange im Speicher bleibt, wie im Code Verweise darauf vorhanden sind. Selbst wenn Ihr Programm mit 16 Gigabyte Arbeitsspeicher läuft und keine Gefahr besteht, dass es aufgrund von „Nicht genügend Arbeitsspeicher“ abstürzt, wird es aufgrund des übermäßig verwendeten Arbeitsspeichers immer schwerfälliger und träger. 99 % der Benutzerbeschwerden über langsame Java-Programme sind auf ineffizient geschriebene Programme zurückzuführen Quellcode. Wenn Sie ständig Objekte erstellen müssen, die schnell verwendet werden und nicht mehr benötigt werden, z. B. viele kleine Nachrichten, sollten Sie die Erstellung eines Pools in Betracht ziehen, in dem mehrere Instanzen für die wiederholte Verwendung gespeichert werden. Denken Sie daran, dass das Erstellen und Löschen eines Objekts ein kostspieliger Vorgang ist.
Machen wir uns an die Arbeit, meine Herren.
Ein Beispiel sagt mehr als tausend Worte. Sie können ohne uns durch das Handbuch scrollen und sich die Standard-Hellowords ansehen. Wir gehen also davon aus, dass Sie dies bereits getan haben und bereit sind, ein interessanteres Beispiel umzusetzen.
Sie und ich werden uns mit der serverseitigen Anwendung von Java befassen und ein kleines Programm schreiben, um Benutzer zu „überwachen“. soziale Netzwerke. Um dies zu erreichen, müssen Sie nicht einmal einen Job bei der NSA bekommen – die Benutzer posten alles an sich selbst, und alles, was wir tun müssen, ist, diese Informationen zu erhalten, sie zu systematisieren und schön anzuzeigen. Nehmen wir eines der beliebtesten Sozialdienste, zum Beispiel foursquare, und zeichnen Sie die Bewegungen unserer Freunde auf der Karte ein.
Schauen wir uns zunächst einmal an, was wir aus Foursquare herausholen können. Nachdem wir die Seiten für Entwickler durchgesehen haben, richten wir unsere Aufmerksamkeit auf zwei Methoden:
- https://developer.foursquare.com/docs/users/checkins – vom Benutzer besuchte Orte. Leider wird es derzeit nur für im Programm registrierte Benutzer unterstützt, und es gibt Gerüchte, dass dies aufgrund von Implementierungsbeschränkungen auch weiterhin so bleiben wird.
- https://developer.foursquare.com/docs/checkins/recent – Orte, die von Freunden des registrierten Benutzers besucht wurden. Spielt man ein wenig mit dieser Funktion, wird eine traurige Tatsache deutlich: Für jeden Freund wird genau ein Ort zurückgegeben – der letzte Ort, an dem er eingecheckt hat.
Um die Foursquare-API nutzen zu können, müssen Sie unsere zukünftige Anwendung registrieren. Gehen Sie zu dieser Adresse: https://ru.foursquare.com/developers/register und füllen Sie die Felder aus (ja, Sie müssen sich auch in Foursquare selbst registrieren). aber du schaffst es ganz gut ohne mich).
Von den wichtigen Feldern hier können wir nur „Anwendungsname“, „Download-/Willkommensseiten-URL“ (geben Sie hier eine benutzerdefinierte Webadresse ein) und „Umleitungs-URI(s)“ notieren – das ist die Adresse, an die uns der Server sendet nach Anmeldung. Den gewünschten Wert geben wir hier später ein, vorerst können Sie aber einfach eine beliebige Webadresse eingeben. Klicken Sie auf „Speichern“ und unsere Tracker-Anwendung wurde erfolgreich registriert.
Aufstieg zu den Wolken
Captain Obvious bringt zum Ausdruck, dass für den Betrieb jeder Serveranwendung ein Server erforderlich ist. Einen Server alleine aufzubauen ist mühsam, daher nutzen wir die derzeit gängigen Cloud-Lösungen. Die Cloud wird von der Google Corporation gesponsert, da deren Google App Engine kostenlos und recht einfach einzurichten und zu verwenden ist. Gehen Sie zunächst hierher und laden Sie das Google App Engine SDK für Java herunter.
Jetzt können Sie mit der Erstellung des Projekts beginnen. Für die Java-Entwicklung verwende ich IntelliJ IDEA, Sie können aber auch die kostenlose und ebenso bekannte Eclipse-Umgebung verwenden.
Wählen wir ein neues Java-Projekt aus. Nennen wir es nsa_tracker.
Markieren Sie auf der nächsten Registerkarte links Webanwendung und Google App Engine und geben Sie den Pfad zum zuvor heruntergeladenen und entpackten App Engine SDK an.
Lehnen Sie sich jetzt zurück und lassen Sie die IDE ihre Arbeit machen. Wenn Sie IDEA gewählt und alles richtig gemacht haben, sehen Sie als Ergebnis ein fertiges Projekt, das beim Start ein Browserfenster mit leerem Inhalt öffnet. Sie können mit dem Codieren beginnen.
Fangen wir an zu suchen
Wir haben also einen Projektordner, der den Ordner src enthält. Wir werden die Quellen dort angeben. Java-Quellen werden in Paketen gruppiert. Ein Paket ist ein Ordner auf der Festplatte. Pakete werden benötigt, um nicht alle Quellen auf einen Haufen zu werfen, sondern um sie nach den Prinzipien der Logik zu trennen. Beispielsweise würde Code, der sich auf die Benutzeroberfläche bezieht, logischerweise im UI-Paket platziert, Netzwerkinteraktionen – im Netzwerkpaket. Dies erleichtert die spätere Entwicklung und Betreuung des Projekts erheblich. In der Vergangenheit bestand die Praxis darin, die Paketstruktur mit dem Firmennamen und anschließend dem Programmnamen zu beginnen. Dies wird Ihnen in Zukunft helfen, unsere Quellen unter einer Reihe ähnlicher Quellen leichter zu identifizieren. Für unser Programm erstellen wir ein Paket org.nsa.tracker. Wir werden darin Klassen erstellen.
Servlets werden auf dem Server zur Verarbeitung von Benutzeranfragen verwendet. Ein Servlet ist eine Klasse, die in der Regel HttpServlet erbt und nach dem Request-Response-Prinzip arbeitet. Es muss lediglich die doGet-Methode überschrieben werden. Auf Anfrage des Benutzers müssen wir uns bei Foursquare anmelden, eine Liste der Check-ins von Freunden herunterladen und die Anfrage auf die Seite mit der Karte umleiten.
Um mit der Foursquare-API zu arbeiten, verwenden wir die kostenlose Foursquare-API-Java-Bibliothek, die hier heruntergeladen werden kann. Eine Java-Bibliothek ist ein ZIP-Archiv mit einer JAR-Erweiterung, das kompilierte Java-Klassen enthält, die bestimmte Funktionen implementieren. Für die Autorisierung benötigen wir ClientId und ClientSecret, die wir während der Anwendungsregistrierungsphase in Foursquare erhalten. Da sich diese Parameter während der Programmausführung nicht ändern, werden wir sie als Konstanten deklarieren.
Private static final String CLIENT_ID = „FAKE_CLIENT_ID“; private static final String CLIENT_SECRET = "FAKE_CLIENT_SECRET";
Final bedeutet, dass dieser Variablen ein endgültiger Wert zugewiesen wurde, der nicht geändert werden kann. Static stellt allen Instanzen einer bestimmten Klasse eine Variable zur Verfügung. Anhand des Autorisierungsbeispiels aus der Foursquare-API-Java-Bibliothek erhalten wir ungefähr den folgenden Code:
Protected void doGet(HttpServletRequest req, HttpServletResponse resp) löst ServletException, IOException ( FoursquareApi foursquareApi = new FoursquareApi(CLIENT_ID, CLIENT_SECRET, CALLBACK_URL); String code = req.getParameter("code"); if (code == null) ( // Gehen Sie zur Registrierungsseite resp.sendRedirect(foursquareApi.getAuthenticationUrl()); ) else ( try ( foursquareApi.authenticateCode(code); // Registrierung ist erfolgreich, laden Sie die Daten Ergebnis
Beachten Sie die „wirft ServletException, IOException“ in der Methodendeklaration. Diese Zeile bedeutet, dass die Methode möglicherweise eine dieser Ausnahmen auslösen könnte. Eine Ausnahme in Java ist ein Objekt, das das Eintreten einer Ausnahmesituation signalisiert. Sie sind überprüfbar und nicht überprüfbar. Geprüfte Ausnahmen müssen behandelt werden, indem ein Teil des Codes mit einem Try-Catch-Block umgeben oder darüber übergeben wird. Ungeprüfte Ausnahmen werden im Allgemeinen nicht behandelt, da sie auftreten, wenn das Programm seinen Status nicht wiederherstellen kann. In dieser Methode behandeln wir nur die FoursquareApiException.
Wenn der Webserver eine Anfrage für eine Anwendung empfängt, verwendet er den Bereitstellungsdeskriptor, um die Anfrage-URL mit dem Code abzugleichen, der die Anfrage verarbeiten soll. Der Bereitstellungsdeskriptor ist eine XML-Datei namens web.xml. Fügen wir eine Beschreibung des Tracking-Servlets hinzu.
Jetzt werden Anfragen an /track von unserem Servlet namens TrackerServlet verarbeitet. Sie können den Callback-URL-Parameter auf den richtigen Wert http://localhost:8080/track setzen.
Um die Ergebnisse anzuzeigen, können Sie die Static Maps API verwenden, die freundlicherweise von demselben Google-Unternehmen bereitgestellt wird (https://developers.google.com/maps/documentation/staticmaps/). Unser Servlet generiert eine einfache HTML-Seite und gibt sie als Antwort auf die Anfrage des Benutzers zurück.
StringBuilder sb = new StringBuilder("
- "); index = 1; for (Checkin checkin: result.getResult()) ( sb.append("
Zum Generieren der Seite wird die StringBuilder-Klasse verwendet. Dies liegt daran, dass Strings in Java unveränderliche Objekte sind. Beim Verketten von Zeichenfolgen mit dem +-Operator. geschaffen Neue Zeile im Hinterkopf. StringBuilder spart Speicher, indem es ein char-Array zum Speichern der zu verbindenden Zeichenfolgen verwendet. Wir senden die Antwort an den Benutzer:
Byte resultBytes = sb.toString().getBytes("utf-8"); resp.setContentLength(resultBytes.length); resp.getOutputStream().write(resultBytes);
...Und alles ist bereit. Wir starten es und sehen etwas Ähnliches wie ein Bild mit der Aufschrift „Ergebnis des Programms“.
Was weiter?
Die Anwendung kann verbessert werden, beispielsweise durch die Trennung von Datenerfassung und -anzeige. Verschieben Sie die Datenerfassung in einen separaten Dienst, der ständig funktioniert und alle Benutzerbewegungen in der Datenbank speichert. Dann ist es möglich, nicht einzelne Punkte, sondern eine zusammenhängende Route anzuzeigen. Wenn Sie ein wenig in die Foursquare-API eintauchen, können Sie noch mehr Informationen über die Benutzeraktivität extrahieren.
Aber ich hoffe, dass mir das Wichtigste gelungen ist: Sie davon zu überzeugen, dass Java einfach und cool ist. Wir sehen uns in einem Monat!
Bücher für Java-Programmierer
Wir empfehlen, mit dem Erlernen der Sprache mit dem Buch „Java. Java: Ein Leitfaden für Anfänger von Herbert Schildt. Die nächste Ebene ist „Java. Vollständiger Leitfaden» von ihm, und Sie können mehr über Servlets aus dem Buch „Java Servlets and JSP: A Collection of Recipes“ (Java Servlet and JSP Cookbook) von Bruce W. Perry erfahren.