Domanda

Voglio scrivere un P2P semplice APP TEST che utilizza HTTP come protocollo sottostante.
L'app deve decidere su richiesta, se dovesse fungere da serverHTTP, o come a Cliente HTTP.

Il modo classico di cui sono a conoscenza, sarebbe quello di distribuire l'app su alcuni esistente serverHTTP.Ma questo è il modo sbagliato per la mia intenzione.Deve essere il contrario:Il server viene avviato dall'app (e solo se decide).

Esiste un modo per eseguire la parte del server HTTP su richiesta(senza distribuire l'app stessa su un server)?

Posso farlo collegando le librerie di pesce vetro o tomcat e chiamare un metodo "principale"?

Modificare:FUNZIONA!!!
Adesso ci ho provato Molo insieme a JAX-RS (maglia) con successo!
Grazie a tutti.

(la classe REST è banale e lasciata fuori)

pacchetto my.p2p;

import com.sun.jersey.spi.container.servlet.*;
import org.mortbay.jetty.*;
import org.mortbay.jetty.servlet.*;

public class Main {
  public static void main(String[] args)
      throws Exception {

    ServletHolder holder = new ServletHolder(ServletContainer.class);

    holder.setInitParameter("com.sun.jersey.config.property.resourceConfigClass",
      "com.sun.jersey.api.core.PackagesResourceConfig");
    holder.setInitParameter("com.sun.jersey.config.property.packages", "my.p2p.rest");

    Server server = new Server(8000);

    Context context = new Context(server, "/", Context.SESSIONS);
    context.addServlet(holder, "/*");
    server.start();
  }
}
È stato utile?

Soluzione

Puoi usare Molo o qualche altro server HTTP incorporabile.Dal sito web di Jetty:

Jetty è un progetto open source che fornisce un server HTTP, un client HTTP e un contenitore javax.servlet.Questi componenti Java al 100% sono completi di funzionalità, basati su standard, di ingombro ridotto, integrabili, asincroni e scalabili a livello aziendale.Jetty dispone di doppia licenza Apache License 2.0 e/o Eclipse Public License 1.0.Jetty è gratuito per uso commerciale e distribuzione secondo i termini di entrambe le licenze.

Altri suggerimenti

Oltre alle altre risposte c'è anche NanoHTTPD.È molto piccolo, in una sola lezione e forse la cosa giusta se non ti serve altro o vuoi semplicemente mantenere le cose al minimo.

dai un'occhiata a restlet progetto.Forniscono un server autonomo e incorporabile e un client, entrambi utilizzando la stessa API Java (la famosa Uniform Interface).

Glassfish, Tomcat o l'API servlet mi sembrano un po' eccessivi.I miei 0,02 $ :)

MODIFICARE

Cliente

 Client client = new Client(Protocol.HTTP);  
 client.get("http://127.0.0.1").getEntity().write(System.out);  

server

Restlet sayHello = new Restlet() {  
    @Override  
    public void handle(Request request, Response response) {  
        response.setEntity("Hello World!", MediaType.TEXT_PLAIN);  
    }  
};  

new Server(Protocol.HTTP, 80, sayHello).start();  

Java 6 include un server Web integrato.Puoi usarlo in questo modo:

    HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
    server.createContext("/", new HttpHandler() {
        @Override
        public void handle(HttpExchange xchange) throws IOException {
            String response = "This is the response";
            xchange.sendResponseHeaders(200, response.length());
            OutputStream os = xchange.getResponseBody();
            os.write(response.getBytes());
            os.close();
        }
    });
    server.setExecutor(null);
    server.start();

E poi accedi http://localhost:8000 per vedere la tua risposta.

Ci sono altri esempi nel JavaDoc per il Pacchetto HTTPServer

Se non puoi garantire Java 6, dai un'occhiata a incorporando Jetty 6 che è facile e abbastanza leggero, cioènon hai bisogno di un'intera webapp.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top