Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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 sendRedirect()doens';行不通_Java_Jsp_Servlets - Fatal编程技术网

Java sendRedirect()doens';行不通

Java sendRedirect()doens';行不通,java,jsp,servlets,Java,Jsp,Servlets,我在这个论坛上寻找解决方案,但没有找到任何适合我的问题的方法 我有一个非常简单的代码 jsp页面 <html> <body> <jsp:include page="/servletName"/> </body> </html> 不执行重定向。我被困在jsp页面中,没有得到任何错误。我还尝试添加return在响应之后。因为您是通过包含调用servlet的,所以它不会使您重定向。它完全忽略了这一点 来自 在响应中包含资源的内容(servl

我在这个论坛上寻找解决方案,但没有找到任何适合我的问题的方法

我有一个非常简单的代码

jsp页面

<html>
<body>
<jsp:include page="/servletName"/>
</body>
</html>

不执行重定向。我被困在jsp页面中,没有得到任何错误。我还尝试添加
return在响应之后。

因为您是通过
包含调用servlet的,所以它不会使您重定向。它完全忽略了这一点

来自

在响应中包含资源的内容(servlet、JSP页面、HTML文件)。本质上,此方法支持编程服务器端包含

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


首先,从jsp调用servlet是一种不好的做法。当您使用
@WebServlet(“/servletName”)
时,您可以直接在
http://host/context/servletName

如果确实需要从jsp调用它,那么必须转发到servlet,而不是像Suresh Atta解释的那样包含它。因此,您应该使用:

<jsp:forward page="/servletName"/>

当您执行JSP include指令时,您实际上是在将包含的代码直接映射到页面上。在您的示例中,您将在JSP中执行sendRedirect。即使你得到了奇迹般的重定向,你也会得到一个错误,说你的响应已经提交了。这是因为当浏览器加载JSP时,它已经在读取服务器的响应了。服务器已在向浏览器发送响应时,无法发送其他响应

实现这一点的一种方法是,不执行include指令,而是创建一个以servlet路径作为操作的表单。比如:

<form name="someForm" action="/servletPath/servletName">
    <!-- some stuff here if you want -->
</form>

然后在您的body标签中,让其在加载时提交表单:

<body onLoad="document.someForm.submit();">

重定向是通过响应头处理的-它只能在响应体中写入任何输出之前发生。在响应主体启动后,任何重定向操作都将被忽略。为什么您希望包含google而不是提供指向google的链接?
<body onLoad="document.someForm.submit();">