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
esession
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
-
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
-
revista