Línea de comando de compilación: "C: \ Archivos de programa (x86) \ Java \ jdk1.8.0_20 \ bin \ javac.exe" * .java
Ejecutar comando: Java WebServer
Código fuente:
import java.io. *; import java.net. *; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util. *; Servidor web de clase pública { public static void main (String [] args) lanza IOException { tratar { // número de conexión int i = 1; // establece el socket del servidor ServerSocket s = nuevo ServerSocket (8189); while (verdadero) { // espera la conexión del cliente Socket entrante = s.accept (); System.out.println ("Servidor web ejecutándose en el puerto:" + s.getLocalPort ()); System.out.println ("El número de conexión es:" + i); Runnable r = new ThreadHandler (entrante); Hilo t = nuevo Hilo (r); t.start (); i ++; } } catch (IOException e) { e.printStackTrace (); } } } / ** * Esta clase maneja la entrada del cliente para un socket de servidor * / La clase ThreadHandler implementa Runnable { toma de corriente privada; Public ThreadHandler (Socket i) { incomig = i; } public void run () { tratar { tratar { InputStream inStream = incomig.getInputStream (); OutputStream outStream = incomig.getOutputStream (); Scanner in = nuevo escáner (inStream); PrintWriter out = nuevo PrintWriter (outStream, true); while (verdadero) { Línea de cadena = in.nextLine (); if (line.equals ("\ r \ n") && line.equals ("")) { rotura; } System.out.println ("la solicitud del cliente es:" + línea); // leer línea de solicitud Cadena [] solicitudes = line.split ("\\ s +"); // leer el encabezado de la solicitud Map <String, String> headMap = null; // leer el cuerpo de la solicitud Map <String, String> parameterMap = null; if (solicita [0] .equals ("GET")) { // solicitud GET de respuesta // respeta el archivo que la solicitud quiere String path = System.getProperties (). GetProperty ("user.dir") + solicitudes [1] .replaceAll ("\\ /", "//"); System.out.println ("El archivo que el cliente quiere es:" + ruta); // leer el encabezado de la solicitud headMap = cabeza lectora (in); // leer el cuerpo de la solicitud parameterMap = readbody (en); doGet (camino, fuera); } else if (solicita [0] .equals ("POST")) { // solicitud POST de respuesta // responde con el archivo que la solicitud quiere y escribe el parámetro en el del archivo String path = System.getProperties (). GetProperty ("user.dir") + solicitudes [1] .replaceAll ("\\ /", "//"); System.out.println ("El archivo que el cliente quiere es:" + ruta); // leer el encabezado de la solicitud headMap = cabeza lectora (in); // leer el cuerpo de la solicitud parameterMap = readbody (en); doPost (ruta, salida, parámetroMapa); } } } finalmente { incomig.close (); } } catch (IOException e) { e.printStackTrace (); } } Mapa privado <String, String> readhead (Scanner in) { Encabezado de cadena = in.nextLine (); Map <String, String> headMap = new HashMap <> (); while (! headline.equals ("\ r \ n") &&! headline.equals ("")) { String [] keyValue = {"", ""}; Cadena [] temp = headline.split (": |:"); if (temp.length == 2) { keyValue = temp; } if (temp.length == 1) { keyValue [0] = temp [0]; } headMap.put (keyValue [0], keyValue [1]); headline = in.nextLine (); } volver headMap; } Mapa privado <String, String> readbody (Scanner in) { String bodyline = in.nextLine (); if (bodyline.equals ("\ r \ n") || bodyline.equals ("")) { volver nulo; } Cadena t = in.nextLine (); while (! t.equals ("\ r \ n") &&! t.equals ("")) { bodyline + = t + "\ r \ n"; t = in.nextLine (); } Cadena [] parámetros = bodyline.split ("&"); Map <String, String> parameterMap = new HashMap <> (); Cadena [] keyV = {"", ""}; para (parámetro de cadena: parámetros) { Cadena [] temp = parameter.split ("="); if (temp.length == 2) { keyV = temp; } if (temp.length == 1) { keyV [0] = temp [0]; } parameterMap.put (keyV [0], keyV [1]); } return parameterMap; } private void doGet (String requestPath, PrintWriter out) { Cadena final CRLF = "\ r \ n"; String statusLine = nulo; Fecha de cadena = nueva Fecha (). ToString (); String contentTypeLine = ""; String contentLengthLine = ""; String entityBody = ""; Archivo requestFile = nuevo archivo (requestPath); Ruta ruta = Paths.get (requestPath); if (requestFile.exists ()) { statusLine = "HTTP / 1.0 200 OK"; contentLengthLine = String.valueOf (requestFile.length ()); tratar { contentTypeLine = Files.probeContentType (ruta); List <String> contents = Files.readAllLines (ruta); para (Línea de cadena: contenido) { entityBody + = línea + CRLF; } } catch (IOException e) { statusLine = "HTTP / 1.0 400 BadRequest"; entityBody = "<HTML> 400 Not BadRequest </TITLE> </HEAD>" + "<BODY> 400 BadRequest" + e.getMessage (); e.printStackTrace (); } } más { statusLine = "HTTP / 1.0 404 no encontrado"; entityBody = "<HTML> 404 no encontrado </TITLE> </HEAD>" + "<BODY> 404 no encontrado"; } out.print (statusLine + CRLF); out.print ("Fecha:" + fecha + CRLF); out.print ("Content-Type:" + contentTypeLine + CRLF); out.print ("Content-Length:" + contentLengthLine + CRLF); out.print (CRLF); out.print (entityBody + CRLF); out.flush (); } private void doPost (String requestPath, PrintWriter out, Map <String, String> parameterMap) { Cadena final CRLF = "\ r \ n"; String statusLine = nulo; Fecha de cadena = nueva Fecha (). ToString (); String contentTypeLine = ""; String contentLengthLine = ""; String entityBody = ""; Archivo requestFile = nuevo archivo (requestPath); Ruta ruta = Paths.get (requestPath); if (requestFile.exists ()) { statusLine = "HTTP / 1.0 200 OK"; tratar { PrintWriter fileWrite = new PrintWriter (nuevo FileWriter (requestFile, true)); fileWrite.append (parameterMap.toString ()); fileWrite.close (); contentLengthLine = String.valueOf (requestFile.length ()); contentTypeLine = Files.probeContentType (ruta); List <String> contents = Files.readAllLines (ruta); para (Línea de cadena: contenido) { entityBody + = línea + CRLF; } } catch (IOException e) { statusLine = "HTTP / 1.0 400 BadRequest"; entityBody = "<HTML> 400 Not BadRequest </TITLE> </HEAD>" + "<BODY> 400 BadRequest" + e.getMessage (); e.printStackTrace (); } } más { statusLine = "HTTP / 1.0 404 no encontrado"; entityBody = "<HTML> 404 no encontrado </TITLE> </HEAD>" + "<BODY> 404 no encontrado"; } out.print (statusLine + CRLF); out.print ("Fecha:" + fecha + CRLF); out.print ("Content-Type:" + contentTypeLine + CRLF); out.print ("Content-Length:" + contentLengthLine + CRLF); out.print (CRLF); out.print (entityBody + CRLF); out.flush (); } }