当前位置: 首页 > 面试题库 >

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

鞠侯林
2023-03-14
问题内容

我正在尝试使用以下代码将值从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);


 类似资料:
  • 当我尝试使用Spring boot和Spring mvc下载压缩文件时,出现了一个错误: null 基本上,我的应用程序是加载一个文件,压缩它并下载新的压缩文件。 这是我的应用程序控制器: 如果我关闭输入和输出流,我不知道为什么会发生这种情况。

  • 在我的应用程序中执行一些操作时,我得到了 Java . lang . illegalstateexception无法调用sendError() 当我再次重新加载页面时,它会正常工作一段时间,但一段时间后它再次显示相同的异常。我如何克服这个异常? 以下是例外: 支柱.xml

  • 你好,Hibernate和Jackson有问题。有两个POJO 为Spring Security集成而设计的用户及其角色。 还有一个控制器,通过Jackson从用户Json生成。With方法 当此方法返回不带null字段的用户时,将抛出: 当我添加@OneTo很多时,这个问题就出现了(mep dBy="user", cascade=CascadeType. ALL, fetch=FetchType

  • 我知道这里已经讨论过至少一百万次了,但是每个servlet在调用forward()之前都会重定向或刷新输出。我有同样的问题,但我没有做任何与输出。我的servlet只接受请求参数并提交到数据库,并在请求上设置一个属性。然后,它将请求转发给jsp,jsp显示属性。我在Tomcat7上使用Servlet3.0。下面是我的servlet doPost方法,后面是转发到的jsp: JSP: 我相信我可能错

  • 我使用过滤器来确定请求的页面是否具有有效的会话。 这是我的密码<代码>网络。xml: 过滤器类别: 我有一个登录页面,用于检查用户是否有效。如果用户有效,则将控制转移到此servlet。 这在没有过滤器的情况下可以工作,但是当我将控件转发到“//showuserImages.jsp”时,过滤器会显示一个错误。

  • 本文向大家介绍Android应用中clearFocus方法调用无效的问题解决,包括了Android应用中clearFocus方法调用无效的问题解决的使用技巧和注意事项,需要的朋友参考一下 clearFocus 无效? EditText在focus与非focus的时候,显示效果是不同的:focus的时候光标是闪的,而且我们通常也会给它设置selector,focus的时候给它加上边框之类的. 通常当