Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTTP 500-java.lang.NullPointerException_Java_Jsp_Servlets - Fatal编程技术网

HTTP 500-java.lang.NullPointerException

HTTP 500-java.lang.NullPointerException,java,jsp,servlets,Java,Jsp,Servlets,我正在做一个网络项目。我对这个很陌生。在这里,我在编译servlet时遇到了一个错误HTTP 500-java.lang.NullPointerException 请帮帮我 我的错误消息是 java.lang.NullPointerException at aexam.doGet(aexam.java:47) at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) at javax.servlet.

我正在做一个网络项目。我对这个很陌生。在这里,我在编译servlet时遇到了一个错误HTTP 500-java.lang.NullPointerException

请帮帮我

我的错误消息是

 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)
以下是我的servlet代码:

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
}

}

看起来前面缺少一个参数,您正试图将其放入servlet中。

看起来像 FileReader f1=新的FileReaderpaper; 这导致NPE。请检查文件名。

NPE被抛出FileReader f1=new FileReaderpaper;
最好确保“paper”不是空字符串,并且是正确的路径

因为您刚刚接触servlet,首先有几个提示

检查字段是否为空,然后给出字段名错误。这种快速失效程序可以实现更快的开发

不要使用字段ps、rs,创建的servlet实例可能会被重用

然后还声明ps和rs尽可能接近它们的用法。全部关闭

使用预先准备好的语句。在这里,您面临着SQL注入黑客的风险。它使转义字符串单引号、反斜杠、空值和日期时间更简单

这使得以下内容变得多余:

String paper=pap.replace("\\","\\\\");
我猜paper参数没有给出,pap为null。 检查堆栈跟踪中的行号,以获得具有NullPointerException的确切行

FileReader是一个仅用于本地使用的实用程序classm,它使用默认操作系统编码进行读取。在Linux下,现在可能是UTF-8。如果在Windows下开发,则会有所不同

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

提供文件也是一种安全风险。黑客企图真的会发生,即使是在小型网站上。

哪一行导致NPE?