JavaRush /Java-Blog /Random-DE /Teil 6: Servlet-Container

Teil 6: Servlet-Container

Veröffentlicht in der Gruppe Random-DE
Dieses Material ist Teil der Reihe „Einführung in die Unternehmensentwicklung“. Vorherige Artikel: Teil 6. Servlet-Container – 1Im letzten Artikel haben wir Servlets kennengelernt und gelernt, wie man mit ihrer Hilfe Webanwendungen erstellt. Es ist an der Zeit, einen genaueren Blick darauf zu werfen, ohne was dieser Feiertag nicht möglich wäre – Servlet-Container.

Inhalt:

Was ist ein Servlet-Container?

Dies ist ein Programm, das auf dem Server läuft und mit den von uns erstellten Servlets interagieren kann. Mit anderen Worten: Wenn wir unsere Webanwendung auf einem Server ausführen möchten, stellen wir zunächst einen Servlet-Container bereit und platzieren dann die Servlets darin. Die Funktionsweise ist einfach: Wenn ein Client den Server kontaktiert, verarbeitet der Container seine Anfrage, bestimmt, welches Servlet sie verarbeiten soll und leitet sie weiter. Teil 6. Servlet-Container – 2

So verwenden Sie Servlet-Container

Neben der Weiterleitung von Anfragen führt der Servlet-Container weitere Funktionen aus:
  1. Generiert dynamisch HTML-Seiten aus JSP-Dateien.
  2. Verschlüsselt/entschlüsselt HTTPS-Nachrichten.
  3. Bietet eingeschränkten Zugriff für die Servlet-Verwaltung.
Im Großen und Ganzen hört es sich gut an, es bleibt nur noch herauszufinden, wie man alles anwendet. Nun, um zu lernen, wie man etwas benutzt, muss man nur... versuchen, es zu benutzen :) Also werden wir heute üben! Der beliebteste Servlet-Container ist Apache Tomcat . Es ist Open Source und die Nutzung ist kostenlos. Laden Sie Tomcat für Ihr Betriebssystem über diesen Link herunter und sehen wir uns an, wie Sie in Aktion mit Containern arbeiten.

Tomcat installieren und ausführen

  1. Um Tomcat zu installieren, entpacken Sie einfach das heruntergeladene Archiv in das gewünschte Verzeichnis.

  2. Bitte beachten Sie, dass für die Ausführung von Tomcat Java Version 8 oder höher erforderlich ist. Stellen Sie sicher, dass die Umgebungsvariable JAVA_HOME auf die aktuelle JDK-Version verweist.

  3. Als nächstes müssen Sie den Benutzerzugriff auf Tomcat konfigurieren . Dies erfolgt in der Datei tomcat-users.xml, die sich im Ordner conf befindet.

    Tomcat ist mit vier Rollen vorinstalliert:

    • manager-gui – Zugriff auf die grafische Benutzeroberfläche und die Statusseite;
    • Manager-Skript – Zugriff auf die Textoberfläche und die Statusseite;
    • manager-jmx – Zugriff auf JMX und Statusseite;
    • manager-status – Zugriff nur auf die Statusseite.

    Innerhalb des <tomcat-users>-Tags werden wir diese Rollen explizit schreiben und sie unserem Benutzer zuweisen:

    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
    <user username="user" password="password"
        roles="manager-gui, manager-script, manager-jmx, manager-status"/>

    Jetzt ist alles startbereit!

  4. Führen Sie im Ordner „bin“ die Datei „startup.bat“ (startup.sh unter Linux) aus.

  5. Öffnen Sie nach einigen Sekunden den Link http://localhost:8080/ in Ihrem Browser . Dort erscheint der Grafikmanager:

    Teil 6: Servlet-Container – 3

    Wenn Sie ein solches Menü sehen, bedeutet das, dass Tomcat ausgeführt wird.

  6. Wenn es nicht funktioniert, überprüfen Sie manuell die Umgebungsvariablen JAVA_HOME und CATALINA_HOME:

    • JAVA_HOME – muss sich auf die aktuelle Version von Java 8+ beziehen;
    • CATALINA_HOME – muss auf Tomcat verweisen oder fehlen (darf nicht auf eine andere Version von Tomcat verweisen).

