嵌入式Jetty与WebAppContext和ServletContextHandler以及其他处理程序

时间:2015-01-22 11:01:40

标签: java servlets web-applications embedded-jetty

我在我的java应用程序中使用嵌入式Jetty服务器。我想同时动态地在嵌入式jetty服务器中使用Web应用程序(war文件)和Servlet。为此我使用jetty库中提供的WebAppContext和ServletContextHandler。一旦服务器启动,只能通过浏览器访问servlet。任何人都可以一次性使用这两种方法吗?

除了上述两项,我还想添加WebSocketHandler,CometDServlet和其他静态网站。感谢是否有人能告诉我这样做的正确方法。

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class JettyTest {
public static void main(String[] args) throws Exception {
    Server server = new Server(8081);

    ContextHandlerCollection contexts = new ContextHandlerCollection();

    ServletContextHandler main = new ServletContextHandler(server, "/", true, false);

    main.addServlet(new ServletHolder(new HttpServlet() {

        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
            resp.getWriter().write("main");
        }
    }), "/main");

    WebAppContext webAppContext = new WebAppContext("test.war", "/test");

    contexts.addHandler(webAppContext);
    contexts.addHandler(main);
    server.setHandler(contexts);

    server.start();
    server.join();
}

}

1 个答案:

答案 0 :(得分:0)

我知道这是一个迟到的帖子。但我有同样的问题,我找到了答案,所以我想与可能正在搜索的任何人分享。答案很简单: 只需将servlet添加到WebAppContext。

public class JettyTest {
public static void main(String[] args) throws Exception {
    Server server = new Server(8081);

    ContextHandlerCollection contexts = new ContextHandlerCollection();



    ServletHolder mainHolder = new ServletHolder(new HttpServlet() {

        private static final long serialVersionUID = 1L;

        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
                throws ServletException, IOException {
            resp.getWriter().write("main");
        }
    });

    WebAppContext webAppContext = new WebAppContext("test.war", "/test");
    webAppContext.addServlet(mainHolder, "/main");

    server.setHandler(webAppContext);

    server.start();
    server.join();
}

现在可以在anydomain中找到servlet:8081 / test / main。 我不知道如何获得' / main'在根下:)