我想写一个简单的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();
}
}
答案 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,这很容易且相当轻松,即您不需要整个网络应用程序。