Bereitstellen einer Anwendung für Tomcat

Wir haben es geschafft, Tomcat zu starten, also ist es an der Zeit, ein Projekt darin bereitzustellen. Verwenden wir die Servlets aus dem vorherigen Artikel . MainServlet:
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/hello")
public class MainServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
       HttpSession session = req.getSession();
       Integer visitCounter = (Integer) session.getAttribute("visitCounter");
       if (visitCounter == null) {
           visitCounter = 1;
       } else {
           visitCounter++;
       }
       session.setAttribute("visitCounter", visitCounter);
       String username = req.getParameter("username");
       resp.setContentType("text/html");
       PrintWriter printWriter = resp.getWriter();
       if (username == null) {
           printWriter.write("Hello, Anonymous" + "
"
); } else { printWriter.write("Hello, " + username + "
"
); } printWriter.write("Page was visited " + visitCounter + " times."); printWriter.close(); } }
IndexServlet:
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/")
public class IndexServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
       resp.sendRedirect(req.getContextPath() + "/hello");
   }
}
Vor dem Einsatz müssen unsere Servlets in ein Kriegsarchiv gepackt werden. Normalerweise wird hierfür Maven verwendet, aber um ein War-Archiv zu erstellen, benötigt man eine web.xml-Datei, in der alle Servlets abgebildet sind. Wir haben Servlets mit der neuen Annotation @WebServlet geschrieben, daher haben wir keine web.xml. Glücklicherweise kann IDEA die Drecksarbeit für uns erledigen und unser Projekt einzeln in ein Kriegsarchiv packen. Dazu müssen Sie die Projektstruktur öffnen (Strg + Umschalt + Alt + S) -> Artefakte -> Wählen Sie den gewünschten Build aus -> Aktivieren Sie das Kontrollkästchen neben „In Projektbuild einbeziehen“ -> Klicken Sie auf „OK“. Teil 6: Servlet-Container – 4Erstellen Sie ein Projekt mit der Kombination Strg + F9. Jetzt befindet sich unser War-Archiv im Zielverzeichnis. Teil 6: Servlet-Container – 5Die Datei kann in etwas Einfacheres umbenannt werden – zum Beispiel in servlet.war – und an einen bequemeren Ort verschoben werden – in C:\my\. Wenn das Gebräu gebrauchsfertig ist, geben Sie es in einen Behälter . Dies kann auf zwei Arten erfolgen.
  1. Über GUI

    Folgen Sie dazu dem Link http://localhost:8080/manager/html . Tomcat sollte Sie zur Eingabe eines Benutzernamens und eines Passworts auffordern.

    Wenn Sie alle Schritte nach mir wiederholt haben, lautet der Benutzername user und das Kennwort Kennwort .

    Nach erfolgreicher Autorisierung sehen Sie den Tomcat Web Application Manager. Der Abschnitt „Anwendungen“ enthält bereits 5 Anwendungen – dies sind Tomcat-Dienstprogrammanwendungen, die notwendig sind, um die Arbeit damit zu vereinfachen. Sie können in Zukunft entfernt werden.

    Teil 6: Servlet-Container – 6

    Unten finden Sie den Abschnitt „Bereitstellen“. Damit können Sie ein Kriegsarchiv für den Einsatz auswählen. Geben wir den Pfad und den Kontext manuell ein:

    Teil 6. Servlet-Container – 7

    Klicken Sie auf „Bereitstellen“. Wir sehen, dass unsere Anwendung im Abschnitt „Anwendungen“ angezeigt wird:

    Teil 6: Servlet-Container – 8 Über die Tomcat-GUI können wir es stoppen, neu starten, die Sitzungslänge festlegen und löschen. Bei der Bereitstellung haben wir den Kontext /demo angegeben, was bedeutet, dass auf unsere Anwendung über den Link http://localhost:8080/demo zugegriffen werden muss . Überprüfen Sie, alles sollte funktionieren.

  2. Über das Dateisystem

    Um eine Anwendung auf diese Weise bereitzustellen, müssen Sie das Verzeichnis öffnen, in dem Tomcat entpackt ist, und zu „Webapps“ wechseln. Hier sind die Dienstprogramme, mit denen wir vertraut sind:

    Teil 6. Servlet-Container – 9

    Alles was wir tun müssen, ist unsere servlet.war hierher zu verschieben.

    Wir warten ein paar Sekunden und sehen, dass ein neuer Servlet-Ordner erschienen ist, was bedeutet, dass unsere Anwendung bereitgestellt wird. Gehen wir zur bekannten Application Manager-Oberfläche – http://localhost:8080/manager/ . Hier sehen wir, dass unsere Anwendung im /servlet-Kontext bereitgestellt wird:

    Teil 6: Servlet-Container – 10

    Bei dieser Bereitstellung wird der Kontext automatisch dem Namen des eingesetzten Kriegsarchivs zugeordnet. Um den Kontext zu ändern, können Sie den neu erstellten Ordner mit der Anwendung umbenennen. Zuvor müssen Sie jedoch die Datei löschen. Andernfalls stellt Tomcat die Anwendung mit dem Namen des Archivs erneut bereit.

    Wie Sie sehen, ist die Bereitstellung von Anwendungen für Tomcat viel einfacher, als es den Anschein hat. Aber auch die anderen Funktionen sind einfach zu bedienen. Lass uns das Prüfen.

