【问题标题】:Embedded Jetty with WebAppContext and ServletContextHandler and other Handlers带有 WebAppContext 和 ServletContextHandler 以及其他处理程序的嵌入式 Jetty
【发布时间】:2015-03-21 03:32:36
【问题描述】:

我在我的 java 应用程序中使用嵌入式 Jetty 服务器。我想同时在嵌入式码头服务器中动态使用 Web 应用程序(war 文件)和 Servlet。为此,我正在使用码头库中提供的 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();
}

}

【问题讨论】:

    标签: java servlets web-applications embedded-jetty


    【解决方案1】:

    我知道这是一个迟到的帖子。但我有同样的问题,我找到了答案,所以我想与任何可能正在搜索的人分享。答案很简单: 只需将 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:8081/test/main 中找到 servlet。 我不知道如何在 root 下获取 '/main' :)

    【讨论】:

      猜你喜欢
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 2012-03-12
      • 2011-06-27
      • 2015-08-24
      相关资源
      最近更新 更多