使用/ * servlet映射

时间:2016-01-11 11:03:18

标签: java jsp servlets

这与此question几乎完全相同,但解决方案对我的servlet映射不起作用。

假设我有一个映射到/*的servlet,因此所有请求都被分派到该servlet。现在对于某些请求,我想要包含一个JSP页面WEB-INF/mypage.jsp
规范的解决方案是使用RequestDispatcher并包含JSP页面:

@WebServlet(value = "/*")
public class MyServlet extends HttpServlet
{
    private RequestDispatcher dispatcher_;

    public void init() throws ServletException {
        dispatcher_ = getServletContext().getRequestDispatcher("/WEB-INF/mypage.jsp");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        // include the jsp page for some requests
        dispatcher_.include(request, response);
    }
}

不幸的是,由于映射/*优先于JSP servlet的映射*.jsp,因此调度将路由到MyServlet,从而导致无限递归

请注意,如果将servlet映射为默认servlet(使用映射/),则不会发生此调度问题。不幸的是,在我的特殊情况下,我无法使用默认的servlet映射。

那么有没有其他方法可以在与/*映射的servlet中包含JSP页面?

1 个答案:

答案 0 :(得分:0)

  1. 以' /'开头的字符串字符以' / *'结尾后缀用于路径映射。
  2. 以' *开头的字符串。' prefix用作扩展映射。
  3. 仅包含' /'的字符串字符表示"默认"应用程序的servlet。在这种情况下,servlet路径是请求URI减去上下文路径,路径信息为空。
  4. 所有其他字符串仅用于完全匹配。