Verwendung des HTTPS-Protokolls anstelle von HTTP

Wenn Sie sich erinnern, haben wir den Unterschied zwischen HTTP und HTTPS in einem separaten Artikel besprochen . HTTPS ist das gleiche Protokoll wie HTTP, verwendet jedoch eine Verschlüsselung der übertragenen Daten. Auf der Clientseite wird die Verschlüsselung vom Browser übernommen, und auf der Serverseite müssen wir für die Verschlüsselung sorgen. Da HTTP-Anfragen von Tomcat akzeptiert und weitergeleitet werden, wäre es logisch, die Verschlüsselung an Tomcat zu delegieren. Dazu benötigen Sie:
  1. Generieren Sie ein selbstsigniertes Zertifikat.
  2. Nehmen Sie weitere Servereinstellungen vor.
Lasst uns das üben.

Generieren eines Zertifikats

Das JDK enthält unabhängig von der Version eine große Anzahl von Dienstprogrammen, darunter keytool . Dies ist ein Tool zum Generieren von Verschlüsselungsschlüsseln und zum Arbeiten mit ihnen. Um es zu verwenden, gehen Sie über die Befehlszeile in das Verzeichnis C:\Programme\Java\jdk1.8.0_181\bin und führen Sie den Befehl keytool -genkey -alias tomcat -keyalg RSA aus .
  • keytool – Starten Sie das Dienstprogramm mit Parametern;
  • -genkey – geben an, dass wir einen neuen Schlüssel generieren möchten;
  • -alias tomcat – einen Schlüsselalias erstellen;
  • -keyalg RSA – Wählen Sie RSA als Schlüsselgenerierungsalgorithmus aus.
