[英]sendRedirect() doens't work
我在这个论坛上寻找解决方案,但我找不到任何适合我的问题。
我有一个非常简化的代码
一个jsp页面
<html>
<body>
<jsp:include page="/servletName"/>
</body>
</html>
和一个servlet
@WebServlet("/servletName")
public class reindirizzaController extends HttpServlet {
private static final long serialVersionUID = 1L;
public reindirizzaController() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String redirectURL = "http://www.google.it";
response.sendRedirect(redirectURL);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
没有重定向。 我被困在jsp页面中,我没有得到任何错误。 我也尝试添加return;
回应后。
由于您通过Include
调用servlet,因此它不会使您重定向。 它完全忽略了。
来自include()
文档
包括响应中的资源(servlet,JSP页面,HTML文件)的内容。 从本质上讲,这种方法可以实现程序化服务器端包含。
ServletResponse对象的路径元素和参数与调用者保持不变。 包含的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();">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.