Erstellen und Konfigurieren von Jetty 9 Server in Java

1. Übersicht

In diesem Artikel werden wir uns mit dem programmgesteuerten Erstellen und Konfigurieren einer Jetty-Instanz befassen.

Jetty ist ein HTTP-Server und ein Servlet-Container, die leicht und einfach einzubetten sind. Wir werden uns ansehen, wie eine oder mehrere Instanzen des Servers eingerichtet und konfiguriert werden.

2. Maven-Abhängigkeiten

Zu Beginn möchten wir Jetty 9 mit den folgenden Maven-Abhängigkeiten in unsere pom.xml aufnehmen :

 org.eclipse.jetty jetty-server 9.4.8.v20171121   org.eclipse.jetty jetty-webapp 9.4.8.v20171121 

3. Erstellen eines Basisservers

Das Hochfahren eines eingebetteten Servers mit Jetty ist so einfach wie das Schreiben:

Server server = new Server(); server.start();

Das Herunterfahren ist ebenso einfach:

server.stop();

4. Handler

Nachdem unser Server betriebsbereit ist, müssen wir ihn anweisen, was mit den eingehenden Anforderungen zu tun ist. Dies kann über die Handler- Schnittstelle durchgeführt werden.

Wir könnten selbst eine erstellen, aber Jetty bietet bereits eine Reihe von Implementierungen für die häufigsten Anwendungsfälle. Schauen wir uns zwei davon an.

4.1. WebAppContext

Mit der WebAppContext- Klasse können Sie die Anforderungsbearbeitung an eine vorhandene Webanwendung delegieren. Die Anwendung kann entweder als WAR-Dateipfad oder als Webapp-Ordnerpfad bereitgestellt werden.

Wenn wir eine Anwendung im Kontext "myApp" verfügbar machen möchten, schreiben wir:

Handler webAppHandler = new WebAppContext(webAppPath, "/myApp"); server.setHandler(webAppHandler);

4.2. HandlerCollection

Für komplexe Anwendungen können wir mit der HandlerCollection- Klasse sogar mehr als einen Handler angeben .

Angenommen, wir haben zwei benutzerdefinierte Handler implementiert. Der erste führt nur Protokollierungsvorgänge aus, während der zweite eine tatsächliche Antwort erstellt und an den Benutzer zurücksendet. Wir möchten jede eingehende Anfrage mit beiden in dieser Reihenfolge bearbeiten.

So geht's:

Handler handlers = new HandlerCollection(); handlers.addHandler(loggingRequestHandler); handlers.addHandler(customRequestHandler); server.setHandler(handlers);

5. Anschlüsse

Als Nächstes möchten wir konfigurieren, welche Adressen und Ports der Server abhört, und ein Leerlaufzeitlimit hinzufügen.

Die Serverklasse deklariert zwei Convenience-Konstruktoren, die zum Binden an einen bestimmten Port oder eine bestimmte Adresse verwendet werden können.

Obwohl dies bei kleinen Anwendungen in Ordnung sein kann, reicht es nicht aus, wenn wir mehrere Verbindungen an verschiedenen Sockets öffnen möchten.

In dieser Situation stellt Jetty die Connector- Schnittstelle und insbesondere die ServerConnector- Klasse bereit, mit der verschiedene Verbindungskonfigurationsparameter definiert werden können:

ServerConnector connector = new ServerConnector(server); connector.setPort(80); connector.setHost("169.20.45.12"); connector.setIdleTimeout(30000); server.addConnector(connector);

Mit dieser Konfiguration hört der Server 169.20.45.12:80 ab. Jede an dieser Adresse hergestellte Verbindung hat eine Zeitüberschreitung von 30 Sekunden.

Wenn wir andere Sockets konfigurieren müssen, können wir andere Konnektoren hinzufügen.

6. Fazit

In diesem kurzen Tutorial haben wir uns darauf konzentriert, wie Sie einen eingebetteten Server mit Jetty einrichten. Wir haben auch gesehen, wie weitere Konfigurationen mit Handlern und Konnektoren durchgeführt werden können .

Wie immer ist der gesamte hier verwendete Code auf GitHub zu finden.