Red de conocimiento del abogados - Ley de patentes - Cómo implementar un servidor web en Java

Cómo implementar un servidor web en Java

Cómo utilizar Java para implementar un servidor web 1. El principio de funcionamiento del protocolo HTTP

WWW es un sistema de aplicación que utiliza Internet como medio de transmisión. unidad en la red WWW es una página web. El trabajo de WWW se basa en el modelo informático cliente/servidor, que consta de un navegador web (cliente) y un servidor web (servidor) que se utiliza para la comunicación entre los dos. El protocolo HTTP es un protocolo basado en el protocolo TCP/IP. Es un protocolo de capa de aplicación entre el navegador web y el servidor web. Es un protocolo universal, sin estado y orientado a objetos. El principio de funcionamiento del protocolo HTTP incluye cuatro pasos:

(1) Conexión: el navegador web establece una conexión con el servidor web, abre un archivo virtual llamado socket (socket) y el indicador de establecimiento de este archivo La conexión se estableció exitosamente.

(2) Solicitud: el navegador web envía una solicitud al servidor web a través del socket. Las solicitudes HTTP son generalmente comandos GET o POST (POST se usa para pasar parámetros FORM). El formato del comando GET es:

GET ruta/nombre de archivo HTTP/1.0

El nombre del archivo indica el archivo al que se accede y HTTP/1.0 indica la versión HTTP utilizada por el navegador web.

(3) Respuesta: después de que el navegador web envía la solicitud, se envía al servidor web a través del protocolo HTTP. Después de recibirlo, el servidor web realiza el procesamiento de la transacción y los resultados del procesamiento se envían de regreso al navegador web a través de HTTP, mostrando así la página solicitada en el navegador web.

Ejemplo: Supongamos que el cliente establece una conexión con www.miempresa.com: 8080/mydir/index.html, enviará el comando GET: GET /mydir/index.html HTTP/1.0. El nombre es El servidor web de www.mycompany.com busca en su espacio de documentos el archivo index.html en el subdirectorio mydir. Si se encuentra el archivo, el servidor web transmite el contenido del archivo al navegador web correspondiente.

Para informar al navegador web sobre el tipo de contenido que se va a transmitir, el servidor web primero transmite cierta información del encabezado HTTP y luego transmite el contenido específico (es decir, la información del cuerpo HTTP), con un línea en blanco entre la información del encabezado HTTP y la información del cuerpo HTTP por separado.

La información del encabezado HTTP más utilizada es:

① HTTP 1.0 200 OK

Esta es la primera línea de la respuesta del servidor web, que enumera los servidores HTTP que ejecutan la versión número y código de respuesta. El código "200 OK" indica que la solicitud está completa.

② MIME_Version: 1.0

Indica la versión del tipo MIME.

③ content_type: tipo

Esta información del encabezado es muy importante, indica el tipo MIME de la información del cuerpo HTTP. Por ejemplo: content_type: text/html indica que los datos transmitidos son un documento HTML.

④ content_length: valor de longitud

Indica la longitud (bytes) de la información del cuerpo HTTP.

(4) Cerrar la conexión: Cuando se completa la respuesta, el navegador web y el servidor web deben desconectarse para garantizar que otros navegadores web puedan establecer conexiones con el servidor web.

2. Programación Java para implementar funciones del servidor web

De acuerdo con el principio de funcionamiento del protocolo HTTP mencionado anteriormente, el método para implementar el programa del servidor web para solicitudes GET es el siguiente :

(1) Cree un objeto de clase ServerSocket y escuche el puerto 8080. Esto es para distinguirlo del puerto TCP/IP estándar 80 de HTTP

(2) Espere y; acepte que el cliente se conecte al puerto 8080 y conecte el socket al cliente

(3) Cree el flujo de entrada y el flujo de salida asociado con el socket

; (4) Desde el flujo de entrada asociado con el socket instream Lea una línea de información de solicitud enviada por el cliente. El formato de la información de la solicitud es: OBTENER ruta/nombre de archivo HTTP/1.0

(5) Obtener. el tipo de solicitud a partir de la información de la solicitud. Si el tipo de solicitud es GET, el nombre del archivo HTML al que se accede se obtiene de la información de la solicitud. Si no hay un nombre de archivo HTML, use index.html como nombre de archivo

(6) Si el archivo HTML existe, abra el archivo HTML y envíe la información del encabezado HTTP y el contenido del archivo HTML al; Navegador web a través del socket y luego ciérrelo. De lo contrario, envíe un mensaje de error al navegador web;

(7) Cierre el enchufe conectado al navegador web correspondiente.

El siguiente programa es un servidor web multiproceso escrito de acuerdo con el método anterior para garantizar que varios clientes puedan conectarse al servidor web al mismo tiempo.

Programa 1: archivo WebServer.java

//WebServer.java usa JAVA para escribir un servidor web

import java.io.*;

import java.net.*;

servidor web de clase pública {

public static void main(String args[]) {

int i= 1, PUERTO = 8080;

servidor ServerSocket = nulo;

cliente de socket = nulo

prueba {

servidor = nuevo ServerSocket; (PUERTO );

System.out.println ("El servidor web está escuchando en el puerto " server.getLocalPort()

para (;;) {client=server.accept); () ; //Acepta la solicitud de conexión del cliente

new ConnectionThread(cliente, i).

inicio();

i ;

}

} captura (Excepción e) {System.out.println(e);}

}

}

/* La clase ConnectionThread completa la comunicación con un navegador web*/

clase ConnectionThread extiende Thread {

Cliente de socket; //Palabra de socket para conectarse al navegador web

int counter; //Contador

public ConnectionThread (Socket cl, int c) {

client=cl;

counter=c;

}

public void run() //cuerpo del hilo

{try {

Cadena destIP=client.getInetAddress().

toString(); //Dirección IP del cliente

int destport=client.getPort(); //Número de puerto del cliente

System.out.println("Contador de conexión" : conectado a " destIP " en el puerto " destport ".");

PrintStream outstream=new PrintStream (client.getOutputStream());

DataInputStream instream=new DataInputStream (client. getInputStream( ));

String inline=instream.readLine(); //Lee la información de la solicitud enviada por el navegador web

System.out.println("Recibido:" inline);

if (getrequest (inline)) { //Si es una solicitud GET

String filename=getfilename (inline);

File file=new File (nombre de archivo);

if (file.exists()) { //Si el archivo existe, envíelo al navegador web

System.out.println(nombre de archivo " solicitado .");

outstream.println ("HTTP/1.0 200 OK");

outstream.println ("MIME_version: 1.0");

outstream .println("Content_Type: texto/html");

int len=(int)file.length();

outstream.println("Content_Length: " len);

outstream.println("");

sendfile(outstream, archivo); //Enviar archivo

outstream.flush();

} else { //Cuando el archivo no existe

String notfound="

Error 404-archivo no encontrado

";

outstream.println ("HTTP/1.0 404 no encontrado");

outstream.println ("Content_Type: texto/html"); :" notfound.length() 2);

outstream.println("");

outstream.println(notfound);

outstream.flus

h();

}

/advance/519981.html