Webserver werden auch als Hypertext -Transfer -Protokoll -Server bezeichnet. Sie verwenden HTTP, um mit ihren Kunden zu kommunizieren. Java-basierte Webserver verwenden zwei wichtige Klassen.
Java.net.socket -Klasse und Java.net.Serversocket -Klasse und kommunizieren Sie basierend auf dem Senden von HTTP -Nachrichten.
Dieser einfache Webserver verfügt über die folgenden drei Klassen:
*Httpserver
*Anfrage
*Antwort
Die Eingabe der Anwendung in der HTTPSERVER -Klasse, main() -Methode, erstellt eine HTTPServer -Instanz und ruft dann seine Warte -Methode (Await () auf. Wie der Name schon sagt, wartet await() -Methode auf die HTTP -Anforderung im angegebenen Port, verarbeitet sie und sendet dann eine Antwortnachricht an den Client zurück. Es bleibt warten, bis der Befehl zum Shutdown eingegangen ist.
Die Anwendung sendet nur Anfragen nach statischen Ressourcen, die im angegebenen Verzeichnis enthalten sind, z. B. HTML -Dateien und -bilder, und kann auch den eingehenden HTTP -Anforderungs -Byte -Stream an die Konsole anzeigen, jedoch keine Header -Informationen an den Browser wie Daten oder Cookies usw. usw. sendet.
Anfrage:
Paket cn.com.server; import java.io.inputStream; öffentliche Klasse Anfrage {private InputStream -Eingabe; private String uri; öffentliche Anfrage (InputStream Input) {this.input = input;} public void parese () {// einen Satz von Zeichen aus dem Socket -Stingbuffer -Anforderung = neue Streichbuffer (2048); {i = input.Read (Buffer);} catch (Ausnahme E) {e.printstacktrace (); i = -1;} für (int j = 0; j <i; j ++) {request.append ((char) buffer [j]);} System.out.print (Request.toToString (); urii = parseuri () (); requestString){int index1,index2;index1=requestString.indexOf(" ");if(index1!=-1){index2=requestString.indexOf(" ",index1+1);if(index2>index1){return requestString.substring(index1+1,index2);}}return null;}public String getUri(){return this.uri;}} Die Anforderungsklasse stellt eine HTTP -Anfrage dar. Das InputStream -Objekt kann übergeben werden, um ein Anforderungsobjekt zu erstellen. read() -Methode im InputStream -Objekt kann aufgerufen werden, um die ursprünglichen Daten der HTTP -Anforderung zu lesen.
parse() -Methode im obigen Quellcode wird verwendet, um die ursprünglichen Daten der HTTP -Anforderung zu analysieren. Die Parse () -Methode ruft die private Methode parseUrI() auf, um die von HTTP angeforderte URI zu analysieren. Abgesehen davon gibt es nicht viel Arbeit. parseUri() -Methode speichert die URI in der Variablen -URI, und die Aufrufen der öffentlichen Methode getUri() gibt die angeforderte URI zurück.
Antwort:
Paket cn.com.server; import java.io.file; import java.io.fileinputstream; import Java.io.ioxception; import Java.io.outputStream;/** * http response = status-line * * ((General-Header | Response-Header | enttity-header) crlf) * crlf) * crlf) * CRLF * [Message-Line | status-lander | Status-Code SP-Vernunft-Phrase crlf * */öffentliche Klasse Antwort {private statische endgültige int buffer_size = 1024; Anforderunganforderung; outputStream output; public response (outputStream output) {this.output = output byte[BUFFER_SIZE];FileInputStream fis=null;try {File file=new File(HttpServer.WEB_ROOT,request.getUri());if(file.exists()){fis=new FileInputStream(file);int ch=fis.read(bytes,0,BUFFER_SIZE);while(ch!=-1){output.write(bytes, 0, buffer_size); ch = fis.read (bytes, 0, buffer_size);}} else {// Datei nicht gefunden String errorMessage = "http/1.1 404 Datei nicht gefunden/r/n"+ "Content-type: text/html/r/r/r/n"+ ". Gefunden </h1> "; output.write (errorMessage.getBytes ());}} catch (exception e) {System.out.println (e.toString ());} schließlich {if (fis! Das Antwortobjekt wird in der await() -Methode der HTTPSERVER -Klasse erstellt, indem der in der Sockel erhaltene Ausgangsstream übergeben wird.
Die Antwortklasse hat zwei öffentliche Methoden: setRequest() und sendStaticResource() . setRequest() -Methode empfängt ein Anforderungsobjekt als Parameter. sendStaticResource() wird verwendet, um eine statische Ressource an den Browser zu senden, z. B. eine HTML -Datei.
Httpserver:
Paket cn.com.server; import java.io.file; import Java.io.inputStream; import Java.io.outputStream; Import Java.net.inetaddress; * Für dieses Paket ist Web_root das "Webroot" -Verzeichnis im Rahmen des * Arbeitsverzeichnisses. * Das Arbeitsverzeichnis ist der Speicherort im Dateisystem * Aus dem Ort, an dem der Java -Befehl aufgerufen wurde. */public static final String web_root = system.getProperty ("user.dir")+Datei.separator+"webroot"; private statische String -Stingdown -Stillddown_Command = "/stilldown"; Await () {ServerSocket ServerSocket = null; int port = 8080; try {serversocket = new serversocket (port, 1, inetaddress.getByName ("127.0.1"));} catch (Ausnahme E) {E.printStacktrace (); input = null; outputStream output = null; try {socket = serverSocket.accept (); input = socket.getInputStream (); output = socket.getOutputStream (); // Anforderungsobjekt und Parse Request Request = New Request (Eingabe);/// Reaktionsbeantwortung der Antwort. Antwort (Ausgabe); Antwort.SetRequest (Anfrage); Antwort Diese Klasse stellt einen Webserver dar, der Anfragen nach statischen Ressourcen eines bestimmten Verzeichnisses bearbeiten kann, einschließlich Verzeichnissen, die von der öffentlichen statischen Variablen endgültig Web_Root und allen Unterverzeichnissen angegeben sind.
Erstellen Sie nun eine HTML -Seite in Webroot, namens Index.html, der Quellcode lautet wie folgt:
<! DocType html> <html> <head> <meta charset = "utf-8"> <title> Title hier einfügen </title> </head> <body> <h1> Hallo Welt! </H1> </body> </html>
Starten Sie nun den Webserver und fordern Sie die statische Seite index.html an.
Die Ausgabe der entsprechenden Konsole:
Auf diese Weise erfolgt ein einfacher HTTP -Server.
Bei dem oben genannten Umgang mit einer einfachen Webserverinstanzanalyse wird es für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!