0

hi all when I run my servlet which contains a form and click submit I get the following error, i cannot find the error in my code but there is obviously one when otherwise when I click submit the following error should not appear.

the sql should be when a user_id exists you can create a 'lab'

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>"); 
      }
      }
4
  • Which is line 72? Obviously one of your parseInt() calls is barfing cos the input is not an int! Commented Oct 3, 2012 at 4:59
  • Error message unambiguously tells you that null was passed to Integer.parseInt method. CreateLab.doPost(CreateLab.java:72) what's on this line? Commented Oct 3, 2012 at 5:00
  • Where is the exception trace? Commented Oct 3, 2012 at 5:04
  • fixed it, line 72. was the id Commented Oct 3, 2012 at 5:20

4 Answers 4

1

NumberFormatException gets thrown when you pass NULL or empty string to Integer.parseInt()

Check whether you are passing capacity parameter in your form data.

Change

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

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

To

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);
}

If you wan to avoid chek for each time. You can create a method which returns -1 or 0 when you have not data.

public int getIntParameter(String strParamval){
    int nRetVal=0;
    try{
            nRetVal=Integer.parseInt(strParamVal);
        }catch(NumberFormatException nfe){
            return 0;
        }
        return nRetVal;
}
Sign up to request clarification or add additional context in comments.

Comments

0

User this function each time you parse your string to int. getIntParameter returns 0 when parameter contains letters or null, otherwise it returns int vale.

public int getIntParameter(String strParamval){

        int nRetVal=0;
        if((strParamval != null) && (!strParamval.matches("\\d*")))
            return nRetVal;
        try{
            nRetVal = Integer.parseInt(strParamval);
        }catch(NumberFormatException nfe){
        }
        return nRetVal;
    }

In doPost function,

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

instead of

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")); 

Comments

0

one of your argument passing to parseInt() is not a valid number. thus the exception.I think you are not initializing id, capacity or userid with a valid int. do an String.isEmpty() check before you try toparse it.

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

also, remember that request.getParameter("") returns String object, whenit doesnt find the giving parameter it returns null which is the defalut value for string.

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

Comments

0

It is because when you are parsing "user_id" using Integer.parseInt. It expects a String value in it, but not a null.

But when you are trying it as

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

make sure that

request.getParameter("user_id")

is not returning null. If it is returning null, then user_id must be not available in the request object as it was sent blank from the form on webpage. Check that user_id is not empty while submitting the form.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.