Nach Ausführung des Befehls startet das Dienstprogramm einen Dialog mit uns: Teil 6: Servlet-Container – 11Geben Sie die erforderlichen Informationen ein. Jetzt haben wir in unserem Home-Verzeichnis (für Windows ist es C:\Benutzer\{Benutzername}\.keystore) einen Keystore und darin einen Tomcat-Schlüssel erstellt. Wir haben ein einfaches Zertifikat erstellt, das von den meisten Browsern akzeptiert wird. Für kommerzielle Zwecke ist dieses Zertifikat nicht geeignet, es kann nur zu Testzwecken verwendet werden. Auf dem Produktionsserver müssen Sie ein Zertifikat einer Zertifizierungsstelle verwenden (z. B. https://letsencrypt.org/ ).

Einrichten des Servers

Nachdem das Zertifikat nun fertig ist, müssen Sie die Servereinstellungen, insbesondere den SSL-Connector, anpassen. Dies geschieht in der Datei server.xml, die sich in apache-tomcat-9.0.30/conf/ befindet . Wir finden Blöcke wie:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
 </Connector>
und platzieren Sie unsere Konfiguration daneben:
<Connector
       protocol="org.apache.coyote.http11.Http11NioProtocol"
       port="8443" maxThreads="200"
       scheme="https" secure="true" SSLEnabled="true"
       keystoreFile="C:\Users\user\.keystore" keystorePass="mypass"
       clientAuth="false" sslProtocol="TLS"/>
Wir weisen den Parametern keystoreFile und keystorePass die für uns relevanten Werte zu, speichern und starten Tomcat mithilfe der Dateien Shutdown.bat und Startup.bat neu. Jetzt ist der Server bereit, https-Anfragen zu verarbeiten, nur ein wenig an der geänderten Adresse – https://localhost:8443/demo/hello . Wenn Sie auf den Link klicken, wird eine Warnung angezeigt, dass das Zertifikat fragwürdig ist, was nicht überraschend ist. Um ein normales Zertifikat zu erhalten, müssen Sie, wie bereits beschrieben, die Dienste eines der Zertifizierungsdienste in Anspruch nehmen. Aber bisher haben wir unser Ziel erreicht: Die Anwendung funktioniert über das HTTPS-Protokoll, und das ist die Hauptsache!

Dynamische Generierung von HTML-Seiten

Lassen Sie uns nun mit unserer Überprüfung anderer Funktionen von Servlet-Containern fortfahren – der dynamischen Generierung von HTML-Seiten. Stellen Sie sich eine ideale Welt vor, in der Sie statt langweiligem statischen HTML-Code JAVA-Code mit Variablen, Schleifen, Arrays und anderen Sprachkonstrukten schreiben könnten. Hast du es dir vorgestellt? Die gute Nachricht ist, dass es etwas Ähnliches gibt, die schlechte Nachricht ist, dass es nicht vollständig existiert. Falls Sie es noch nicht erraten haben: Es handelt sich um die JSP-Technologie (Java Server Pages). Kurz gesagt handelt es sich dabei um eine Technologie, die es Ihnen ermöglicht, Teile von JAVA-Code in eine HTML-Seite einzufügen. Dann wird dieser Code zwar noch in HTML umgewandelt, bevor er an den Client gesendet wird, aber er wird unter Berücksichtigung verschiedener Faktoren dynamisch generiert. Sie können beispielsweise bedingte Konstruktionen verwenden und abhängig von einer Bedingung unterschiedliche Inhalte bereitstellen. Beispiel einer JSP-Seite:
<%@ page language="java"" %>
<html>
<head>
<title>JSP</title>
</head>

<body>
<%
String firstName="name";
String secondName="surname";

    if(firstName.equals("name")){
      out.print("Hello :"+firstName+"<br>");
    }

    if(firstName.equals("name") && secondName.equals("surname"))
    {
      out.print("Hello, my dear friend! <br>");
    }
    else
    {
      out.print("I don’t know you. Go away! <br>");
    }
%>
</body>
</html>
Weitere Informationen zu JSP finden Sie hier . Eigentlich... sind wir nicht deswegen hier, sondern wegen der Servlet-Container! Was hat JSP damit zu tun? Es ist ganz einfach: Die Umwandlung von JAVA-Code von JSP in HTML-Code wird vom Servlet-Container durchgeführt. Wenn ein Servlet JSP-Inhalte als Antwort zurückgeben möchte, nimmt der Container dies zur Kenntnis und wandelt ihn zunächst in eine browserlesbare HTML-Seite um, bevor er diesen Inhalt an den Client sendet. Heutzutage gibt es viele Analoga der JSP-Technologie – Thymeleaf, FreeMarket, Moustache und andere. Sie alle funktionieren nach einem ähnlichen Prinzip. Welche man für die Arbeit wählt, ist Geschmackssache. Dies gilt auch für die Auswahl eines Servlet-Containers. In den Beispielen haben wir Tomcat verwendet, den am häufigsten verwendeten Container, aber einige Projekte verwenden auch andere. Es lohnt sich, sich kurz mit den beliebtesten vertraut zu machen und ihre Unterschiede zu Tomcat zu betrachten.

Alternativen zu Tomcat

  1. GlassFish ist ein von Oracle unterstützter Open-Source-Container.

    Im Gegensatz zu Tomcat handelt es sich um einen vollwertigen Webserver, der neben Servlets auch andere Komponenten aus dem JavaEE-Framework betreiben kann. Gleichzeitig verbraucht es viel mehr RAM. Flexibler bei der Feinabstimmung des Servers, was die Verwendung erschwert. Es lohnt sich, es bei der Entwicklung von Anwendungen mit dem JavaEE-Framework zu verwenden.

  2. WildFly – früher Jboss . Auch Open Source. Entwickelt von Red Hat. Der Name wurde geändert, um Verwechslungen mit einem anderen Unternehmensprodukt – JBoss Enterprise Application Platform – zu vermeiden.

    WildFly ist wie GlassFish ein vollwertiger Webserver. Unter der Haube nutzt WildFly übrigens Tomcat als Servlet-Container. Im Gegensatz zu GlassFish ist WildFly leichter und einfacher einzurichten.

  3. Jetty ist – ähnlich wie die vorherigen – Open Source. Entwickelt von Eclipse.

    Wie Tomcat handelt es sich um einen einfachen Servlet-Container ohne Unterstützung für alle Komponenten des JavaEE-Frameworks. Gleichzeitig ist es leichter und kann sogar auf einem Mobiltelefon ausgeführt werden. Es startet und stoppt schnell und lässt sich gut skalieren. Im Gegensatz zu Tomcat verfügt es über eine kleinere Community und Wissensbasis.

  4. WebLogic ist eine lizenzierte Software, die vor der Nutzung erworben werden muss. Im Besitz von Oracle.

    Im Vergleich zu Tomcat ist die Funktionalität etwas umfangreicher. Kann mit dem FTP-Protokoll arbeiten. Beim Entwickeln und Testen von Anwendungen ist es jedoch nicht so flexibel.

  5. WebSphere (genauer gesagt WebSphere Application Server) ist eine kostenpflichtige Software. Entwickelt von IBM. Ähnlich wie WildFly und GlassFish handelt es sich um einen vollwertigen Anwendungsserver. Aber es verfügt über eine benutzerfreundlichere Setup-Oberfläche und eine hohe Betriebszuverlässigkeit.

    Der Nachteil besteht darin, dass es viele Ressourcen verbraucht und lange zum Starten und Stoppen benötigt, was bei der Entwicklung kleiner Projekte nicht sehr praktisch ist.

Welcher Servlet-Container oder Anwendungsserver ausgewählt werden soll, hängt vom jeweiligen Projekt ab. Es gibt Projekte, bei denen selbst ein offensichtlicher Außenseiter in der Lage ist, sich in höchster Qualität zu beweisen, aber zunächst ist es besser, eine Sache gründlich zu verstehen. Der wahrscheinlich ideale Kandidat dafür ist Tomcat. Wir haben bereits die ersten Schritte unternommen, um es zu studieren, und dann liegt es an Ihnen! In den letzten Artikeln der Reihe „Einführung in die Unternehmensentwicklung“ werden wir uns mit dem MVC-Muster vertraut machen. Teil 7. Einführung in das MVC-Muster (Model-View-Controller) Teil 8. Schreiben einer kleinen Anwendung in Spring-Boot
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION