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