2014-10-02 1 views
-1

Ниже приведен отчет, как бы исправить это. Я попытался вернуть requestdispatcher на doPost. . Может ли кто-нибудь объяснить, что происходит. Я просто вставляю параметры в базе данных, что не так с моим кодом? благодаряHTTP-статус 500 - не может переадресоваться после того, как ответ был зафиксирован. TOMCAT 7.55

type Exception report 


message Cannot forward after response has been committed 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

java.lang.IllegalStateException: Cannot forward after response has been committed 
    EventHandler.InsertEvent.doPost(InsertEvent.java:75) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

сервлет

package EventHandler; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.Statement; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@WebServlet("/AddEvent")  

public class InsertEvent extends HttpServlet { 
    String title,description, founder, time, date, location, payment; 
    int price = 0; 
    int bank = 0; 
    String query; 
    Connection conn; 
    Statement stmt; 
    ResultSet rs; 
    DatabaseConnection dbconn; 

    private static final long serialVersionUID = 1L; 





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


    } 




    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/html"); 

     try{ 
      title = request.getParameter("title"); 
      description = request.getParameter("description"); 
      founder = request.getParameter("founder"); 
      time = request.getParameter("time"); 
      date = request.getParameter("date"); 
      location = request.getParameter("location"); 
      payment = request.getParameter("payment"); 
      price = Integer.parseInt(request.getParameter("price")); 
      bank = Integer.parseInt(request.getParameter("bank")); 
      System.out.println(title); 
      System.out.println(description); 
      System.out.println(founder); 
      System.out.println(time); 
      System.out.println(date); 
      System.out.println(location); 
      System.out.println(payment); 
      System.out.println(price); 
      System.out.println(bank); 
      conn = dbconn.setConnection(); 
      stmt = conn.createStatement(); 
      query = "insert into event_list values('"+title+"','"+description+"','"+founder+"','"+time+"','"+date+"','"+location+"','"+payment+"',"+price+","+bank+")"; 
      int i = stmt.executeUpdate(query); 

     }catch(Exception e){ 
      request.setAttribute("Error", e); 
      RequestDispatcher rd = request.getRequestDispatcher("error.jsp"); 
      rd.forward(request, response); 
     }finally{ 
      RequestDispatcher rd = request.getRequestDispatcher("CreateEvent.jsp"); 
      rd.forward(request, response); 
     } 

    } 

} 

DBConnection

package EventHandler; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

public class DatabaseConnection { 
    Connection conn; 
    Statement stmt; 
    ResultSet rs; 
    String url = "jdbc:mysql://localhost:3306/form"; 
    String driver = "com.mysql.jdbc.Driver"; 
    String userName = "root"; 
    String password = "Incorrect00!"; 

    public DatabaseConnection(){ 

    } 

    public Connection setConnection(){ 
     try{ 
      Class.forName(driver); 
      conn = DriverManager.getConnection(url, userName, password); 
     }catch(Exception e){ 

     } 
     return conn; 
    } 

    public ResultSet getResult(String sql, Connection conn){ 
     this.conn = conn; 
     try{ 
      stmt = conn.createStatement(); 
      rs = stmt.executeQuery(sql); 
     }catch (Exception e){ 

     } 
     return rs; 
    } 
} 

JSP

<html> 
<head> 
<title>Create An event</title> 
<script src="js/jquery.js"></script> 
<script src="js/bootstrap.min.js"></script> 
<script src="js/bootstrap-datetimepicker.min.js"></script> 
<script src="js/CreateEvent.js"></script> 
<link href="css/bootstrap.css" rel="stylesheet" type="text/css"/> 
<link href="css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css"/> 



</head> 
<body> 

<form method="post" action="AddEvent" > 
<br> 

Title: <input type="text" name="title" ><br><br> 
Event Founder: <input type="text" name="founder" ><br><br> 
Description: <textarea name="description" ></textarea><br><br> 

    Time: 

        <input type='text' class="form-control" name="time" /> 

Day: 
        <input type='text' class="form-control" data-date-format="YYYY/MM/DD" name="date"/> 

Where: <input type="text" name="location"> <br> 
Include Payment? <br> 
<input type="radio" name="payment" id="showprice" value="yes">Yes<br> 
<input type="radio" name="payment" value="no">No<br> 

<div id="price"> 
Price: <input type="text" value="0" name="price"> 
<br> 
Bank Account Number : <input type="text" name="bank" value="0"> 
</div> 

<input type="submit" value="Finish" class="btn btn-success"/> 
</form> 
<a href="/EventPlannerV3">Show List</a> 
</body> 
</html> 
+0

Не относится к вашему вопросу, а относится к опасному стилю, который вы используете для своего кода. Читайте о SQL-инъекции, затем используйте 'prepareStatement' и предоставляйте отдельные параметры, а не конкатенацию содержимого, которое вы читаете из запроса. Затем прочитайте о Little Bobby Tables здесь: http://xkcd.com/327/ –

ответ

3

Проблема заключается в том, что вы дважды вызываете диспетчер запросов.

}catch(Exception e){ 
     request.setAttribute("Error", e); 
     RequestDispatcher rd = request.getRequestDispatcher("error.jsp"); 
     rd.forward(request, response); 
    }finally{ 
     RequestDispatcher rd = request.getRequestDispatcher("CreateEvent.jsp"); 
     rd.forward(request, response); 
    } 

Ваша программа ловит исключение, то оно также выполняет окончательно выравнивает вы не можете переслать запрос после того, как вы уже переправили его.

+0

У меня возникли проблемы с вставкой его в мою базу данных, мой запрос прав, но он не проходит через мою базу данных, можете ли вы рассказать мне, что не так с код? –

+0

Какова исходная ошибка, которую ваша программа ловит ... попробуйте сделать catch (Exception e) {e.printStackTrace();} это поможет узнать об ошибке. – brso05

+0

Также избегайте своего «в вашем запросе» – brso05

0

Используйте разумный способ mextod .forward(). Также не забудьте добавить оператор return в случае, если у вас есть несколько форвардов в одном классе. читать here и https://stackoverflow.com/questions/19619949/how-does-function-terminate-with-requestdispatcher-forward.

catch(Exception e){ 
     request.setAttribute("Error", e); 
     RequestDispatcher rd = request.getRequestDispatcher("error.jsp"); 
     rd.forward(request, response); 
     return; 
    }finally{ 
     RequestDispatcher rd = request.getRequestDispatcher("CreateEvent.jsp"); 
     rd.forward(request, response); 
     return; 
    } 

Чтобы сбросить программный контроль, вместо выполнения другого блока. вы использовали RequestDispatcher в finally(), чтобы он выполнялся всегда независимо от ваших ошибок. попытайтесь использовать, наконец, мудро.

  1. When should I use the finally-block in Java's try-catch-finally

  2. Why do I need to use finally to close resources?

Надеется, что это помогает !!

Смежные вопросы

 Смежные вопросы