我尝试通过这种方式设置默认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。
答案 0 :(得分:1)
问题发生是因为默认的servlet将URI映射到静态路径,如果它没有映射到任何servlet,但我所做的是重新定义默认的servlet,所以当我重定向到/asd/ind.html并且这个URI是没有映射到任何servlet,默认的serlvet被调用,在这种情况下,默认的是GreetingServlet,这会导致无限循环。