重定向调用不在servlet中工作

Vis*_*and 2 redirect jsp

当我尝试将我的重定向servlet到错误页面"error.jsp"使用response.sendRedirect("/error.jsp")它显示页面未找到错误但当我将其更改为response.sendRedirect("error.jsp")时,它工作正常!

为什么会这样?为什么相对路径不起作用?error.jsp保存在WEB-CONTENT文件夹中.的dispatcher.foreward(request,response),正常工作与相对URL"/page01.jsp",即使两者page01.jsperror.jsp在同一目录下WEB-CONTENT.请解释.

谢谢!

Tom*_*icz 8

首先让我们清楚一些词汇:

  • error.jsp并且./../error.jsp相对路径的示例

  • /page01.jsp并且/app/page.html绝对路径的例子

回到你的问题.RequestDispatcher通过调用使用时,ServletContext.getRequestDispatcher(String)必须始终在Web应用程序中转发,并且必须使用前导斜杠(粗体):

路径名必须以a开头,/并且被解释为相对于当前上下文根.

因此,当您转发到/page01.jsp它时,它被解释为:您的Web应用程序的名称/your_context/page01.jsp在哪里your_context.

但是,当您将重定向发送到/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.这就是你所看到的.