Question

I developed browser front end for displaying,editing and updating records from database. Previously I had different servlet for performing the Inserting, editing and Updating records. Now I want club all the servlets into a single servlet called "DisplayData" and I used hidden field respective in login.JSP form and in "edit.jsp" so that servlet can perform login operation or update operation based on the hidden parameter.

The code works fine for the login operation which allows only registered users but when I try edit the record and update it, it shows the java.lang.Nullpointer exception. When I try to delete the record it shows the same error.

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

HttpSession session = request.getSession(true);
HttpSession usersession = request.getSession(true);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String query;
Connection conn;
Statement stmt;
ResultSet res;
DatabaseConnection dbconn;

String username="";
String hiddenname = request.getParameter("hiddenname"); 
System.out.println(hiddenname);



    username = request.getParameter("username");
    System.out.println(username);
    String password = request.getParameter("password");
    System.out.println(password);
    usersession.setAttribute("uname", username);
    usersession.setAttribute("upass", password);
    Connection con = dbconnection.getCon();
    System.out.println(con);
    PreparedStatement statemt = null;

    if (hiddenname.equals("login"))
            {

        try {
    statemt = con.prepareStatement("select User_name,Password from login_details where User_name = ? and Password = ?");
    System.out.println(statemt);
    statemt.setString(1, username);
    statemt.setString(2, password); 
    ResultSet rs = statemt.executeQuery();
        if (rs.next() == false) 
            {
                out.write("Invalid user name or password. Please press back button to login again");

            }
        else
        {
            List lst=new ArrayList();       
            String login_name,login_password;
            try
            {

                    login_name=(String) session.getAttribute("uname");
                    login_password=(String) session.getAttribute("upass");
                    request.setAttribute("UserName", login_name);
                    request.setAttribute("UserPassword", login_password);
                    dbconn=new DatabaseConnection();        
                    conn=dbconn.setConnection();
                    stmt=conn.createStatement();
                    query="select * from mpi";
                    res=dbconn.getResultSet(query, conn);
                    while(res.next())
                    {

                        lst.add(res.getString("UniqueID"));
                        lst.add(res.getString("Phylum"));
                        lst.add(res.getString("Family"));
                        lst.add(res.getString("Genus"));
                        lst.add(res.getString("NCBI_Taxnomy_ID"));
                        lst.add(res.getString("16s_Sanger_seq"));
                        lst.add(res.getString("Genome_Sequencing_Batch"));
                        lst.add(res.getString("Stock_number"));
                        lst.add(res.getString("Stock_Location"));
                        lst.add(res.getString("Soil_batch"));
                        lst.add(res.getString("Host"));
                        lst.add(res.getString("Operator"));
                        lst.add(res.getString("GPS_coordinates"));
                        lst.add(res.getString("Greenhouse_or_Natural_sites"));
                        lst.add(res.getString("Isolation_procedure"));
                        lst.add(res.getString("Date_of_isolation"));
                        lst.add(res.getString("Previous_Ids"));
                        lst.add(res.getString("Compartment"));
                        lst.add(res.getString("Publication"));
                        lst.add(res.getString("Strain_Derivatives"));
                        lst.add(res.getString("Growth_conditions"));
                        lst.add(res.getString("Natural_antibiotic_resistance"));
                        lst.add(res.getString("Colony_morphology"));
                    }
                                res.close(); 
                }
                catch(Exception e)
                {
                    e.printStackTrace();        
                }
                finally
                {
                    request.setAttribute("UserData", lst);
                    RequestDispatcher rd=request.getRequestDispatcher("/displayrecord.jsp");
                    rd.forward(request, response);
                    lst.clear();
                    out.close();
                }
            }           
                    con.close();
    } 


            catch (SQLException e) 
                {
                    e.printStackTrace();
                }

    }

    else if(hiddenname.equals("update"))
    {
        String UniqueID,Phylum,Family,Genus,NCBI_Taxnomy_ID,s16_Sanger_seq,Genome_Sequencing_Batch,Stock_number,
        Stock_Location,Soil_batch,Host,Operator,GPS_coordinates,Greenhouse_or_Natural_sites,
        Isolation_procedure,Date_of_isolation,Previous_Ids,Compartment,Publication,Strain_Derivatives,Growth_conditions,
        Natural_antibiotic_resistance,Colony_morphology,Comments;   
        response.setContentType("text/html;charset=UTF-8");
        try{
            dbconn=new DatabaseConnection();        
            conn=dbconn.setConnection();
            System.out.println("conn");
            UniqueID=request.getParameter("UniqueID");
            Phylum=request.getParameter("Phylum");          
            Family=request.getParameter("Family");          
            Genus=request.getParameter("Genus");        
            NCBI_Taxnomy_ID=request.getParameter("NCBI_Taxnomy_ID");        
            s16_Sanger_seq=request.getParameter("s16_Sanger_seq");
            System.out.println(s16_Sanger_seq);
            Genome_Sequencing_Batch=request.getParameter("Genome_Sequencing_Batch");
            Stock_number=request.getParameter("Stock_number");
            Stock_Location=request.getParameter("Stock_Location");
            Soil_batch=request.getParameter("Soil_batch");
            Host=request.getParameter("Host");
            Operator=request.getParameter("Operator");
            GPS_coordinates=request.getParameter("GPS_coordinates");
            Greenhouse_or_Natural_sites=request.getParameter("Greenhouse_or_Natural_sites");
            Isolation_procedure=request.getParameter("Isolation_procedure");
            Date_of_isolation=request.getParameter("Date_of_isolation");
            Previous_Ids=request.getParameter("Previous_Ids");
            Compartment=request.getParameter("Compartment");
            Publication=request.getParameter("Publication");
            Strain_Derivatives=request.getParameter("Strain_Derivatives");
            Growth_conditions=request.getParameter("Growth_conditions");
            Natural_antibiotic_resistance=request.getParameter("Natural_antibiotic_resistance");
            Colony_morphology=request.getParameter("Colony_morphology");

            stmt=conn.createStatement();
            query="update mpi set Phylum='"+Phylum+"',Family='"+Family+"',Genus='"+Genus+"',NCBI_Taxnomy_ID='"+NCBI_Taxnomy_ID+"',16s_Sanger_seq='"+s16_Sanger_seq+"',Genome_Sequencing_Batch='"+Genome_Sequencing_Batch+"',Stock_number='"+Stock_number+"',Stock_Location='"+Stock_Location+"',Soil_batch='"+Soil_batch+"',Host='"+Host+"',Operator='"+Operator+"',GPS_coordinates='"+GPS_coordinates+"',Greenhouse_or_Natural_sites='"+Greenhouse_or_Natural_sites+"',Date_of_isolation='"+Date_of_isolation+"',Isolation_procedure='"+Isolation_procedure+"',Previous_Ids='"+Previous_Ids+"',Compartment='"+Compartment+"',Publication='"+Publication+"',Strain_Derivatives='"+Strain_Derivatives+"',Growth_conditions='"+Growth_conditions+"',Natural_antibiotic_resistance='"+Natural_antibiotic_resistance+"',Colony_morphology='"+Colony_morphology+"' where UniqueID='"+UniqueID+"'";
            System.out.println(query);
            int i=stmt.executeUpdate(query);
        }
        catch(Exception e)
        {

        }
        finally{

            RequestDispatcher rd=request.getRequestDispatcher("/displayrecord.jsp");
            rd.forward(request, response);
            out.close();
        }


    }else if(hiddenname.equals("delete"))
    {
        try{
                                   id=request.getParameter("hidden_delete");
            System.out.println(id);
            dbconn=new DatabaseConnection();
            conn=dbconn.setConnection();
            System.out.println(conn);
            stmt=conn.createStatement();
            System.out.println(stmt);
            query="delete from mpi where UniqueID="+id;
            int i=stmt.executeUpdate(query);

        }catch (Exception e)
        {

        }finally{
            RequestDispatcher rd=request.getRequestDispatcher("DisplayData");
            rd.forward(request, response);
            out.close();
        }
    }
}}

