繁体   English   中英

Jetty 9.4:如何为同一个 pathSpec 配置多个 servlet?

[英]Jetty 9.4: How to configure multiple servlets for the same pathSpec?

在我的带有嵌入式 Jetty 的 Java 应用程序中,我配置了两个 HttpServlet,比如 Test1 和 Test2,我想根据应用程序的状态为其中一个提供服务。

为了模拟状态,我在测试页面上配置了一个带有 2 个按钮的表单:

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        resp.setStatus(HttpServletResponse.SC_OK);
        PrintWriter out = resp.getWriter();
        out.println("<h1>Test</h1>");
        out.println("<form action=\"\" method=\"post\">\n");
        out.println("<input type=\"submit\" name=\"test1\" value=\"test1\" /><br><br>");
        out.println("<input type=\"submit\" name=\"test2\" value=\"test2\" /><br><br>");
        out.println("</form>");
    }

并且更改在 post 中完成(Main.handler 是配置的 ServletContextHandler):

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        if (req.getParameter("test1") != null) {
            Main.handler.addServlet(Test1.class, "/test");
            resp.sendRedirect("/test");
            return;
        }
        if (req.getParameter("test2") != null) {
            Main.handler.addServlet(Test2.class, "/test");
            resp.sendRedirect("/test");
            return;
        }
        resp.sendRedirect("/");
    }

在第一次尝试按钮时,会添加并提供正确的 servlet。 但是当返回到测试页面并选择另一个按钮甚至是同一个按钮时,会抛出一个异常:

java.lang.IllegalStateException: Multiple servlets map to path /test

如何为同一个 pathSpec 动态提供多个 servlet?

Servlet 规范不允许这样做。

您正在寻找的是控制器模式,其中您有一个 Servlet,它根据其他标准控制要执行的任务。

控制器模式是一种超级常见的模式,用于大型项目,如 Spring、Dropwizard、Struts 等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM