Los servidores web también se llaman servidores de protocolo de transferencia de hipertexto. Utilizan HTTP para comunicarse con sus clientes. Los servidores web con sede en Java utilizarán dos clases importantes.
Java.net.socket Clase y java.net.serversocket Clase, y comuníquese con base en el envío de mensajes HTTP.
Este simple servidor web tendrá las siguientes tres clases:
*Httpserver
*Pedido
*Respuesta
La entrada de la aplicación en la clase HTTPServer, main() crea una instancia de HTTPserver y luego llama a su método ALEA (). Como su nombre indica, await() esperará la solicitud HTTP en el puerto especificado, procesarlo y luego enviar un mensaje de respuesta al cliente. Permanecerá esperando hasta que se reciba el comando de cierre.
La aplicación solo envía solicitudes de recursos estáticos ubicados en el directorio especificado, como archivos e imágenes HTML, y también puede mostrar la transmisión de byte de solicitud HTTP entrante a la consola, pero no envía ninguna información de encabezado al navegador, como fechas o cookies, etc.
Pedido:
paquete cn.com.server; import java.io.inputstream; solicitud de clase pública {private InputStream Input; private String Uri; Public Sold (InputStream Input) {this.input = input;} public void parse () {// leer un conjunto de caracteres del sockBuffer request = new StringBuffer (2048); int i; byte [] byte = new byte [2048]; {i = input.read (buffer);} catch (Exception e) {E.PrintStackTrace (); i = -1;} for (int j = 0; j <i; j ++) {request.append ((char) buffer [j]);} system.out.print (request.ToString ()); uri = parseuri (request.Tostring ();});} requestString) {int index1, index2; index1 = requestString.IndexOf (""); if (index1! =-1) {index2 = requestString.IndexOf ("", index1+1); if (index2> index1) {return requitstring.substring (index1+1, index2);} return null;} string public string geturi () La clase de solicitud representa una solicitud HTTP. El objeto InputStream se puede pasar para crear un objeto de solicitud. Se puede llamar read() en el objeto InputStream para leer los datos originales de la solicitud HTTP.
parse() en el código fuente anterior se utiliza para analizar los datos originales de la solicitud HTTP. El método parse () llamará al método privado parseUrI() para analizar el URI solicitado HTTP. Aparte de esto, no hay mucho trabajo. parseUri() almacena el URI en el URI variable, y llamando al método público getUri() devolverá el URI solicitado.
Respuesta:
paquete cn.com.server; import java.io.file; import java.io.fileInputStream; import java.io.ioException; import java.io.outputStream;/** * http Respuesta = status-line * * ((General-Header | Response-Header | Entity-Header) CRLF) * CRLF * [MENSAJE-BODY-BODY-BODY-BODY) Código de estado SP RAENSE-FRASE CRLF * */Public Class Respuesta {private static final int buffer_size = 1024; request Solicitar; OutputStream Outputs; Public Response (OutputStream output) {this.output = output;} public void setRequest (solicitud de solicitud) {this.Request = request;} public sendStaticReseurce () lanzas {byte {byte [] n. 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) {Outture Buffer_size); ch = fis.read (bytes, 0, buffer_size);}}} else {// archivo no encontrado string errorMessage = "http/1.1 404 archivo no encontrado/r/n"+ "contenido-type: text/html/r/n"+ "contenido: 23/r/n"+ "/r/n"+ "<h1> <h1> <h1> Encontrado </h1> "; output.write (errorMessage.getBytes ());}} Catch (Exception e) {System.out.println (e.ToString ());} finalmente {if (fis! = Null) {fis.close ();}}}} El objeto de respuesta se crea en el método await() de la clase Httpserver pasando el Sutessstream obtenido en el Socket.
La clase de respuesta tiene dos métodos públicos: setRequest() y sendStaticResource() . setRequest() recibirá un objeto de solicitud como parámetro. sendStaticResource() se utiliza para enviar un recurso estático al navegador, como un archivo HTML.
Httpserver:
paquete cn.com.server; import java.io.file; import java.io.inputstream; import java.io.outputstream; import java.net.inetaddress; import java.net.serversocket; import java.net.socket; public class HtpPserver {/*** weboteal es el directorio donde nuestro html y otros archivos. * Para este paquete, Web_Root es el directorio "Webroot" en el directorio de trabajo *. * El directorio de trabajo es la ubicación en el sistema de archivos * desde donde se invocó el comando Java. */public static final String web_root = system.getProperty ("user.dir")+file.separator+"Webroot"; String final estática privada shutdown_command = "/shutdown"; private boolean shutdown = false; public static void main (string [] args) {httpserver server = new httpServer (); server. await () {ServerSocket Serversocket = null; int port = 8080; try {Serversocket = new Serversocket (puerto, 1, inetaddress.getByName ("127.0.0.1"));} Catch (excepción e) {E.PrintstActAtRace (); System.Exit (0);} input = null; outputStream output = null; try {socket = serversocket.accept (); input = Socket.getInputStream (); output = Socket.getOutputStream (); // Creación de objeto de solicitud y solicitud de parse = nueva solicitud (input); request.parse (); // Respuesta Respuesta Objeto de respuesta = NEW SETPELS (Outpution); Response.setRequest (solicitud); (Excepción e) {E.PrintStackTrace (); continuar;}}}} Esta clase representa un servidor web que puede manejar las solicitudes de recursos estáticos de un directorio especificado, incluidos los directorios especificados por la variable estática pública Final Web_root y todos los subdirectorios.
Ahora cree una página HTML en Webroot, llamado index.html, el código fuente es el siguiente:
*
Ahora inicie el servidor web y solicite la página estática index.html.
La salida de la consola correspondiente:
De esta manera, se realiza un servidor HTTP simple.
Lo anterior tiene que ver con la implementación de Java de un simple análisis de instancia de servidor web, espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!