implementación de Java basada en NIO de un servidor web multi-hilo

Dirección Código: https://github.com/iyuanyb/webserver

implementos

  • Estática, la adquisición dinámica de recursos;

  • Galleta, Sesión, conexión HTTP larga, y el momento y despejar el largo enlace de sesión HTTP;

  • Spring MVC anotación de programación similar, tal como  @RequestMapping @RequestParam similares, puede procesar los datos adquiridos desde el frente de acuerdo con el nombre del parámetro, el objeto se puede pasar, y también soporta atributos de conexión en cascada, tales como:

    // GET / página? PageSize = 10 & pagenum = 1 HTTP / 1.1 
    @RequestMapping ( "/ Página") 
    página String (@RequestParam (valor = "pageSize", defaultValue = "10") Entero pageSize, Entero pagenum) {... } 
    
    / ** 
     * Post / inicio de sesión HTTP / 1.1 
     * ... 
     * user.name = admin y user.passwd = admin y user.data.val = ok 
     * ******* 
     * usuario类: String nombre; Cadena contraseña; Datos Los datos; 
     * Datos类: String val; 
     * / 
    @RequestMapping ( "/ login", method = HttpMethod.POST) 
    Cadena de inicio de sesión (usuario del usuario) {...}
  • El método devuelve una cadena que representa la plantilla de ruta, se consigue la plantilla con un positivo, sólo desde  request y  session conseguir un campo de valor de la propiedad, tales como  ${request.user.id};

  • Tala (construido usando registrador java.util.logging, formato de registro personalizado): relacionado con el servidor de registro de la operación (servidor-n.log), HTTP solicita el registro (acceso-n.log).

API Resumen:

@Controller 
@RequestMapping 
@RequestParam 
@RequestHeader 
@CookieValue 
HttpRequest 
HttpResponse 
HttpSession 
Cookies 
HTTPMethod

 

uso

paquete frasco de importación (véase el comunicado) relacionado con el uso de notas, también es necesario para crear un directorio webapp en la ruta de clase, que representa la ruta raíz de los recursos web estáticas. Luego, en la clase principal de  main las llamadas de método  BootStrap.run(), ya que el controlador de exploración se lleva a cabo por la que atraviesa el directorio, por lo que el proyecto no es compatible con el paquete, debe ser publicada en forma de archivos de clase. parámetros Server-config.properties necesitan para proporcionar un perfil de la ruta de clase, contiene los siguientes elementos de configuración:

# Puerto del servidor 
PORT = 80 
Camino # almacén de archivos de registro 
LOG_FILE_STORAGE_PATH = E: \\ 
tiempo de expiración # conexión en milisegundos 
CONNECTION_EXPIRY_TIME = 30000 
# periodo de limpieza expira milisegundos conectada 
CONNECTION_CLEANING_CYCLE = 30000 
# el tiempo de expiración de la sesión en milisegundos 
SESSION_EXPIRY_TIME = 30000 
# la limpieza expiró sesión del ciclo, en milisegundos 
SESSION_CLEANING_CYCLE = 30000 
# escuchan para el cliente lee el caso de que el número de hilos 
POLLER_THREAD_COUNT = 2 
# específica de procesamiento de solicitudes de rosca tamaño de la piscina 
REQUEST_PROCESSOR_THREAD_COUNT = 4

  

espectáculo

  • estructura del proyecto

imagen-20200311225337531

  • EchoController.java

    Pena com.test paquete de; 
    
    // paquete de guía omitido ... 
    
    @Controller // Sólo marca @Controller será considerada responsable del tratamiento 
                // soportes @RequestMapping anotación en la clase, 
    clase pública EchoController { 
    
        // flujos seguros 
        privados final de la DateTimeFormatter formateador = DateTimeFormatter.ofPattern estática ( "el mM-dD-AAAA HH: mM: SS"); 
    
        @RequestMapping ( "/ echo") // asignada a "/ echo" 
        public String eco (el HttpRequest Request, @RequestParam (valor = "msg", defaultValue = "entrar en vacío") de cadena MSG) { 
    
            el LocalDateTime LocalDateTime = LocalDateTime.ofEpochSecond (request.getSession () el getLastAccessedTime () / 1,000, 0, ZoneOffset.ofHours (. 8)) ;. 
            request.setAttribute ( "lastAccessedTime", localDateTime.format (formateador) ); 
            Solicitud.setAttribute ( "msg", msg);
            volver "test.html"; // para hacer la ruta de plantilla (CLASSPATH: la webapp / la test.html) 
        } 
    
        public static void main (String [] args) { 
            BootStrap.run (); 
        } 
    }
  • test.html

    <! DOCTYPE> 
    <html lang = "es"> 
        <head> 
            <title> prueba </ title> 
        </ head> 
        <body> 
            <p> Eco: $ {} request.msg </ p> 
            <p> Último acceso Tiempo: $ {request.lastAccessedTime} </ p> 
            <p> <img src = "img / girl.jpg" alt = "niña" width = "320" height = "480" /> </ p> 
        </ body > 
    </ html>
  • efecto

    imagen-20200311230536372
  • revista

    imagen-20200311230911751 imagen-20200311230942940

Supongo que te gusta

Origin www.cnblogs.com/yuanyb/p/12483768.html
Recomendado
Clasificación