0

I am working on a web project. I am very new to this. Here i got an error(HTTP 500 - java.lang.NullPointerException) when i compile my servlet.

Please help me.

My error message was

 java.lang.NullPointerException
    at aexam.doGet(aexam.java:47)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at     org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

Here is my servlet code:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
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 aexam
*/
@WebServlet("/aexam")
public class aexam extends HttpServlet {
private static final long serialVersionUID = 1L;
Statement ps=null;  
ResultSet rs=null;

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

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws                    ServletException,IOException {
    // TODO Auto-generated method stub
    PrintWriter pw=res.getWriter();

    String dt=req.getParameter("date");
    String tim=req.getParameter("time");
    String pap=req.getParameter("paper");
    String dur=req.getParameter("duration");
    String ky=req.getParameter("key");
    String paper=pap.replace("\\","\\\\");
    pw.println(dt+"<br>"+tim+"<br>"+pap+"<br>"+dur+"<br>"+ky+"<br>"+paper);
    FileReader f1=new FileReader(paper);
    BufferedReader br1=new BufferedReader(f1);
    res.setContentType("text/html");
    int i=0;
    try
    {
    Class.forName("com.mysql.jdbc.Driver");
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/ocp2","root",             "");          
    ps=con.createStatement();
    //pw.println("hello");
    String s=br1.readLine();
    //pw.println(s);
    //String sfname=req.getParameter("sfname");

    do
    {
        i++;
        //pw.println(i);

        String ans[]=s.split(",");
        //pw.println("insert into key(qno,ques,ch1,ch2,ch3,ch4) values                                           ("+i+",'"+ans[0]+"','"+ans[1]+"','"+ans[2]+"','"+ans[3]+"','"+ans[4]+"')");
        ps.executeUpdate("insert into keyset values         ("+i+",'"+ans[0]+"','"+ans[1]+"','"+ans[2]+"','"+ans[3]+"','"+ans[4]+"',to_date('"+dt+":"+tim+"','DD.MM.YYYY:HH24:MI:SS'))");

    }while((s=br1.readLine())!=null);
    con.commit();
    pw.println("<html><head></head><body><center><h1>Thank You</h1></center></body></html>");
    }
    catch(Exception e)
    {
        System.out.println(e);
    }
}


/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,   IOException {
    // TODO Auto-generated method stub
}

}
Michael Sivolobov
  • 12,388
  • 3
  • 43
  • 64
WayneVig
  • 60
  • 3
  • 10

4 Answers4

0

Looks like one of the parameter is missing from the front, which you are trying to get into the servlet.

Darshan Lila
  • 5,772
  • 2
  • 24
  • 34
0

Looks like FileReader f1=new FileReader(paper); this causes NPE. Please check the file name.

bestalign
  • 227
  • 1
  • 9
0

NPE was throwed at FileReader f1=new FileReader(paper); it's better to make sure that 'paper' is not an empty string and is a correct path

jcfb
  • 19
  • 3
0

As you are new to servlets, first a couple of tips.

Check fields for being null, and then give an error with field name. This "fail fast" procedure enables a faster development.

Do not use fields (ps, rs), created servlet instances may be reused.

Then also declare ps and rs as close as possible to their usage. Close all.

Use a PreparedStatement. Here you are risking SQL injection hacks. An it makes escaping strings (single quote, backslash, null values, datetimes) simpler.

This makes the following superfluous:

String paper=pap.replace("\\","\\\\");

I would have guessed that the paper parameter was not given, and pap were null. Check the line number in the stack trace, for the exact line with the NullPointerException.

FileReader is a utility classm (for local usage only) that reads using the default operating system encoding. Under Linux that nowadays is likely to be UTF-8. If you develop under Windows it is different.

new InputStreamReader(new FileInputStreeam(file), StandardCharsets.UTF_8)
new InputStreamReader(new FileInputStreeam(file), "Windows-1252")

Serving a file is a security risk too. Hack attempts really happen, even on small sites.

Joop Eggen
  • 107,315
  • 7
  • 83
  • 138