Frage

Ich möchte ein einfache P2P Test-App schreiben, die HTTP verwendet als zugrunde liegendes Protokoll.
Die App hat bei Bedarf entscheiden , wenn es sein sollte wirkt als HTTP-Server oder als HTTP-Client .

Die klassische Art und Weise, die ich bewusst bin, wäre die App auf die Bereitstellung einig vorhanden HTTP-Server. Aber das ist der falsche Weg für meine Absicht. Es hat die andere Art und Weise sein: der Server gestartet wird von der App (und nur wenn es entscheidet).

Gibt es eine Möglichkeit, den HTTP-Server-Teil auf Anfrage ausführen (Ohne den Einsatz der App selbst auf einem Server)?

Kann ich es durch die Verknüpfung von Glassfish oder Tomcat-Bibliotheken und rufen einige "main" Methode?

Edit: ES FUNKTIONIERT !!!
Ich jetzt versucht Jetty zusammen mit JAX-RS (Jersey) erfolgreich!
Vielen Dank an alle.

(die REST-Klasse ist trivial und links aus)

Paket 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();
  }
}
War es hilfreich?

Lösung

Sie können verwenden Jetty oder ein anderer integrierbare HTTP-Server. Vom Anlegesteg auf der Website:

  

Jetty ist ein Open-Source-Projekt ein HTTP-Server, HTTP-Client und javax.servlet Container bereitstellt. Diese 100% Java-Komponenten sind mit vollem Funktionsumfang, Standards, kleine Standfläche, bündig, asynchrone und Unternehmen skalierbar. Jetty ist dual unter der Apache-Lizenz 2.0 und / oder Eclipse Public License 1.0. Jetty ist frei für die kommerzielle Nutzung und Verteilung unter den Bedingungen einer dieser Lizenzen.

Andere Tipps

Neben den anderen Antworten gibt es auch NanoHTTPD . Es ist sehr klein, in nur eine Klasse und vielleicht das Richtige, wenn yout wollen nicht mehr brauchen oder einfach nur Dinge minimal zu halten.

einen Blick auf die Restlet Projekt. Sie bietet einen integrierbare, eigenständigen Server und einen Client, beide mit dem gleichen Java API (dem berühmten Uniform Interface).

Glassfish, Tomcat oder Servlet-API scheint ein wenig übertrieben zu mir zu sein. Mein 0,02 $:)

Bearbeiten

Client

 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 enthält einen integrierten Web-Server. Sie können es wie so verwenden:

    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();

Und dann Zugang http: // localhost:. 8000 Ihre Antwort sehen

Es gibt weitere Beispiele in der JavaDoc für die Httpserver Paket

Wenn Sie nicht 6 Java garantieren können, werfen Sie einen Blick auf

scroll top