加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 来自jsp的response.sendRedirect():include被忽略?

发布时间:2020-12-15 00:53:06 所属栏目:Java 来源:网络整理
导读:我有一个jsp文件,其中包含另一个jsp文件来检查一些值等等: jsp:include page =“setup.jsp”/ 在setup.jsp中,我有一些条件代码,用于确定是否在会话中设置了某些需要的值,如果没有,则将它们重定向到不同的页面.或者至少它应该是,但重定向似乎被忽略了. Syst
我有一个jsp文件,其中包含另一个jsp文件来检查一些值等等:

< jsp:include page =“setup.jsp”/>

在setup.jsp中,我有一些条件代码,用于确定是否在会话中设置了某些需要的值,如果没有,则将它们重定向到不同的页面.或者至少它应该是,但重定向似乎被忽略了.

System.err.println("Redirecting!");
response.sendRedirect("http://www.google.com");
return;

我看到“重定向!”登录到控制台,但页面继续并正常呈现.我有curl为我转储标题,并看到响应是HTTP / 1.1 200 OK所以它肯定不会发送302重定向.

知道问题是什么以及如何解决这个问题?

编辑:我已经确认我的回复尚未提交. response.isCommitted()返回false表示尚未发送状态代码和标头.

编辑2:我尝试在许多其他地方调用response.sendRedirect()并发现我可以在之前成功重定向. JSP中的重定向似乎被忽略了,如果我尝试在jsp之后重定向,那么我会得到一个非法的状态异常,因为响应已经被提交了.

解决方法

< jsp:include>使用封面 RequestDispatcher#include().单击链接以查看javadoc.这是相关的摘录(强调我的):

The ServletResponse object has its path elements and parameters remain unchanged from the caller’s. The included servlet cannot change the response status code or set headers; any attempt to make a change is ignored.

HttpServletResponse#sendRedirect()基本上将HTTP响应状态设置为302,将HTTP Location标头设置为目标URL.因此完全被忽视了.

更深层次的问题是您滥用JSP作为页面控制器/过滤器.实际上你应该使用普通的servlet或filter类,它在JSP之前运行很远.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读