Einführung in den einfachen Webserver von Java

Blog

HeimHeim / Blog / Einführung in den einfachen Webserver von Java

Sep 02, 2023

Einführung in den einfachen Webserver von Java

Von Matthew Tyson Softwarearchitekt, InfoWorld | Eine der praktischsten neuen Funktionen der Java 18-Version (März 2022) war der neue Simple Web Server, der das Hochfahren und vereinfacht

Von Matthew Tyson

Softwarearchitekt, InfoWorld |

Eine der praktischsten neuen Funktionen der Java 18-Version (März 2022) war der neue Simple Web Server, der das Einrichten und Konfigurieren eines HTTP-Dateiservers vereinfacht. Außerdem wird eine API bereitgestellt, die das vorhandene httpserver-Paket für die Erstellung einfacher Anwendungsfälle erweitert. Der neue Simple Web Server ist ein nützliches Tool, das jeder Java-Entwickler in seiner Trickkiste haben sollte. Schauen wir es uns an!

Der neue jwebserver-Befehl von Java vereinfacht die Ausführung eines einfachen Webservers. Es ist analog zum beliebten SimpleHTTPServer-Tool in der Python-Welt.

Der erste Schritt besteht darin, sicherzustellen, dass Sie Java 18 oder eine spätere Version ausführen. Geben Sie java --version ein, um herauszufinden, welche Version Sie derzeit ausführen. Ich empfehle die Verwendung von SDKMan zur Verwaltung von JDK-Installationen. Dies ist besonders nützlich, um mehrere Versionen zu jonglieren.

Das Grundlegendste, was Sie mit dem Java Simple Web Server tun können, besteht darin, das aktuelle Verzeichnis auf Port 8000 bereitzustellen. Geben Sie einfach den in Listing 1 gezeigten Befehl ein.

Wenn Sie von dort aus zu Ihrem Browser gehen und „localhost:8000“ aufrufen, sehen Sie eine Liste des Dateisystems, wie in Abbildung 1 dargestellt.

Es gibt einige allgemeine Dinge, die Sie möglicherweise tun müssen, um Simple Web Server in der Befehlszeile zu optimieren. Sie können beispielsweise den Port, die Adresse für die Bindung (die Netzwerkschnittstelle zum Abhören) und das bereitzustellende Verzeichnis ändern.

In Listing 2 sehen Sie, wie Sie auf Port 8080, auf allen Schnittstellen und im Verzeichnis /foo/bar lauschen.

Wie Sie sehen, ermöglicht das jwebserver-Befehlszeilentool die Bereitstellung statischer Dateien mit der einfachsten möglichen Syntax. Als Nächstes werfen wir einen Blick auf die Simple Web Server API.

Das Simple Web Server Javadoc ist ein guter Ausgangspunkt, um mehr über die API zu erfahren. Die SimpleFileServer-Klasse ist im Paket com.sun.net.httpserver vorhanden. (Dieses Paket enthält auch die älteren, einfacheren APIs zum Erstellen von Webservern. Das httpserver-Paket erweitert diese Funktionalität für einfachere Anforderungen.) Das jwebserver-CLI-Tool verwendet SimpleFileServer für seine Arbeit, und wir können es auch programmgesteuert verwenden.

Die SimpleFileServer-Klasse verarbeitet nur GET und HTTP/1.1. Allerdings können wir einige interessante Dinge damit machen. Diese Einführung in die Arbeit mit Simple Web Server schlägt beispielsweise eine Möglichkeit vor, das Google Java In-Memory-Dateisystemprojekt zu verwenden, um ein Dateisystem für den Handler zu fälschen.

Wir werden die Idee eines In-Memory-Dateisystems nutzen, um den FileHandler in SimpleFileServer so zu ändern, dass er tatsächlich ein virtuelles Dateisystem aus dem Speicher bedient. Dann verwenden wir das httpserver-Paket, um einen POST durchzuführen, um eine Fake-Datei zum Faux-Dateisystem hinzuzufügen.

Erstellen wir zunächst ein schnelles Maven-Projekt mit dem folgenden Befehl:

Legen Sie nun die CD in das neue Verzeichnis /jsws.

Setzen Sie die Compiler- und Quellversionen in pom.xml auf 18, wie hier beschrieben.

