Creare un semplice server HTTP con Java?
Qual è il modo più semplice per creare un semplice server HTTP con Java? Ci sono librerie in commons per facilitare questo? Ho solo bisogno di rispondere a GET/POST
e non posso usare un server di applicazioni.
Qual è il modo più semplice per farlo?
13 answers
Utilizzare Pontile . Ecco l'esempio ufficiale per incorporare Jetty . (Ecco un tutorial obsoleto .)
Jetty è piuttosto leggero, ma fornisce un contenitore servlet, che potrebbe contraddire il tuo requisito contro l'utilizzo di un "server di applicazioni".
È possibile incorporare il server Jetty nell'applicazione. Jetty consente sia incorporato o servlet opzioni contenitore.
Ecco un altro rapido guida introduttiva insieme al codice sorgente .
Ecco come andrei su questo:
- Avvia un ascolto
ServerSocket
(probabilmente sulla porta 80). - Una volta ricevuta una richiesta di connessione, accetta e passa a un altro thread/processo (questo lascia il tuo
ServerSocket
disponibile per continuare ad ascoltare e accettare altre connessioni). - Analizza il testo della richiesta (in particolare, le intestazioni in cui vedrai se si tratta di un GET o POST e i parametri passati.
- Rispondi con le tue intestazioni (
Content-Type
, ecc.) e l'HTML.
Trovo è utile usare Firebug (in Firefox) per vedere esempi di intestazioni. Questo è ciò che vuoi emulare.
Prova questo link: - Server multithread in Java
Il più semplice è Semplice c'è un tutorial, nessun WEB-INF non Servlet API senza dipendenze. Solo un semplice server HTTP leggero in un unico BARATTOLO.
Se si utilizza Sun JDK è possibile utilizzare questa libreria integrata
Guardate questo sito su come utilizzare.
Se non ci sono diversi server HTTP Open Source qui che puoi incorporare nel tuo software.
Java 6 ha un server http incorporato predefinito.
A proposito, se si prevede di avere un servizio web rest, ecco un semplice esempio usando jersey.
Sono sorpreso che questo esempio non sia qui:
MODIFICA >> Il link qui sopra non è raggiungibile. Ecco un estratto dall'esempio POST seguito dal link agli esempi 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/
Ho scritto un tutorial che spiega come scrivere un semplice server HTTP un po ' di tempo fa in Java. Spiega cosa sta facendo il codice e perché il server è scritto in questo modo mentre il tutorial progredisce. Potrebbe essere utile http://kcd.sytes.net/articles/simple_web_server.php
Incorporare Tomcat è relativamente indolore come tali cose vanno. Ecco un buon riferimento StackOverflow su di esso.
Ho implementato un collegamento
NB per l'elaborazione di json, ho usato jackson. Puoi anche rimuoverlo, se hai bisogno di
Jetty è un ottimo modo per incorporare facilmente un server HTTP. Supporta il proprio modo semplice per collegare i gestori ed è un server di app J2EE completo se hai bisogno di più funzionalità.
Un contenitore servlet è sicuramente la strada da percorrere. Se Tomcat o Jetty sono troppo pesanti per te, considera Winstone o TTiny .
Undertow è un leggero non-blocking embedded web server che si può ottenere installato e funzionante molto rapidamente.
public static void main(String[] args) {
Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler((exchange) -> exchange.getResponseSender().send("hello world"))
.build().start();
}
Ho appena aggiunto un repository pubblico con un server pronto per l'esecuzione utilizzando Jetty e JDBC per avviare il progetto.
Estrai da github qui: https://github.com/waf04/WAF-Simple-JAVA-HTTP-MYSQL-Server.git