如何解决提交响应后无法调用sendRedirect()?

我正在尝试使用以下代码将值从servlet传递到jsp页面:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

PrintWriter out = response.getWriter();

try {

System.out.println("try");

String taskid=request.getParameter("id");

convty = new Connectivity();

con = convty.setConnection();

st=con.createStatement();

query="select * from task_table";

rset=convty.getResultSet(query, con);

while(rset.next()) {

System.out.println("while");

lst.add(rset.getString("task_id"));

lst.add(rset.getString("date"));

lst.add(rset.getString("project_name"));

}

rset.close();

System.out.println("after while");

} catch(Exception e) {

RequestDispatcher dd= request.getRequestDispatcher("error.jsp");

dd.forward(request, response);

} finally {

System.out.println("finally1");

HttpSession sessionvar = request.getSession();

sessionvar.setAttribute("TaskData", "lst");

response.sendRedirect("usertaskpage.jsp");

lst.clear();

out.close();

}

}

当我运行页面时,我得到:

java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed

org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:483)

src.Taskservlet.doPost(Taskservlet.java:108)

javax.servlet.http.HttpServlet.service(HttpServlet.java:647)

javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)

我尝试使用:

RequestDispatcher dd=request.getRequestDispatcher("usertaskpage.jsp");

dd.forward(request, response);

但是我遇到了同样的错误。

如何解决这个错误?

回答:

您已经在catch代码块中转发了响应:

RequestDispatcher dd = request.getRequestDispatcher("error.jsp");

dd.forward(request, response);

因此,您不能再次调用:

response.sendRedirect("usertaskpage.jsp");

因为它已经转发(提交)。

因此,您可以做的是:保留一个字符串以分配需要转发响应的位置。

    String page = "";

try {

} catch (Exception e) {

page = "error.jsp";

} finally {

page = "usertaskpage.jsp";

}

RequestDispatcher dd=request.getRequestDispatcher(page);

dd.forward(request, response);

以上是 如何解决提交响应后无法调用sendRedirect()? 的全部内容, 来源链接: utcz.com/qa/436498.html

回到顶部