Criar um Servidor HTTP simples com Java?
Qual é a maneira mais fácil de criar um Servidor HTTP simples com Java? Existem bibliotecas nos comuns para facilitar isso? Só preciso de responder a {[[0]}, e não posso usar um servidor de aplicações.
Qual é a maneira mais fácil de conseguir isto?13 answers
Utilizar Jetty . Aqui está o exemplo oficial para embedding Jetty . (Aqui está um tutorial desactualizado .)
O Jetty é bastante leve, mas fornece um recipiente servlet, o que pode contradizer a sua exigência de usar um "servidor de aplicações".
Pode inserir o servidor de Jetty na sua aplicação. O Jetty permite opções de contêineres incorporados ou servlet.Aqui está mais uma rápida começar o tutorial junto com o código-fonte .
- iniciar uma escuta {[[0]} (provavelmente no porto 80).
- Assim que tiver um pedido de ligação, aceite e passe para outro tópico/processo (isto deixa o seu
ServerSocket
disponível para continuar a ouvir e aceitar outras ligações). - Analise o texto do pedido (especificamente, os cabeçalhos onde você vai ver se é um GET ou POST, e os parâmetros passaram.
- responda com os seus próprios cabeçalhos (
Content-Type
, etc.) and the HTML.
Considere útil usar Firebug (no Firefox) para ver exemplos de cabeçalhos. É isto que queres imitar.
Tente esta ligação: - servidor Multithreaded em Java
O mais fácil é Simples Existe um tutorial, sem WEB-INF não Servlet API sem dependências. Apenas um simples Servidor HTTP leve em um único JAR.
Se estiver a usar o Sun JDK, pode usar isto incorporado na Biblioteca
Veja este site sobre como usar.
Se não houver váriosservidores HTTP de código aberto aqui que possa incorporar no seu 'software'.
O Java 6 tem um Servidor http embutido por omissão.
A propósito, Se você planeja ter um serviço de rest web, aqui está um exemplo simples usando jersey .
Editar >> A ligação acima não é acessível. Aqui está um trecho do exemplo POST seguido pelo link para os exemplos HTTP.
if (!conn.isOpen()) {
Socket socket = new Socket(host.getHostName(), host.getPort());
conn.bind(socket);
}
BasicHttpEntityEnclosingRequest request = new
BasicHttpEntityEnclosingRequest("POST",
"/servlets‐examples/servlet/RequestInfoExample");
request.setEntity(requestBodies[i]);
System.out.println(">> Request URI: " + request.getRequestLine().getUri());
httpexecutor.preProcess(request, httpproc, coreContext);
HttpResponse response = httpexecutor.execute(request, conn, coreContext);
httpexecutor.postProcess(response, httpproc, coreContext);
System.out.println("<< Response: " + response.getStatusLine());
System.out.println(EntityUtils.toString(response.getEntity()));
System.out.println("==============");
if (!connStrategy.keepAlive(response, coreContext)) {
conn.close();
} else {
System.out.println("Connection kept alive...");
}
Http://hc.apache.org/httpcomponents-core-ga/httpcore/examples/org/apache/http/examples/
Eu escrevi um tutorial explicando como escrever um Servidor HTTP simples um tempo atrás em Java. Explica o que o código está fazendo e por que o servidor é escrito dessa forma à medida que o tutorial avança. Pode ser útil http://kcd.sytes.net/articles/simple_web_server.php
O Jetty é uma ótima maneira de incorporar facilmente um Servidor HTTP. Ele suporta sua própria maneira simples de anexar manipuladores e é um servidor de aplicativos J2EE completo se você precisar de mais funcionalidade.
A Undertow é um simples não-bloqueador servidor web embutido que pode pôr em funcionamento muito rapidamente.
public static void main(String[] args) {
Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler((exchange) -> exchange.getResponseSender().send("hello world"))
.build().start();
}