繁体   English   中英

sendRedirect()不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM