Servlets 在运行时映射servlet

Servlets 在运行时映射servlet,servlets,Servlets,我需要在运行时映射一个servlet。有没有做这件事的方法?我在servletContext接口中看到了一个名为addServlet的方法。但是我找不到访问它的方法。我认为唯一的方法是使用一个过滤器,然后根据请求URL,加载servlet并直接调用它,而不是使用chain.doFilter(req,resp)如果您有身份验证筛选器;请确保在web.xml的下方添加此新过滤器,这样您就不会意外忘记进行身份验证 这里有一个图书馆可以帮助您: 这个过滤器的工作原理与我描述的基本相同 说实话;我认为你应

我需要在运行时映射一个servlet。有没有做这件事的方法?我在
servletContext
接口中看到了一个名为
addServlet
的方法。但是我找不到访问它的方法。

我认为唯一的方法是使用一个过滤器,然后根据请求URL,加载servlet并直接调用它,而不是使用
chain.doFilter(req,resp)如果您有身份验证筛选器;请确保在web.xml的下方添加此新过滤器,这样您就不会意外忘记进行身份验证

这里有一个图书馆可以帮助您:

这个过滤器的工作原理与我描述的基本相同


说实话;我认为你应该重新评估你为什么要这么做。您可能不需要这样做,如果您仔细考虑一下,您可能会找到一种方法,使用web.xml中良好的ole静态servlet映射来解决您遇到的任何问题。不过,这是您自己的决定。

您可以在Servlet 3.0的运行时动态添加Servlet。正如您所发现的,您确实需要访问
ServletContext
才能做到这一点。
ServletContext
可从大多数web组件(如servlet或侦听器)获得。我不确定您这样做的用例,但这里有几个示例,您可以在其中访问ServletContext,以便在运行时添加web组件-

public class MyServlet extends HttpServlet {

    public void init(ServletConfig config) throws ServletException {
        config.getServletContext().addServlet(...);
    }

    . . .
}

public class MyListener implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent sce) {
        sce.getServletContext().addServlet(...);
    }

    public void contextInitialized(ServletContextEvent sce) {}

}

看看(MVC)前端控制器模式。这样,您就可以得到一个servlet。有这样的框架(JSF、Struts、SpringMVC、Wicket、Stripes、Play等)。详细的工作说明可以在这里找到:。谢谢,这是我一直在寻找的。在没有servlet 3.0的情况下,有什么方法可以做到这一点吗?servlet 3.0之前没有类似的方法。然而,可能有一些容器专有的方法。在Servlet3.0之前,Jetty可能已经允许动态servlet注册。