当我尝试将我的重定向servlet到错误页面"error.jsp"使用response.sendRedirect("/error.jsp")它显示页面未找到错误但当我将其更改为response.sendRedirect("error.jsp")时,它工作正常!
为什么会这样?为什么相对路径不起作用?error.jsp保存在WEB-CONTENT文件夹中.的dispatcher.foreward(request,response),正常工作与相对URL"/page01.jsp",即使两者page01.jsp并error.jsp在同一目录下WEB-CONTENT.请解释.
谢谢!
首先让我们清楚一些词汇:
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.这就是你所看到的.
| 归档时间: |
|
| 查看次数: |
4589 次 |
| 最近记录: |