servidor web de compilación de línea de comandos de Java

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 ();
    }
 
}

  

Supongo que te gusta

Origin www.cnblogs.com/coolyylu/p/12717451.html
Recomendado
Clasificación