Java : 내 앱에서 주문형 HTTP 서버를 실행합니까?
문제
나는 쓰고 싶다 간단한 P2P HTTP를 기본 프로토콜로 사용하는 테스트 앱.
앱이 필요합니다 요청을 결정하십시오, 그것이 a로 작용 해야하는 경우 HTTP 서버, 또는 a HTTP 클라이언트.
내가 알고있는 고전적인 방법은 일부에 앱을 배포하는 것입니다. 기존의 HTTP 서버. 그러나 이것은 내 의도에 대한 잘못된 방법입니다. 다른 방법이어야합니다. 서버는 앱에 의해 시작됩니다 (그리고 결정된 경우에만).
HTTP 서버 부품을 실행하는 방법이 있습니까? 주문형(서버에서 앱 자체를 배포하지 않고)?
Glassfish 또는 Tomcat 라이브러리를 연결하여 "메인"방법을 호출하여 할 수 있습니까?
편집 : 작동합니다 !!!
나는 지금 시도했다 둑 와 함께 Jax-Rs (저지) 성공적으로!
모두 감사합니다.
(나머지 클래스는 사소하고 제외)
패키지 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 서버. Jetty의 웹 사이트에서 :
Jetty는 HTTP 서버, HTTP 클라이언트 및 Javax.servlet 컨테이너를 제공하는 오픈 소스 프로젝트입니다. 이 100% Java 구성 요소는 완전한 기능, 표준 기반, 소형 발자국, 임베드 가능, 비동기 및 엔터프라이즈 확장 가능입니다. Jetty는 Apache 라이센스 2.0 및/또는 Eclipse Public License 1.0에 따라 이중 라이센스가 있습니다. Jetty는 해당 라이센스 중 하나의 조건에 따라 상업용 사용 및 배포에 무료입니다.
다른 팁
다른 대답 외에도 거기에도 있습니다 Nanohttpd. 하나의 수업만으로도 아주 작고 아마도 더 많은 것을 필요로하지 않거나 물건을 최소화하고 싶다면 옳은 일입니다.
살펴보십시오 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에는 내장 된 웹 서버가 포함되어 있습니다. 당신은 그렇게 사용할 수 있습니다 :
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 패키지
Java 6을 보장 할 수 없다면 살펴보십시오. 부두 6 쉽고 상당히 전등입니다. 즉, 전체 웹 앱이 필요하지 않습니다.