我需要在运行时中映射servlet。无论如何做到了吗?我在addServlet
接口中看到了一个名为servletContext
的方法。但是我找不到办法来访问它。
答案 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的问题的方法。那个决定是你的决定。