Schlagwort Archiv: Jetty

Meine ersten Erfahrungen mit embedded Jetty

In diesem Beitrag möchte ich kurz auf meine Erfahrungen mit embedded Jetty eingehen. In den letzten Wochen habe ich mehrere kleine Projekte im Kopf gehabt, welche ich gerne umsetzen würde. Da ich unter der Woche mit Web Applikationen zu tun habe, wollte ich mein Wissen dahingehend nutzen. Im Projekt wird jedoch ein proprietärer Application Server verwendet, welcher einfach viel zu viel Funktionen und Möglichkeiten bietet, die ich in keinster Weise benötigen werde. Mit Tomcat hatte ich in letzter Zeit viel gute Erfahrungen, doch es gibt auch andere Möglichkeiten statische Seiten oder ganze Applikationen zu nutzen. Zumindest habe ich davon gehört 🙂

Jetty

Jetty ist ein open-source projekt welches einen HTTP Server, HTTP Client anbietet und mit javax.servlet Container umzugehen weis. Es ist eine standalone Java Anwendung, die durch einfache Kommandos gestartet und konfiguriert werden kann (siehe Quickstart). Nähere möchte ich nicht auf Jetty (standalone) eingehen. Wer mehr wissen möchte, darf sich gerne auf der Projektseite oder der Dokumentation (aktuelle Version 9.4.6) detailiert informieren.

Jetty Embedded

Leider habe ich mir nicht notiert wo ich das Kommentar gefunden habe, möchte es aber an dieser Stelle (sinngemäß) rezitieren:

Hört auf eure Anwendungen für einen Application Server vorzubereiten. Integriert den Application Server IN eure Anwendung.

Zuerst war ich ein wenig skeptisch, da in meinem Arbeitsalltag genau dass der Fall ist. Es werden Anwendungen in EARs und WARs verpackt um diese dann anschließend auf einem proprietären Application Server zu deployen. Doch anscheinend geht es auch anders. Und genau dieses Mittel möchte ich hier kurz demonstrieren.

Beispiele

Im folgenden habe ich zwei kleine Spielereien von mir Dokumentiert. All die folgenden Beispiele wurden mit folgender Maven POM erzeugt. Besonderes Interesse gilt natürlich dabei der Definition der Jetty Dependency.

Static HTTP Server

In diesem Beispiel habe ich mit wenigen Zeilen einen voll funktionsfähigen File/Web Server erstellt. Mit ein paar Handgriffen kann dieser Server als executable JAR in einen Ordner deiner Wahl kopiert werden. Je nach Konfiguration des ResourceBase Parameters ermöglicht diese JAR einen portablen WebServer des aktuellen oder eines spezifischen Dateipfad (hier "./src/webapp" ).

Dieser Static HTTP Server kann für zweierlei Dinge benutzt werden. Zum einen als einfachen File Server zum Anzeigen der Dateien innerhalb des angegebenen Verzeichnisses. Oder zum anderen als Web Server für die Anzeige von WebContent via eines beliebigen Browsers. Ohne weitere Konfiguration prüft Jetty eigenständig ob in dem angegebenen Verzeichnis eine index.html Seite vorhanden ist. Wenn dem so ist, wird der File Server zum Web Server. Egal ob eine index.html Seite gefunden wird oder nicht, kann über die Einstellung resource_handler.setWelcomeFiles(String[] welcomeFiles);  die gewünschte Startseite des Web Servers überschrieben werden.

Hier ausgewählte Eindrücke.

REST Service

In meinem nächsten Projekt habe ich einen REST Service zu bauen. Da dieser durch die Mobilität attraktiver wird, wollte ich Jetty embedded mit Jersey kombinieren. Dies war genau wie der HttpServer mit wenigen Handgriffen und Zeilen Code startklar.

DummyClass Servlet

Mit dieser kleinen Klasse habe ich ein stupides Testwerkzeug gebaut um die Funktionstüchtigkeit meines Servlet zu prüfen. Zuerst habe ich versucht die DummyClass innerhalb meiner RESTServer Klasse zu belassen.Leider war der Zugriff mit dieser Variante nicht erfolgreich, weshalb ich die Klasse in eine eigene Datei auslagern musste (siehe Commit).

DummyClass als integrierte Klasse innerhalb von RESTServer.class

RESTServer

Der Server ist unter dem Port 8090 zu erreichen und das Servlet unter dem Pfad /dummy/test . Ob bei dem ServletHolder die Methode .setInitOrder(int order) wirklich notwendig war, hatte ich nicht kontrolliert. Die Konfiguration habe ich aus diesem Beitrag entnommen und nicht weiter hinterfragt. Aber das Ergebnis spricht für sich. 🙂

erfolgreicher REST Zugriff auf die DummyClass

Ausblick

Mit diesem Wissen, wie ich mit einfachen Mitteln einen FileServer, HttpServer oder einen RestService mit Jetty bereit stelle, können die zukünftigen Projekte nun kommen. Am meisten freue ich mich auf mein Projekt, welches die manuellen Aktionen von Fernzugriff auf mein Media Center mit Owncloud automatisiert. Hierfür möchte ich die vorhandenen Dateien über eine Web Oberfläche sichtbar machen und bei Auswahl die Datei über den REST Service im Hintergrund konvertieren. Je nach dem wie viel Spaß mir das Projekt bereitet, werde ich eventuell noch weitere Features hinzufügen.

Quellen

Als Grundlagen für diesen Beitrag haben diese Beiträge und Dokumentationen gedient:

Der in diesem Beitrag entstandenen Dateien sind unter meinem github repository zu finden.