在我的web.xml中,我设置了一个像
这样的servlet<servlet>
<servlet-name>forward</servlet-name>
<servlet-class>test.Forward</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>forward</servlet-name>
<url-pattern>/f/*</url-pattern>
</servlet-mapping>
test.Forward#doGet
实现为
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.getRequestDispatcher("target.jsp").forward(req, resp);
}
访问 localhost:8080 / project / f / anypath 时,服务器因堆栈溢出错误而崩溃。
似乎RequestDispatcher#forward
向 /f/target.jsp 设置了另一个请求,然后再次调用test.Forward#doGet
,然后再次调用RequestDispatcher#forward
。我以某种方式误解了{{1}},我认为它只是渲染一个页面。
那么,有没有只提供JSP的方法?
答案 0 :(得分:1)
您的servlet路径是/ f / *,并且您正在重定向到该路径上的文件,很可能是无意中:
/f/target.jsp
因此,当您的servlet不断地一次又一次地调用自身时,这会创建一个无限循环。
如果你想重定向到JSP,我假设它位于另一个文件夹,如/jsp/target.jsp位置?如果是这样,那么请确保包含完整路径:
req.getRequestDispatcher("/jsp/target.jsp").forward(req, resp);
当您遗漏/
时,请求会相对于当前的requestURI转发。