当我尝试使用response.sendRedirect("/error.jsp")将我的servlet重定向到错误页面"error.jsp"时,它显示page错误,但当我将其更改为response.sendRedirect("error.jsp")时,它工作得很好!
为甚麽呢?为什么相对路径无效?error.jsp保存在WEB-CONTENT文件夹中。dispatcher.foreward(request,response)与相对url "/page01.jsp“一起工作得很好,即使page01.jsp和error.jsp都在同一个目录WEB-CONTENT中。请解释一下。
谢谢!
发布于 2013-01-12 17:54:34
如果您传递一个以'/‘开头的字符串来HttpServletResponse#sendRedirect,则路径将相对于服务器而不是您的应用程序。因此,您应该传递类似以下内容的内容以使其正常工作:
response.sendRedirect("/myapp/error.jsp");
发布于 2013-01-12 18:02:52
首先,让我们弄清楚一些词汇:
error.jsp和./../error.jsp是相对路径的示例,/app/page.html是绝对路径的示例
回到你的问题。当通过调用ServletContext.getRequestDispatcher(String)来使用RequestDispatcher时,您必须始终在您的web应用程序中前进,并且前导斜杠是必需的(粗体我的):
路径名必须以
/开头,并被解释为相对于当前上下文根。
因此,当您转发到/page01.jsp时,它被解释为:/your_context/page01.jsp,其中your_context是您的web应用程序的名称。
但是,当您将重定向发送到/error.jsp路径时,servlet容器只是将该地址在302响应中发送回浏览器。现在浏览器解释如下:请重定向到/error.jsp,这是当前服务器中的绝对路径。因此,即使浏览器指向http://example.com/foo/bar/servlet,此响应也会重定向到http://example.com/error.jsp。
然而,如果您只是简单地重定向到error.jsp,那么浏览器的行为就会大不相同。它将其解释为当前目录中的文件。因此,http://example.com/foo/bar/servlet将被重定向至http://example.com/foo/bar/error.jsp。这就是你看到的。
发布于 2013-01-12 18:04:48
尝试在web.xml中使用servlet映射,而不是使用名称调用文件,而只使用web.xml中定义的值进行调用。
https://stackoverflow.com/questions/14292156
复制相似问题