Als nächstes fügen Sie Google Jimfs zu den Abhängigkeiten hinzu, wie in Listing 3 gezeigt.

Jetzt können wir die Datei src/main/java/App.java ändern, um ein gefälschtes Dateisystem bereitzustellen. Den Code dazu finden Sie in Listing 4.

Die Idee in Listing 4 besteht darin, die standardmäßige lokale Dateisystem-API mithilfe der Open-Source-Jimfs-Bibliothek von Google zu simulieren, die die java.nio.file-API implementiert, aber alles im Speicher erledigt, wie ein virtuelles Dateisystem. Mithilfe der Bibliothek können Sie Ihre eigenen Verzeichnispfade und Dateien programmgesteuert definieren. Also erstellen wir unsere eigene virtuelle Verzeichnisstruktur und übergeben diese an SimpleFileServer als Dateihandler.

Wir konfigurieren die SimpleFileServer-Klasse programmgesteuert:

Dies akzeptiert die Internetadresse für die Bindung, genau wie wir es in der Befehlszeile gesehen haben. In diesem Fall übergeben wir die nicht spezifizierte Schnittstelle und den Port 8080. Danach kommt das Dateisystem-Root. Für dieses Beispiel geben wir ihm das Path-Objekt, das von unserer Methode createDirectoryHierarchy() erstellt wurde.

Die Methode createDirectoryHierarchy() verwendet jimfs, um ein Path-Objekt zu erstellen: FileSystem fs = Jimfs.newFileSystem(Configuration.unix());. Anschließend wird der Pfad mit Dateien und Verzeichnissen gefüllt. Die jimfs-API zum Erstellen von Pfaden und Dateien mit Inhalten ist nicht schwer zu verstehen; zum Beispiel erstellen wir eine mit Path hello = foo.resolve("hello.txt");. Sie können die meisten Objekte so verwenden, als wären sie nur normale Java-NIO-Pfade.

Wenn wir nun diesen Code ausführen und localhost:8080 aufrufen, sehen Sie die Verzeichnisliste und können sie durchsuchen und den Dateiinhalt sehen, genau wie Sie es bei einem normalen Dateiserver tun würden.

Lassen Sie uns diese Idee noch einen Schritt weiterführen und die Möglichkeit hinzufügen, eine neue Datei hochzuladen. Wir können das Paket com.sun.net.httpserver verwenden, um eine POST-Anfrage zu akzeptieren, die eine neue Datei in unser In-Memory-Dateisystem hochlädt. Sie können dies in Listing 5 sehen.

In Listing 5 behalten wir den größten Teil der Klasse bei, jedoch bei einer HttpServer-Instanz, die Port 8081 überwacht. Dies wird mit unserem benutzerdefinierten uploadHandler konfiguriert, der die hochgeladenen Daten übernimmt und sie verwendet, um eine neue Datei in den von uns angegebenen Stammpfad zu schreiben erstellt in createDirectoryHierarchy.

Um dies zu testen, können wir den gesamten Servercluster ausführen mit:

Sie können eine neue Datei mit einer CURL-Anfrage wie der in Listing 6 an den Server übertragen.

Wenn Sie die Dateilisten „localhost:8080/“ neu laden, wird die neue Datei „file.txt“ angezeigt und Sie können darauf klicken und den Inhalt anzeigen.

Simple Web Server ist eine willkommene Ergänzung zum Java-Toolset. Es macht das Hosten von Dateien mit der CLI nicht nur sehr einfach, es bietet auch einige interessante Möglichkeiten mit seiner API, insbesondere wenn es in Verbindung mit der HttpServer-API auf niedrigerer Ebene verwendet wird.

Weitere Informationen finden Sie in den folgenden zusätzlichen Ressourcen:

Lesen Sie als nächstes Folgendes:

Matthew Tyson ist Gründer der Dark Horse Group, Inc. Er glaubt an Technologie, bei der der Mensch im Mittelpunkt steht. Wenn Matt nicht gerade Gitarre spielt, erkundet er das Hinterland und das philosophische Hinterland. Seit 2007 schreibt er für JavaWorld und InfoWorld.

Copyright © 2023 IDG Communications, Inc.

Lesen Sie als nächstes Folgendes: