2012-10-03 44 views
0

大家好,當我運行我的servlet,其中包含一個窗體,然後單擊提交我得到以下錯誤,我無法找到我的代碼中的錯誤,但顯然有一個否則當我點擊提交以下錯誤不應該出現。當user_ID的存在,你可以創建一個「實驗室」Java servlet表單和數據庫

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

exception 

java.lang.NumberFormatException: null 
    java.lang.Integer.parseInt(Unknown Source) 
    java.lang.Integer.parseInt(Unknown Source) 
    CreateLab.doPost(CreateLab.java:72) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

import java.io.IOException; 


import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

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

/** 
* Servlet implementation class CreateLab 
*/ 
@WebServlet("/CreateLab") 
public class CreateLab extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public CreateLab() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 
    int id; 
    int capacity; 
    String day = ""; 
    String time = ""; 
    String room = ""; 
    int subject_id; 
    int user_id; 

    public void init() { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection con = 
      DriverManager.getConnection("jdbc:mysql://localhost:3306/wae","root",""); 
     System.out.println("JDBC driver loaded"); 
     } 
     catch (ClassNotFoundException e) { 
     System.out.println(e.toString()); 
     } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 

    /**Process the HTTP Get request*/ 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws 
    ServletException,IOException { 
     sendPageHeader(response); 
     sendRegistrationForm(request, response, false); 
     sendPageFooter(response); 
    } 

    /**Process the HTTP Post request*/ 
    public void doPost(HttpServletRequest request, 
     HttpServletResponse response) 
     throws ServletException, IOException { 
     sendPageHeader(response); 

     capacity = Integer.parseInt(request.getParameter("capacity")); 
     id = Integer.parseInt(request.getParameter("id")); 
     day = request.getParameter("day"); 
     time = request.getParameter("time"); 
     room = request.getParameter("room"); 
     user_id = Integer.parseInt(request.getParameter("user_id")); 
     subject_id = Integer.parseInt(request.getParameter("subject_id")); 


     boolean error = false; 
     String message = null; 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection con = 
      DriverManager.getConnection("jdbc:mysql://localhost:3306/wae","root",""); 
     System.out.println("got connection"); 
     System.out.println(id); 
     Statement s = con.createStatement(); 

     String sql = "SELECT id FROM user" + 
       " WHERE id='" + user_id + "'"; 
     ResultSet rs = s.executeQuery(sql); 
     if (rs.next()) { 
      rs.close(); 
      sql = "INSERT INTO lab" + 
        " (capacity, day, time, room, subject_id, user_id)" + 
        " VALUES" + 
        " (" + capacity + "','" + 
        " '" + day + "'," + 
        " '" + time + "'," + 
        " '" + room + "','" + subject_id + "','" + user_id + "')"; 

      System.out.println(sql); 
      int i = s.executeUpdate(sql); 
      if (i==1) { 
      message = "Successfully a new lab class."; 
      } 
     } 
      s.close(); 
      con.close(); 
     } 
     catch (SQLException e) { 
      message = "Error." + e.toString(); 
      error = true; 
     } 
     catch (Exception e) { 
      message = "Error." + e.toString(); 
      error = true; 
     } 
     if (message!=null) { 
      PrintWriter out = response.getWriter(); 
      out.println("<B>" + message + "</B><BR>"); 
      out.println("<HR><BR>"); 
     } 
     if (error==true) 
      sendRegistrationForm(request, response, true); 
     else 
      sendRegistrationForm(request, response, false); 
     sendPageFooter(response); 
     } 

     /** 
     * Send the HTML page header, including the title 
     * and the <BODY> tag 
     */ 
     private void sendPageHeader(HttpServletResponse response) 
     throws ServletException, IOException { 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println("<HTML>"); 
     out.println("<HEAD>"); 
     out.println("<TITLE>Create Lab Page</TITLE>"); 
     out.println("</HEAD>"); 
     out.println("<BODY>"); 
     out.println("<CENTER>"); 
     } 

     /** 
     * Send the HTML page footer, i.e. the </BODY> 
     * and the </HTML> 
     */ 
     private void sendPageFooter(HttpServletResponse response) 
     throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 
     out.println("</CENTER>"); 
     out.println("</BODY>"); 
     out.println("</HTML>"); 
     } 
     /**Send the form where the user can type in 
     * the details for a new user 
     */ 
     private void sendRegistrationForm(HttpServletRequest request, 
     HttpServletResponse response, boolean displayPreviousValues) 
     throws ServletException, IOException { 

     PrintWriter out = response.getWriter(); 
     out.println("<BR><H2>Create A Lab</H2>"); 
     out.println("<BR>Please enter the lab details."); 
     out.println("<BR>"); 
     out.println("<BR><FORM METHOD=POST>"); 
     out.println("<TABLE>"); 
     out.println("<TR>"); 
     out.println("<TD>Class Capacity</TD>"); 
     out.print("<TD><INPUT TYPE=TEXT Name=capacity"); 

     if (displayPreviousValues) 
      out.print(" VALUE=\"" + capacity + "\""); 

     out.println("></TD>"); 
     out.println("</TR>"); 
     out.println("<TR>"); 
     out.println("<TD>Day</TD>"); 
     out.print("<TD><INPUT TYPE=TEXT Name=day"); 

     if (displayPreviousValues) 
      out.print(" VALUE=\"" + day + "\""); 

     out.println("></TD>"); 
     out.println("</TR>"); 
     out.println("<TR>"); 
     out.println("<TD>Time</TD>"); 
     out.print("<TD><INPUT TYPE=TEXT Name=time"); 

     if (displayPreviousValues) 
      out.print(" VALUE=\"" + time + "\""); 

     out.println("></TD>"); 
     out.println("</TR>"); 
     out.println("<TR>"); 
     out.println("<TD>Room</TD>"); 
     out.print("<TD><INPUT TYPE=TEXT Name=room"); 
     if (displayPreviousValues) 
      out.print(" VALUE=\"" + room + "\""); 
     out.println("></TD>"); 
     out.println("</TR>"); 
     out.println("<TR>"); 
     out.println("<TD>subject_id</TD>"); 
     out.print("<TD><INPUT TYPE=TEXT Name=subject_id"); 
     if (displayPreviousValues) 
      out.print(" VALUE=\"" + subject_id + "\""); 
     out.println("></TD>"); 
     out.println("</TR>"); 
     out.println("<TR>"); 
     out.println("<TD>user_id</TD>"); 
     out.print("<TD><INPUT TYPE=TEXT Name=user_id"); 
     out.println("></TD>"); 
     out.println("</TR>"); 

     if (displayPreviousValues) 
     out.print(" VALUE=\"" + user_id + "\""); 
     out.println("</TD>"); 
     out.println("</TR>"); 

     out.println("<TR>"); 
     out.println("<TD><INPUT TYPE=RESET></TD>"); 
     out.println("<TD><INPUT TYPE=SUBMIT></TD>"); 
     out.println("</TR>"); 
     out.println("</TABLE>"); 
     out.println("</FORM>"); 
     out.println("<BR>"); 
     out.println("<BR>"); 
     } 
     } 
+0

哪個管線72?顯然你的parseInt()調用之一是barfing cos輸入不是int! – John3136

+0

錯誤消息毫不含糊地告訴您,null已傳遞給Integer.parseInt方法。 'CreateLab.doPost(CreateLab.java:72)'這一行是什麼? –

+0

異常追蹤在哪裏? – Anshu

回答

0

每次將字符串解析爲int時,都會使用此函數。當參數包含字母或null時,getIntParameter返回0,否則返回int值。

​​

在的doPost功能,

capacity = getIntParameter(request.getParameter("capacity")); 
id = getIntParameter(request.getParameter("id")); 
user_id = getIntParameter(request.getParameter("user_id")); 
subject_id = getIntParameter(request.getParameter("subject_id")); 

代替

capacity = Integer.parseInt(request.getParameter("capacity")); 
id = Integer.parseInt(request.getParameter("id")); 
user_id = Integer.parseInt(request.getParameter("user_id")); 
subject_id = Integer.parseInt(request.getParameter("subject_id")); 
1

NumberFormatException當你傳遞NULL或空字符串Integer.parseInt()

確定你是否傳遞capacity參數會拋出

的sql應該是你的表單數據。

變化

capacity = Integer.parseInt(request.getParameter("capacity")); 

id = Integer.parseInt(request.getParameter("id")); 

String str = request.getParameter("capacity"); 
if(str!=null && str.length > 0){ 
    capacity = Integer.parseInt(str); 
} 
str = request.getParameter("id"); 
if(str!=null && str.length > 0){ 
    id = Integer.parseInt(str); 
} 
str = request.getParameter("user_id"); 
if(str!=null && str.length > 0){ 
    user_id = Integer.parseInt(str); 
} 
str = request.getParameter("subject_id"); 
if(str!=null && str.length > 0){ 
    subject_id = Integer.parseInt(str); 
} 

如果你婉避免赤每次。 您可以創建一個在沒有數據時返回-1或0的方法。

public int getIntParameter(String strParamval){ 
    int nRetVal=0; 
    try{ 
      nRetVal=Integer.parseInt(strParamVal); 
     }catch(NumberFormatException nfe){ 
      return 0; 
     } 
     return nRetVal; 
} 
0

您的參數傳遞到parseInt()之一是不是一個有效的數字。因此例外。我認爲你不是初始化id,capacityuserid與一個有效的int。在嘗試解壓縮之前,請執行String.isEmpty()檢查。

 String id =request.getParameter("id"); 
     try { 
    if(!id.isEmpty()) { 
     Integer.parseInt(id); 
    } 
     } 
     catch(NFE ex) { 
     ex.printStrackTrace(); 
     } 

還記得request.getParameter("")返回String對象,whenit犯規找到給參數返回null這是字符串值defalut。

 String id= request.getParameter("id") 
    try { 
    if(!id.isEmpty() && id!=null) { 
     Integer.parseInt(); 
    } 
     } 
     catch(NFE ex) { 
     ex.printStrackTrace(); 
     } 
0

這是因爲當你使用Integer.parseInt解析「user_id」時。它預計值爲String,但不是null

但是當你試圖作爲

user_id = Integer.parseInt(request.getParameter("user_id")); 

確保

request.getParameter("user_id") 

沒有返回null。如果它返回null,那麼user_id必須在request對象中不可用,因爲它是從網頁上的表單空白髮送的。在提交表單時檢查user_id是否爲空。