Could anyone tell me were my mistake lies. Here is my JSP code for displayrecord.jsp

`<body><input type="button" onclick="tableToExcel('table_id', 'W3C Example Table')" value="Export to Excel">
<TABLE  id="table_id" align="Center" border="1px" width="80%">
    <thead>
    <tr>
    <th><b>UniqueID</b>
    <form action="SearchId" method="post">
    <input type="hidden" name="hiddenname" value="hidden_uid" >
    <input class="ignore" type="text" name="uid" id="uid">
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Phylum</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="phylum" id="phylum">
    <input type="hidden" name="hiddenname" value="hidden_phylum" >
    <input class="ignore" type="submit"  value="Search">
    </form>
    </th>
    <th><b>Family</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="family" id="family">
    <input type="hidden" name="hiddenname" value="hidden_family" >
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Genus</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="genus" id="genus">
    <input type="hidden" name="hiddenname" value="hidden_genus" >
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>NCBI Taxonomy ID</b>
    <form action="SearchId" method="post">
    <input type="hidden" name="hiddenname" value="hidden_taxid" >
    <input class="ignore" type="text" name="taxid" id="taxid">
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>16s Sanger Seq</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="16ssangerseq" id="16ssangerseq">
    <input type="hidden" name="hiddenname" value="hidden_16ssangerseq" >
    <input class="ignore" type="submit"  value="Search">
    </form>
    </th>
    <th><b>Genome Sequencing Batch</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="genomeseqbatch" id="genomeseqbatch">
    <input type="hidden" name="hiddenname" value="hidden_genomeseqbatch" >
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Stock number</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="Stock_number" id="Stock number">
    <input type="hidden" name="hiddenname" value="hidden_Stocknumber" >
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Stock Location</b>
    <form action="SearchId" method="post">
    <input  type="hidden" name="hiddenname" value="hidden_StockLocation" >
    <input class="ignore" type="text" name="Stock_Location" id="Stock Location">
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Soil batch</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="Soil_batch" id="Soil batch">
    <input type="hidden" name="hiddenname" value="hidden_Soilbatch" >
    <input class="ignore" type="submit"  value="Search">
    </form>
    </th>
    <th><b>Host</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="host" id="host">
    <input type="hidden" name="hiddenname" value="hidden_host" >
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Operator</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="operator" id="operator">
    <input type="hidden" name="hiddenname" value="hidden_operator" >
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>GPS co-ordinates</b>
    <form action="SearchId" method="post">
    <input  type="hidden" name="hiddenname" value="hidden_GPS_coordinates" >
    <input class="ignore" type="text" name="GPS_coordinates" id="GPS co-ordinates">
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Green House Sites</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="Green_House_Sites" id="Green House Sites">
    <input type="hidden" name="hiddenname" value="hidden_Green_House_Sites" >
    <input class="ignore" type="submit"  value="Search">
    </form>
    </th>
    <th><b>Isolation procedure</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="Isolation_procedure" id="Isolation procedure">
    <input type="hidden" name="hiddenname" value="hidden_Isolation_procedure" >
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Date of isolation</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="Date_of_isolation" id="Date of isolation">
    <input type="hidden" name="hiddenname" value="hidden_Date_of_isolation" >
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Previous Ids</b>
    <form action="SearchId" method="post">
    <input type="hidden" name="hiddenname" value="hidden_Previous_Ids" >
    <input class="ignore" type="text" name="Previous_Ids" id="Previous_Ids">
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Compartment</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="Compartment" id="Compartment">
    <input type="hidden" name="hiddenname" value="hidden_Compartment" >
    <input class="ignore" type="submit"  value="Search">
    </form>
    </th>
    <th><b>Publication</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="Publication" id="Publication">
    <input type="hidden" name="hiddenname" value="hidden_Publication" >
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Strain Derivatives</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="Strain_Derivatives" id="Strain Derivatives">
    <input type="hidden" name="hiddenname" value="hidden_Strain_Derivatives" >
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Growth conditions</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="Growth_conditions" id="Growth conditions">
    <input type="hidden" name="hiddenname" value="hidden_Growth_conditions" >
    <input class="ignore" type="submit"  value="Search">
    </form>
    </th>
    <th><b>Natural antibiotic resistance</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="Natural_antibiotic_resistance" id="Natural antibiotic resistance">
    <input type="hidden" name="hiddenname" value="hidden_Natural_antibiotic_resistance" >
    <input class="ignore" type="submit" value="Search">
    </form>
    </th>
    <th><b>Colony morphology</b>
    <form action="SearchId" method="post">
    <input class="ignore" type="text" name="Colony_morphology" id="Colony morphology">
    <input type="hidden" name="hiddenname" value="hidden_Colony_morphology" >
    <input class="ignore" type="submit" value="Search">
    </form>
    </th></tr>
    </thead>
    <tbody id="fbody">
    <%Iterator itr;%>
    <%List data=(List) request.getAttribute("UserData");
    for(itr=data.iterator();itr.hasNext();)
    {%>
        <tr>
            <% String s= (String) itr.next(); %> 
            <td><%=s %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>
            <td><%=itr.next() %></td>

     <c:choose>
             <c:when test="${UserName!= 'admin'&& UserPassword!='admin'}">
        <form id="edit" action="EditRecord" method="post" >
            <td><input type="hidden" name="hidden_edit" id="edit_id" value="<%=s %>"/> 
             <input class="ignore" type="submit" disabled="disabled" value="Edit" name="edit"> </td>
        </form>
        <form id="delete" action="DeleteRecord" method="post" >
            <td><input type="hidden" name="hidden_delete" id="delete_id" value="<%=s %>"/>
            <input class="ignore" type="submit" disabled="disabled" value="delete" name="delete"> </td>
        </form>
    </c:when>
    <c:otherwise>
        <form id="edit" action="EditRecord" method="post" >
            <td><input type="hidden" name="hidden_edit" id="edit_id" value="<%=s %>"/> 
            <input class="ignore" type="submit"  value="Edit" name="edit"> </td>
        </form>
        <form id="delete" action="DeleteRecord" method="post" >
            <td><input type="hidden" name="hidden_delete" id="delete_id" value="<%=s %>"/>
            <input class="ignore" type="submit"  value="delete" name="delete"> </td>
        </form>
    </c:otherwise>
</c:choose>     
        </tr>                   
    <%}%>
    </tbody>    
</TABLE>

The exception which I obtained after trying to delete is given as follows

    java.lang.NullPointerException
DisplayData.DisplayData.doPost(DisplayData.java:85)
javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
DeleteRecord.DeleteRecord.doPost(DeleteRecord.java:61)
javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
Was it helpful?

Solution

This line

String hiddenname = request.getParameter("hiddenname"); 

may result in hiddenname beeing null (see ServletRequest#getParameter)

so when you do

if (hiddenname.equals("login"))

you get a NullPointerException

change it to yoda notation (it's a best pactice anyways)

if ("login".equals(hiddenname))

...

else if("update".equals(hiddenname))

"login" (a string literal in general) can never be null and you won't get a NPE. Or make sure that the request parameter is always present.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top