1

我想编写一个使用 HTTP 作为底层协议的简单 P2P测试应用程序。
应用程序必须根据需要决定是充当HTTP 服务器还是充当HTTP 客户端

我知道的经典方法是将应用程序部署在一些现有的HTTP 服务器上。但这对我的意图来说是错误的。它必须是另一种方式:服务器由应用程序启动(并且只有当它决定时)。

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

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

编辑:它工作!
我现在成功地尝试了JettyJAX-RS (Jersey)
谢谢你们。

(REST 类是微不足道的,被忽略了)

包我的.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();
  }
}
4

4 回答 4

2

除了其他答案之外,还有NanoHTTPD。它非常小,只有一堂课,如果您不需要更多或只是想保持最小化,这也许是正确的选择。

于 2009-04-19T21:49:14.837 回答
2

您可以使用Jetty或其他一些可嵌入的 HTTP 服务器。来自 Jetty 的网站:

Jetty 是一个提供 HTTP 服务器、HTTP 客户端和 javax.servlet 容器的开源项目。这些 100% java 组件功能齐全、基于标准、占用空间小、可嵌入、异步和企业可扩展。Jetty 在 Apache License 2.0 和/或 Eclipse Public License 1.0 下获得双重许可。根据任一许可条款,Jetty 可免费用于商业用途和分发。

于 2009-04-19T21:54:14.870 回答
1

看看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();  
于 2009-04-19T21:42:48.080 回答
0

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://localhost:8000以查看您的响应。

HttpServer 包的 JavaDoc 中有更多示例

如果你不能保证Java 6,看看embedding Jetty 6,它很简单而且相当轻巧,也就是说你不需要一个完整的webapp。

于 2009-04-19T22:43:36.203 回答