如何解决提交响应后无法调用sendRedirect()的问题? [英] how to fix Cannot call sendRedirect() after the response has been committed?
本文介绍了如何解决提交响应后无法调用sendRedirect()的问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用以下代码将值从servlet传递到jsp页面:
I am trying to pass values from servlet to jsp page using the code below:
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);
但是我遇到了同样的错误.
but I got the same error.
如何解决此错误?
推荐答案
您已经在catch块中转发了响应:
you have already forwarded the response in catch block:
RequestDispatcher dd = request.getRequestDispatcher("error.jsp");
dd.forward(request, response);
因此,您不能再次调用:
so, you can not again call the :
response.sendRedirect("usertaskpage.jsp");
因为它已经转发(提交).
because it is already forwarded (committed).
所以您可以做的是: 保留一个字符串以分配您需要转发响应的位置.
So what you can do is: keep a string to assign where you need to forward the response.
String page = "";
try {
} catch (Exception e) {
page = "error.jsp";
} finally {
page = "usertaskpage.jsp";
}
RequestDispatcher dd=request.getRequestDispatcher(page);
dd.forward(request, response);
这篇关于如何解决提交响应后无法调用sendRedirect()的问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文