我想写一个 简单的P2P 使用HTTP作为基础协议的测试应用程序。
该应用程序必须 按需决定, ,如果应该充当 HTTP服务器, ,或作为 HTTP客户端.

我知道的经典方式是将应用程序部署在某些 现存的 HTTP 服务器。但这对于我的意图来说是错误的。它必须是另一种方式:该服务器由应用程序启动(并且仅在决定之前)。

有没有办法执行HTTP服务器部分 一经请求(无需在服务器上部署应用程序本身)?

我可以通过链接玻璃鱼或tomcat库并调用一些“主要”方法来做到这一点吗?

编辑:有用!!!
我现在尝试了 码头 随着 JAX-RS(泽西岛) 成功地!
谢谢你们。

(REST 类很琐碎并且被忽略)

打包 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();
  }
}
有帮助吗?

解决方案

您可以使用码头或一些其它可嵌入的HTTP服务器。从码头的网站:

  

码头是提供一个HTTP服务器,HTTP客户端和容器的javax.servlet一个开源项目。这些100%Java组件是全功能的,基于标准的,小脚印,嵌入,异步和企业可扩展性。码头是在Apache许可证2.0下双许可和/或蚀公共许可证1.0。码头是自由下的任一那些许可证的条款商业使用和分配。

其他提示

除了其他的答案也存在 NanoHTTPD 。它非常的小,在短短的一类,也许是正确的事情,如果YOUT不需要更多的还是只想让事情变得微乎其微。

看看在的Restlet 项目。它们提供了一个嵌入的,独立的服务器和客户机,两者使用相同的Java API(著名的统一接口)。

Glassfish的,Tomcat或servlet的API似乎有点矫枉过正了我。我的0.02 $:)

修改

客户端

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

服务器

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 包含一个内置的 Web 服务器。你可以像这样使用它:

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

然后访问 http://本地主机:8000 查看您的回复。

JavaDoc 中有更多示例 Http服务器包

如果你不能保证 Java 6,请看一下 嵌入 Jetty 6 这是简单且相当轻量级的,即你不需要一个完整的网络应用程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top