首页 文章

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

提问于
浏览
2

我在我的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

    我知道这是一个迟到的帖子 . 但我有同样的问题,我找到了答案,所以我想与可能正在搜索的任何人分享 . 答案很简单:只需将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();
    }
    

    现在servlet可以在任何域中找到:8081 / test / main . 我不知道如何在root下获得'/ main':)

相关问题