[英]How to dynamically add and remove servlets within a servlet context in Jetty 9.4.x?
[英]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.