java.lang.IllegalStateException : Cannot forward after response has been committed while saving into mysql

标签 java mysql jsp servlets model-view-controller

我正在学习一个教程,并尝试使用 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)

最佳答案

改变

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

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

无需调用doGet(request, response);

关于java.lang.IllegalStateException : Cannot forward after response has been committed while saving into mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35868709/

相关文章:

mysql - Rails 5 和 Ruby 2.3.3 加载 libmysql.dll 失败

html - 动态 html 表

java - 如何从jsp的下拉列表中选择一个选项?

jquery - 如何使用 JSP/Servlet 和 Ajax 将文件上传到服务器?

java - 如何从struts中的java Action 调用url?

java - Jersey @Path 用于同一类中的复数/单个 REST 名词

mysql - MySQL 程序线程安全吗?

java - 如何在 android 应用程序中导入 ZXING 库?

java - 如何使用 selenium 导航到同级 <p> 元素

php - 如何从文本区域字段插入mysql多个字段