Java:从我的应用程序按需运行HTTP服务器?

时间:2009-04-19 21:39:42

标签: java http java-ee p2p

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

我所知道的经典方式是部署应用程序 一些现有的 HTTP服务器。但这是我的意图错误的方式。 它必须是另一种方式:服务器由应用程序启动(仅限 如果它决定)。

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

我可以通过链接Glassfish或Tomcat库来实现 并称之为“主要”方法?

编辑:IT工作!!!
我现在已成功尝试 Jetty 以及 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();
  }
}

4 个答案:

答案 0 :(得分:2)

除了其他答案,还有NanoHTTPD。它非常小,只有一个类,如果你不需要更多或者只是想保持最小化,也许是正确的。

答案 1 :(得分:2)

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

  

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

答案 2 :(得分: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();  

答案 3 :(得分: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以查看您的回复。

JavaDoc中有更多HttpServer package

的例子

如果您不能保证Java 6,请查看embedding Jetty 6,这很容易且相当轻松,即您不需要整个网络应用程序。