设置默认servlet

时间:2016-03-07 10:54:24

标签: java servlets

我尝试通过这种方式设置默认servlet:

@WebServlet({"/abc", "","/"})
public class GreetingServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
        getServletContext().getRequestDispatcher("/asd/ind.html").forward(request,response);
    }

    @Override
    public String getServletInfo() {
        return "The Hello servlet says hello.";

    }
}

文件/asd/ind.html存在,当我删除“/”时:

@WebServlet({"/abc", ""})

当我点击时,重定向工作正常:

  

的contextPath / ABC   的contextPath /   的contextPath

但是用“/”之类的

@WebServlet({"/abc", "","/"})

事实证明

  

javax.servlet.ServletException:AS-WEB-CORE-00089

当我点击任何网址时,甚至是之前的网址。

有人可以给我一个解释吗? “/”应该使servlet成为默认值,这意味着任何未映射的URL都应该重定向到GreetingServlet。

1 个答案:

答案 0 :(得分:1)

问题发生是因为默认的servlet将URI映射到静态路径,如果它没有映射到任何servlet,但我所做的是重新定义默认的servlet,所以当我重定向到/asd/ind.html并且这个URI是没有映射到任何servlet,默认的serlvet被调用,在这种情况下,默认的是GreetingServlet,这会导致无限循环。