Question

Je veux écrire une application de test P2P simple, qui utilise HTTP protocole sous-jacent.
L'application doit décider de la demande , si elle agir en tant que serveur HTTP , ou en tant que client HTTP .

La façon classique que je suis au courant, serait de déployer l'application sur certains HTTP existant serveur. Mais c'est la mauvaise voie à mon intention. Il doit être dans l'autre sens: le serveur est démarré par l'application (et seulement si elle décide).

Y at-il un moyen d'exécuter la partie serveur HTTP sur demande (Sans déployer l'application elle-même sur un serveur)?

Puis-je le faire en reliant les bibliothèques Glassfish ou Tomcat et appeler une méthode « principale »?

Edit: ÇA MARCHE !!! Je maintenant essayé Jetty avec JAX-RS (Jersey) avec succès!
Merci à vous tous.

(la classe REST est trivial et omis)

paquet

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();
  }
}
Était-ce utile?

La solution

Vous pouvez utiliser Jetty ou un autre serveur HTTP intégrable. Sur le site web de la jetée:

  

Ponton est un projet open-source fournissant un serveur HTTP, client HTTP et contenant javax.servlet. Ces composants 100% java sont en fonctions, tout à base de normes, faible encombrement, intégrable, asynchrone et entreprise évolutive. Jetty est double sous licence Apache 2.0 et / ou Eclipse Public License 1.0. Jetty est gratuit pour une utilisation commerciale et de la distribution aux termes de l'une de ces licences.

Autres conseils

à côté des autres réponses il y a aussi NanoHTTPD . Il est très petit, en une seule classe et peut-être la bonne chose si yout ne pas besoin de plus ou tout simplement veulent garder les choses minimum.

jeter un oeil au projet Restlet . Ils fournissent un serveur autonome intégrable, et un client, à la fois en utilisant la même API Java (la fameuse interface uniforme).

Glassfish, Tomcat ou API Servlet semble être un peu exagéré pour moi. Mon 0,02 $:)

EDIT

Client

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

Serveur

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 intègre un serveur Web. Vous pouvez l'utiliser comme ceci:

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

Et puis l'accès http: // localhost:. 8000 pour voir votre réponse

Il y a d'autres exemples dans le JavaDoc pour le package HttpServer nofollow noreferrer

Si vous ne pouvez pas garantir Java 6, jetez un oeil à

scroll top