【问题标题】:java.lang.IllegalStateException: Cannot forward after response has been committed while saving into mysql [duplicate]java.lang.IllegalStateException:在保存到mysql时提交响应后无法转发[重复]
【发布时间】:2016-06-22 11:27:04
【问题描述】:

我正在阅读教程并尝试使用 MySql 构建一个非常简单的 MVC Web 应用程序。我的 IDE 是 Eclipse。我想插入数据库,但我不知道问题来自我的 Servlet 或 JSP 我的想法不多了。有什么不对?。每件事似乎也很好。

servlet.java

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

    doGet(request, response);
    PrintWriter out = response.getWriter();
    UsersDAO dao =new UsersDAO(); // data access object
    String useraction = request.getParameter("useraction");

    String userId = request.getParameter("userId");
    String fullName =request.getParameter("fullName");
    String userName = request.getParameter("userName");
    String passWord = request.getParameter("passWord");
    String bankBranch = request.getParameter("bankBranch");
    String department = request.getParameter("department");
    String userPermission = request.getParameter("userPermission");
    String amtGroupID = request.getParameter("amtGroupID");
    String roleId = request.getParameter("roleId"); 
    String dateCreated = request.getParameter("dateCreated");

    if (useraction != null && useraction.equals("create")) {
        Users adduser =new Users(fullName,userName, passWord, bankBranch, department,0, dateCreated, 0);
        out.print("<p style=\"color:red\">User Added</p>");
        RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/system/registeruser.jsp");
        view.forward(request, response);
        dao.create(adduser);
    }else{
        out.print("<p style=\"color:red\">Sorry username or password error</p>");
        RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/system/registeruser.jsp");
        view.forward(request, response);
    }
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String action = request.getParameter("action");

        String path = request.getParameter("path");

        if (path != null && path.equals("register")) {
            RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/system/registeruser.jsp");
            view.forward(request, response);
        } else if (path != null && path.equals("usermang")) {
            RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/system/manageuser.jsp");
            view.forward(request, response);
        } else if (path != null && path.equals("return")) {
            RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/grcon/grcon.jsp");
            view.forward(request, response);
        } else if (action != null && action.equals("Login")) {
            RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/grcon/grcon.jsp");
            view.forward(request, response);
        } else if (path != null && path.equals("journal")) {
            RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/grcon/ejournal.jsp");
            view.forward(request, response);
        }else if (path != null && path.equals("recon")) {
            RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/grcon/reconcil.jsp");
            view.forward(request, response);
        }
        else {
            PrintWriter out = response.getWriter();
            out.print("Served at: " + request.getContextPath());
            RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/system/index.jsp");
            view.forward(request, response);
        }
}

JSP 代码

<% UsersDAO dao = new UsersDAO();%>
  <form  action="System" method="post" class="form-horizontal form-label-left" novalidate  >
    <span class="section">User Info</span>
      <div class="item form-group">
    <label class="control-label col-md-3 col-sm-3 col-xs-12"for="fullName">Full Name <span class="required">*</span>
    </label><div class="col-md-6 col-sm-6 col-xs-12">
    <input id="fullName" class="form-control col-md-7 col-xs-12"
    data-validate-length-range="6" data-validate-words="2"
    name="fullName" placeholder="both name(s) e.g Jon Doe"
    required="required" type="text" />
    </div>
    </div>
    <div class="item form-group">
    <label class="control-label col-md-3 col-sm-3 col-xs-12"for="userName">User Name <span class="required">*</span>
    </label>
    <div class="col-md-6 col-sm-6 col-xs-12">
    <input type="text" id="userName" name="userName"required="required" class="form-control col-md-7 col-xs-12" />
    </div>
    </div>
    <div class="item form-group">
    <label for="passWord" class="control-label col-md-3">Password</label>
    <div class="col-md-6 col-sm-6 col-xs-12">
     <input id="passWord" type="password" name="passWord"data-validate-length="6,10"
    class="form-control col-md-7 col-xs-12" required="required" />
     </div>
     </div>
 </form>

错误日志

SEVERE: Servlet.service() for servlet [controller.System] in context with path [/G-Recon] threw exception
java.lang.IllegalStateException: Cannot forward after response has been committed
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:327)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:317)
    at controller.System.doPost(System.java:92)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

【问题讨论】:

  • 只发布相关代码而不是全部。
  • 不一定是错的,但是为什么要调用doGet呢?通常 doPost 调用 doGet 或其他方式。如果您没有实现 doGet,请考虑将其删除。
  • 写完回复后无法转发

标签: java mysql jsp servlets model-view-controller


【解决方案1】:

改变

view.forward(request, response);
dao.create(adduser);

dao.create(adduser);//first create user
view.forward(request, response);//later forward the req

无需拨打doGet(request, response);

【讨论】:

    【解决方案2】:

    java.lang.IllegalStateException:响应后无法转发 已承诺

    删除您的out.println() 代码,因为您希望实际转发到不同的网址。

    如果您已经向响应流写入内容,则无法转发。

    【讨论】:

      猜你喜欢
      • 2011-12-18
      • 2016-03-08
      • 2014-05-09
      • 2014-04-27
      • 1970-01-01
      • 2015-01-27
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多