implementação Java de um servidor Web com rosca-multi baseado em NIO

Código Endereço: https://github.com/iyuanyb/webserver

implementos

  • Estática, aquisição de recursos dinâmico;

  • Cookie, sessão, conexão HTTP longa, eo momento e limpar a longa ligação Sessão HTTP;

  • Spring MVC anotação programação semelhante, tal como  @RequestMapping @RequestParam o tipo, de dados pode ser obtido a partir do processo de acordo com os nomes de acolhimento parâmetro, os objectos podem ser passados, e também suporta atributos em cascata, tais como:

    // GET / página? PageSize = 10 & pagenum = 1 HTTP / 1.1 
    @RequestMapping ( "/ página") 
    página String (@RequestParam (value = "pageSize", defaultValue = "10") Integer pageSize, Integer pagenum) {... } 
    
    / ** 
     * POST / login HTTP / 1.1 
     * ... 
     * user.name = admin & user.passwd = admin & user.data.val = ok 
     * ******* 
     * O usuário类: string nome; Cordas passwd; Dados de dados; 
     * Dados类: String val; 
     * / 
    @RequestMapping ( "/ login", method = HttpMethod.POST) 
    de login String (usuário User) {...}
  • Método retorna um string que representa o modelo de caminho, o modelo é conseguido usando um positivo, apenas a partir de  request e  session obter um campo de valor da propriedade, tais como  ${request.user.id};

  • Logging (construído usando logger java.util.logging, formato de registro personalizado): relacionadas com o servidor de log operação (server-n.log), HTTP solicita o log (access-n.log).

Resumo API:

@Controller 
@RequestMapping 
@RequestParam 
@RequestHeader 
@CookieValue 
HttpRequest 
HttpResponse 
HttpSession 
Biscoito 
HttpMethod

 

uso

pacote jar importação (ver comunicado) relacionada com o uso de notas, também precisa criar um diretório webapp no classpath, representa o caminho da raiz de recursos da web estáticas. Em seguida, na principal classe de  main chamadas de método  BootStrap.run(), porque o controlador de digitalização é implementado por atravessar o diretório, para que o projeto não suporta o pacote, deve ser publicada na forma de arquivos de classe. parâmetros Server-config.properties precisa fornecer um perfil para o classpath, compreendendo os seguintes itens de configuração:

# Porta do servidor 
PORT = 80 
Path # armazenar arquivos de log 
LOG_FILE_STORAGE_PATH = E: \\ 
tempo de expiração # conexão em milissegundos 
CONNECTION_EXPIRY_TIME = 30000 
# período de limpeza expirar conectado milissegundos 
CONNECTION_CLEANING_CYCLE = 30000 
# o tempo de expiração da sessão em milissegundos 
SESSION_EXPIRY_TIME = 30000 
# limpeza expirado sessão do ciclo, em milissegundos 
SESSION_CLEANING_CYCLE = 30000 
# escutam cliente lê o evento o número de threads 
POLLER_THREAD_COUNT = 2 
solicitação de processamento rosca em piscina # específica 
REQUEST_PROCESSOR_THREAD_COUNT = 4

  

espetáculo

  • estrutura do projeto

image-20200311225337531

  • EchoController.java

    com.test Package Multa para; 
    
    // pacote guia omitido ... 
    
    @Controller // Apenas marca @Controller será considerado como controlador 
                // suportes @RequestMapping anotação na classe, 
    classe pública EchoController { 
    
        // thread-safe 
        privada final a DateTimeFormatter Formatador = DateTimeFormatter.ofPattern estático ( "o mM-dD-AAAA HH: mM: SS"); 
    
        @RequestMapping ( "/ eco") // mapeado para "/ eco" 
        public string eco (HttpRequest Pedido, @RequestParam (valor = "msg", defaultValue = "enter vazio") Cadeia MSG) { 
    
            a LocalDateTime LocalDateTime = LocalDateTime.ofEpochSecond (request.getSession () a getLastAccessedTime () / 1000, 0, ZoneOffset.ofHours (. 8)) ;. 
            request.setAttribute ( "lastAccessedTime", localDateTime.format (formatador) ); 
            Request.setAttribute ( "msg", msg);
            retornar "test.html"; // para processar o caminho do modelo (CLASSPATH: a webapp / o test.html) 
        } 
    
        public static void main (String [] args) { 
            BootStrap.run (); 
        } 
    }
  • test.html

    <! DOCTYPE> 
    <html lang = "en"> 
        <head> 
            <title> Test </ title> 
        </ head> 
        <body> 
            <p> Eco: $ {request.msg} </ p> 
            <p> Último Acesso Time: $ {} request.lastAccessedTime </ p> 
            <p> <img src = "img / Garota.jpg" alt = "menina" width = "320" height = "480" /> </ P> 
        </ body > 
    </ html>
  • efeito

    image-20200311230536372
  • revista

    image-20200311230911751 image-20200311230942940

Acho que você gosta

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