首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重定向调用在servlet中不起作用

重定向调用在servlet中不起作用
EN

Stack Overflow用户
提问于 2013-01-12 17:50:11
回答 4查看 5K关注 0票数 2

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

为甚麽呢?为什么相对路径无效?error.jsp保存在WEB-CONTENT文件夹中。dispatcher.foreward(request,response)与相对url "/page01.jsp“一起工作得很好,即使page01.jsperror.jsp都在同一个目录WEB-CONTENT中。请解释一下。

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-12 17:54:34

如果您传递一个以'/‘开头的字符串来HttpServletResponse#sendRedirect,则路径将相对于服务器而不是您的应用程序。因此,您应该传递类似以下内容的内容以使其正常工作:

response.sendRedirect("/myapp/error.jsp");

票数 1
EN

Stack Overflow用户

发布于 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。这就是你看到的。

票数 8
EN

Stack Overflow用户

发布于 2013-01-12 18:04:48

尝试在web.xml中使用servlet映射,而不是使用名称调用文件,而只使用web.xml中定义的值进行调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14292156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档