Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jsp中的response.sendRedirect():是否忽略include?_Java_Jsp_Redirect_Jspinclude - Fatal编程技术网

Java jsp中的response.sendRedirect():是否忽略include?

Java jsp中的response.sendRedirect():是否忽略include?,java,jsp,redirect,jspinclude,Java,Jsp,Redirect,Jspinclude,我有一个jsp文件,其中包括另一个jsp文件,用于检查一些值,例如: 在setup.jsp中,我有一些条件代码,用于确定会话中是否设置了一些所需的值,如果没有,则将它们重定向到不同的页面。或者至少应该是这样,但重定向似乎被忽视了 System.err.println("Redirecting!"); response.sendRedirect("http://www.google.com"); return; 我看到“重定向!”被记录到控制台,但页面继续并正常呈现。我让curl为我转储了头,

我有一个jsp文件,其中包括另一个jsp文件,用于检查一些值,例如:

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

System.err.println("Redirecting!");
response.sendRedirect("http://www.google.com");
return;
我看到“重定向!”被记录到控制台,但页面继续并正常呈现。我让curl为我转储了头,看到响应是HTTP/1.1200ok,所以它肯定没有发送302重定向

你知道问题出在哪里吗?我该如何解决

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

编辑2:我尝试在许多其他地方调用
response.sendRedirect()
,发现我可以在响应之前成功重定向。JSP内部的重定向似乎被忽略,如果我尝试在JSP之后立即重定向,则会出现非法状态异常,因为响应已经提交。

重定向头(我相信)需要位于页面顶部。查看HTML规范以供参考

你试过把它放在页面的最上面吗?代码示例将帮助我们调试…

封面下使用的
。单击链接以查看javadoc。以下是一段相关摘录(我的重点):

ServletResponse对象的path元素和参数与调用方的保持不变包含的servlet无法更改响应状态代码或设置标题;任何更改尝试都将被忽略。

基本上将HTTP响应状态设置为
302
,将HTTP
Location
头设置为目标URL。因此,它完全被忽视了


更深层次的问题是,您正在滥用JSP作为页面控制器/过滤器。实际上,您应该使用一个在JSP之前运行的普通或类。

有可能部分响应被发送到客户端,而重定向被忽略。重定向应该(几乎)是第一个被解析的东西。我必须把它放在一个更大的web应用程序结构中,所以当涉及到何时何地可以放置代码来执行重定向时,我的手被束缚住了。当我尝试重定向时,是否有一种方法可以测试响应是否已将内容发送回浏览器?当我被隐藏在jsp:includes中时,对于如何启动某种重定向,您有什么建议吗?我在调用redirect的位置添加了一条简单的out.println()消息,该输出显示在响应的任何其他输出之前。那么,我不应该被允许在那个时候重定向吗?好的,我发现response.isCommitted()是一种确定头是否已经被写入的方法。响应尚未提交,因此应该仍然可以重定向。不幸的是,由于我的客户端的隐私问题,我无法提供太多的代码片段。这是一个相当复杂的站点,包含多个级别的jsp:includes等。我已经验证了在我尝试重定向时没有发送状态代码或其他标题,因此它有效地位于“页面顶部”。我完全同意这种滥用,不幸的是,我被要求遵守一些非常严格的界限。谢谢你上面的文档片段,我不知道。