Pregunta

quiero escribir un P2P sencillo Aplicación de prueba que utiliza HTTP como protocolo subyacente.
La aplicación tiene que decidir sobre la demanda, si fuera actuar como un servidor HTTP, o como un cliente HTTP.

La forma clásica que conozco sería implementar la aplicación en algunos existente Servidor HTTP.Pero este es el camino equivocado para mi intención.Tiene que ser al revés:La aplicación inicia el servidor (y solo si decide).

¿Hay alguna manera de ejecutar la parte del servidor HTTP? Bajo demanda(sin implementar la aplicación en un servidor)?

¿Puedo hacerlo vinculando las bibliotecas de peces de vidrio o Tomcat y llamar a algún método "principal"?

Editar:¡¡¡FUNCIONA!!!
ahora lo intenté Embarcadero junto con JAX-RS (Jersey) ¡exitosamente!
Gracias a todos.

(la clase REST es trivial y se omite)

empaquetar mi.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();
  }
}
¿Fue útil?

Solución

Es posible usar embarcadero o algún otro servidor HTTP integrable. Desde el sitio web del embarcadero:

  

embarcadero es un proyecto de código abierto que proporciona un servidor HTTP, cliente HTTP y el contenedor javax.servlet. Estos componentes son 100% Java con todas las funciones, basadas en estándares, huella pequeña, integrable, asíncrono y de la empresa escalable. Jetty es doble licenciado bajo la licencia Apache 2.0 y / o Eclipse Public License 1.0. Embarcadero es gratuito para uso comercial y de distribución bajo los términos de cualquiera de esas licencias.

Otros consejos

Al lado de las otras respuestas también hay NanoHTTPD . Es muy pequeño, en una sola clase y tal vez lo correcto si yout no necesitan más o simplemente quieren mantener las cosas mínimas.

echar un vistazo al proyecto Restlet . Se proporciona una, servidor integrable independiente, y un cliente, tanto usando el mismo API de Java (la famosa interfaz uniforme).

Glassfish, Tomcat o API servlet parece ser un poco exagerado para mí. Mi 0,02 $:)

Editar

Cliente

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

Servidor

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 incluye un servidor web integrado.Puedes usarlo así:

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

Y luego acceder http://localhost:8000 para ver tu respuesta.

Hay más ejemplos en el JavaDoc para el Paquete HTTPServer

Si no puede garantizar Java 6, eche un vistazo a incrustación de embarcadero 6 que es fácil y bastante ligero, es decir.No necesitas una aplicación web completa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top