user1393064
user1393064

Reputation: 411

Servlets Jsp And Null Pointers

Hi all I have a website where a Lecturer assigns a tutor to a lab, Currently I have a list of tutors where I can click assign and then it takes the user to another page where there is a drop down box and they can select which lab they would like the tutor to teach. It's supposed to submit the id of the lab and the id of the user to the database.

Currently When a user gets the tutor list, they click a link called 'assign' which puts the tutors id up in the url, then they have a list of tutes they can select, once I've selected the tute and click submit I get the following error.

description 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)
    TutorAssign.doPost(TutorAssign.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

the sendBack method is running but the doPost is not and it's pointing to the line where I get the request parameter as being null - int user_id = Integer.parseInt(request.getParameter("id"));

how can i fix this? I'll include the entirety of my servlet for better clarification

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 java.util.ArrayList;

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;
import javax.servlet.http.HttpSession;

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

    /**
     * @see HttpServlet#HttpServlet()
     */
    public TutorAssign() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        sendBack(request, response);
    }

    private void sendBack(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         HttpSession session = request.getSession(true);
            //Set data you want to send back to the request (will be forwarded to the page)
            //Can set string, int, list, array etc.
         int user_id = Integer.parseInt((String)request.getParameter("id"));
         String sql = "SELECT l.id,s.name,l.day,l.time,l.room" +
                  " FROM subject s, lab l " +
                    " WHERE s.user_id="+(Integer)session.getAttribute("id");

          try{
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/wae","root","");
            System.out.println("got a hj");
            System.out.println(session.getAttribute("id"));

              Statement stmt = con.createStatement();
              ResultSet res = stmt.executeQuery(sql);
              System.out.println(res);
              ArrayList<String> list1 = new ArrayList<String>();
              ArrayList<String> list2 = new ArrayList<String>();
              if (res.next()){
                  do{
                       list1.add(res.getString(1));
                       list2.add(res.getString(2)+" "+res.getString(3)+" "+res.getString(4)+" "+res.getString(5));


                  }while(res.next());
              System.out.println("Outside");
              String[] arr1 = list1.toArray(new String[list1.size()]);
              String[] arr2 = list2.toArray(new String[list2.size()]);
              System.out.println(list1);
              request.setAttribute("res1", arr1);
              request.setAttribute("res2", arr2);
              request.setAttribute("user_id", user_id);

              }



          }catch (SQLException e) {
            } 
            catch (Exception e) {
            } 


            //Decides what page to send the request data to
            RequestDispatcher view = request.getRequestDispatcher("TutorAssign.jsp");
            //Forward to the page and pass the request and response information
            view.forward(request, response); 
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        int user_id = Integer.parseInt((String)request.getParameter("id"));
          System.out.println(user_id);
          int lab_id = 0;
          System.out.println("I got a blow job");
          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(user_id);
            Statement s = con.createStatement(); 

            String sql = "INSERT INTO user_lab" + 
                      " (user_id, lab_id)" + 
                      " VALUES" + 
                      " ('" +  user_id + "'," + 
                         " '"  +  lab_id + "')"; 

              System.out.println(sql);
              int i = s.executeUpdate(sql); 
              if (i==1) {
                message = "Successfully assigned a tutor."; 
                response.sendRedirect("Lecturer_labs");
              } 

              s.close(); 
              con.close(); 
            } 
            catch (SQLException e) {
              message = "Error." + e.toString(); 
              boolean error = true; 
            } 
            catch (Exception e) {
              message = "Error." + e.toString(); 
              boolean error = true; 
            } 
            if (message!=null) {
              PrintWriter out = response.getWriter(); 
              out.println("<B>" + message + "</B><BR>"); 
              out.println("<HR><BR>"); 
            } 

          } 
// TODO Auto-generated method stub


}

here is my jsp code

<form name ="TutorAssign" ACTION="TutorAssign" method="post">
        <input type="hidden" name="user_id" value="user_id"/>
        <select name="lab_id">
        <%
        for(int i=0; i<list1.length;i++)  
        { 
        out.println("<option value="+list1[i]+"> "+list2[i]+" </option>");

        } %>
        </select>
        <input type=SUBMIT value="Submit" name="Submit" />

        </form>

Upvotes: 0

Views: 472

Answers (2)

Reimeus
Reimeus

Reputation: 159844

It appears that id is not being passed into your servlet when a HTTP POST occurs. You could guard against this by adding a suitable guard statement:

if (request.getParameter("id") == null) {
   // handle non existance of id
}

The reason that id is not being passed in is that you don't have any input field in your JSP form to pass in this value. This would look like:

<input type="hidden" name="id" value="your_id_here"/>

Upvotes: 2

MarioDS
MarioDS

Reputation: 13063

The problem is here:

<form name ="TutorAssign" ACTION="TutorAssign" method="post">
        <select name="labs">
        <%
        for(int i=0; i<list1.length;i++)  
        { 
        out.println("<option value="+list1[i]+"> "+list2[i]+" </option>");

        } %>
        </select>

More specifically:

<select name="labs">

If you would either change the name to id OR use request.getParameter("labs"), you will probably get what you want.

Upvotes: 1

Related Questions