在运行时映射servlet

时间:2011-09-24 17:53:51

标签: servlets

我需要在运行时中映射servlet。无论如何做到了吗?我在addServlet接口中看到了一个名为servletContext的方法。但是我找不到办法来访问它。

2 个答案:

答案 0 :(得分:1)

您可以在Servlet 3.0中在运行时动态添加servlet。如您所见,您需要访问ServletContext才能执行此操作。大多数Web组件(例如servlet或侦听器)都可以使用ServletContext。我不确定你这样做的用例,但是这里有几个例子,你可以访问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) {}

}

答案 1 :(得分:0)

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

有一个图书馆可以帮助您解决此问题:http://code.google.com/p/urlrewritefilter/

这个过滤器的工作基本上与我所描述的一样。

说实话;我认为你应该重新评估你为什么要这样做。您可能不需要这样做,如果您考虑一下,您可以找到解决您在web.xml中使用良好的'ole static servlet-mappings的问题的方法。那个决定是你的决定。