我正在开展一个网络项目。我对此很新。在编译我的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
}
}
答案 0 :(得分:0)
看起来前面缺少一个参数,你试图进入servlet。
答案 1 :(得分:0)
看起来像
FileReader f1=new FileReader(paper);
这会导致NPE。请检查文件名。
答案 2 :(得分:0)
NPE在FileReader f1=new FileReader(paper);
投掷
最好确保'paper'不是空字符串并且是正确的路径
答案 3 :(得分:0)
由于您不熟悉servlet,首先要提几个技巧。
检查字段是否为null,然后使用字段名称给出错误。这种“快速失败”程序可以加快开发速度。
不要使用字段(ps
,rs
),可以重用已创建的servlet实例。
然后还声明ps
和rs
尽可能接近其用法。关闭所有。
使用PreparedStatement。在这里你冒着SQL注入黑客的风险。它使转义字符串(单引号,反斜杠,空值,日期时间)更简单。
这使得以下多余:
String paper=pap.replace("\\","\\\\");
我猜想没有给出paper
参数,pap
为空。
检查堆栈跟踪中的行号,以获取具有NullPointerException的确切行。
FileReader是一个实用程序类(仅供本地使用),它使用默认的操作系统编码进行读取。在Linux下,现在很可能是UTF-8。如果你在Windows下开发它是不同的。
new InputStreamReader(new FileInputStreeam(file), StandardCharsets.UTF_8)
new InputStreamReader(new FileInputStreeam(file), "Windows-1252")
提供文件也存在安全风险。即使在小型网站上也会发生黑客攻击。