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