Les serveurs Web sont également appelés serveurs de protocole de transfert hypertexte. Ils utilisent HTTP pour communiquer avec leurs clients. Les serveurs Web basés sur Java utiliseront deux classes importantes.
Java.net.socket Class et Java.net.SerVersocket Class, et communiquez en fonction de l'envoi de messages HTTP.
Ce serveur Web simple aura les trois classes suivantes:
* HttpServer
*Demande
*Réponse
L'entrée de l'application dans la classe HTTPServer, main() crée une instance HTTPServer, puis appelle sa méthode Await (). Comme son nom l'indique, await() attendra la demande HTTP sur le port spécifié, le traitera, puis renvoie un message de réponse au client. Il restera en attente de la réception de la commande d'arrêt.
L'application n'envoie que des demandes de ressources statiques situées dans le répertoire spécifié, telles que les fichiers et images HTML, et il peut également afficher le flux d'octet de demande HTTP entrant sur la console, mais il n'envoie aucune information d'en-tête au navigateur, telles que les dates ou les cookies, etc.
Demande:
Package cn.com.server; Importer java.io.inputStream; Public Class Request {private InputStream Input; private String Uri; Public Request (InputStream Input) {this.input = input;} public void parse () {// lire un ensemble de caractères de la socket stringbuffer = new byte [2048]; int i; byte [] buffer = new byte [2048]; {i = input.read (buffer);} catch (exception e) {e.printStackTrace (); i = -1;} pour (int j = 0; j <i; j ++) {request.append ((char) buffer [j]);} system.out.print ( 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;} La classe de demande représente une demande HTTP. L'objet InputStream peut être passé pour créer un objet de demande. read() dans l'objet InputStream peut être appelée pour lire les données d'origine de la demande HTTP.
parse() dans le code source ci-dessus est utilisée pour analyser les données d'origine de la demande HTTP. La méthode parse () appellera la méthode privée parseUrI() pour analyser l'urri demandé HTTP. En dehors de cela, il n'y a pas beaucoup de travail. parseUri() stocke l'URI dans l'URI variable, et l'appel de la méthode publique getUri() renverra l'URI demandé.
Réponse:
package cn.com.server; import java.io.file; import java.io.fileInputStream; import java.io.ioexception; import java.io.outputStream; / ** * http réponse = status-line * * ((General-Header | Response-header | entity-header) Crlf) * Crlf * [Message-Body] Code de statut SP Maison-phrase CRLF * * / Public Class Response {private static final int buffer_size = 1024; request request; outputStream Output; public réponse (outputStream 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 0, buffer_size); ch = fis.read (bytes, 0, buffer_size);}} else {// fichier non trouvé String errorMeMessage = "Http / 1.1 404 Fichier non trouvé / r / n" + "Content-Type: Text / HTML / r / n" + "Content-Length: 23 / R / n" + "/ r / n" + " Found </h1> "; output.write (errorMessage.getBytes ());}} catch (exception e) {System.out.println (e.toString ());} enfin {if (fis! = Null) {fis.close ();}}}} L'objet de réponse est créé dans la méthode await() de la classe HTTPServer en passant le sort de sortie obtenu dans le socket.
La classe de réponse a deux méthodes publiques: setRequest() et sendStaticResource() . setRequest() recevra un objet de demande en tant que paramètre. sendStaticResource() est utilisée pour envoyer une ressource statique au navigateur, comme un fichier HTML.
HttpServer:
Package cn.com.server; import java.io.file; import java.io.inputStream; import java.io.outputstream; import java.net.inetaddress; import java.net.serversocket; java.net.socket; classe publique htttpsserver {/ ** * web_root est le répertoire est le répertoire où notre httml et autre. * Pour ce package, Web_root est le répertoire "webroot" sous le répertoire * travaillant. * Le répertoire de travail est l'emplacement du système de fichiers * d'où la commande java a été invoquée. * / public static final String web_root = System.getProperty ("user.dir") + file.separator + "webroot"; private static final string shutdown_command = "/ shutdown"; private boolean shutdown = false; public static void main (String [] args) {httpServer Server = new httpSserver (); server.await ();); Await () {serversocket serversocket = null; int port = 8080; try {serversocket = new serversocket (port, 1, inetAddress.getByName ("127.0.0.1"));} catch (exception e) {e.printstackTrace (); System.exit (0);} while (! shutdown) {socket socket = null; Entractive; input = null; outputStream output = null; try {socket = serversocket.accept (); input = socket.getInputStream (); output = socket.getOutputStream (); // Créer une réponse de la demande Réponse) Réponse = nouvelle réponse (sortie); Response.Setrequest (request); réponse. (Exception e) {e.printStackTrace (); Continuer;}}}} Cette classe représente un serveur Web qui peut gérer les demandes de ressources statiques d'un répertoire spécifié, y compris les répertoires spécifiés par la variable statique statique Final Web_root et toutes les sous-répertoires.
Créez maintenant une page HTML dans webroot, nommée index.html, le code source est le suivant:
<! Doctype html> <html> <éadf> <meta charset = "utf-8"> <tapie> Insérez le titre ici </tapie> </ head> <body> <h1> bonjour le monde! </h1> </ body> </html>
Démarrez maintenant le serveur Web et demandez la page statique index.html.
La sortie de la console correspondante:
De cette façon, un simple serveur HTTP est effectué.
Ce qui précède est tout au sujet de l'implémentation Java d'une simple analyse d'instance de serveur Web, j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!