Tomcat 为什么路径为[/ABC]的上下文中Servlet[XYZ]的Servlet.service()引发异常
我无法理解为什么会出现这个错误。我已经反复检查了我的代码,似乎没有发现任何错误Tomcat 为什么路径为[/ABC]的上下文中Servlet[XYZ]的Servlet.service()引发异常,tomcat,tomcat7,netbeans-7,Tomcat,Tomcat7,Netbeans 7,我无法理解为什么会出现这个错误。我已经反复检查了我的代码,似乎没有发现任何错误 16 Jul, 2012 3:21:25 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [XYZ] in context with path [/ABC] threw exception java.lang.NullPointerException at com.mnp
16 Jul, 2012 3:21:25 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [XYZ] in context with path [/ABC] threw exception
java.lang.NullPointerException
at com.mnp.abc.xyz.doPost(XYZ.java:116)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
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:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
xyzservlet的doPost方法
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
StringBuilder sb = new StringBuilder();
InputStream rin = request.getInputStream();
InputStream gzipStream = new GZIPInputStream(rin);
Reader decoder = new InputStreamReader(gzipStream, "UTF-8");
BufferedReader br = new BufferedReader(decoder);
String str;
// retrieve JOSNArray send to Servlet
while ((str = br.readLine()) != null) {
sb.append(str);
}
JSONArray jsonArray = null;
try {
jsonArray = new JSONArray(sb.toString());
} catch (JSONException e) {
System.out.println("Error parsing JSON");
}
System.out.println("json object: " + jsonArray.toString());
// parse JSONArray and obtain ContactArray
ArrayList<Contact> contactArray = null;
try {
contactArray = frmJSONArrayToContactArray(jsonArray);
} catch (JSONException e1) {
System.out.println(TAG + " frmJSONArrayToContactArray Failed");
}
// connect JDBC with MySQL server
Context initContext;
Connection connection;
DataSource datasource;
Statement statement;
ResultSet rs = null;
try {
initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
datasource = (DataSource) envContext.lookup("jdbc/bolsms");
// load Connector/J
connection = datasource.getConnection();
statement = connection.createStatement();
// get query String
Iterator<Contact> itetor = contactArray.iterator();
boolean greatPeopleBoo = false;
while (itetor.hasNext()) {
***Contact contact = itetor.next();***
....
....
....
}
rs.close();
statement.close();
connection.close();
} catch (NamingException ex) {
Logger.getLogger(MarkGreatPeopleFromContact.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException e) {
for (Throwable t : e) {
System.out.println(t.getMessage());
}
}
/*
* send contactArray back to Android Client
*/
}
}
@覆盖
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“应用程序/json”);
响应。setCharacterEncoding(“UTF-8”);
StringBuilder sb=新的StringBuilder();
InputStream rin=request.getInputStream();
InputStream Gzip流=新的Gzip输入流(rin);
读卡器解码器=新的InputStreamReader(gzipStream,“UTF-8”);
BufferedReader br=新的BufferedReader(解码器);
字符串str;
//检索发送到Servlet的JOSNArray
而((str=br.readLine())!=null){
某人附加(str);
}
JSONArray JSONArray=null;
试一试{
jsonArray=新的jsonArray(sb.toString());
}捕获(JSONException e){
System.out.println(“错误解析JSON”);
}
System.out.println(“json对象:+jsonArray.toString());
//解析JSONArray并获取ContactArray
ArrayList contactArray=null;
试一试{
contactArray=frmJSONArrayToContactArray(jsonArray);
}捕获(JSONException e1){
System.out.println(标记+“frmJSONArrayToContactArray失败”);
}
//连接JDBC和MySQL服务器
语境与语境;
连接;
数据源数据源;
声明;
结果集rs=null;
试一试{
initContext=新的InitialContext();
Context-envContext=(Context)initContext.lookup(“java:/comp/env”);
datasource=(datasource)envContext.lookup(“jdbc/bolsms”);
//负载连接器/J
connection=datasource.getConnection();
statement=connection.createStatement();
//获取查询字符串
迭代器itetor=contactArray.Iterator();
布尔greatPeopleBoo=false;
while(itetor.hasNext()){
***Contact-Contact=itetor.next()***
....
....
....
}
rs.close();
语句。close();
connection.close();
}捕获(NamingException-ex){
Logger.getLogger(MarkGreatPeopleFromContact.class.getName()).log(Level.SEVERE,null,ex);
}捕获(SQLE异常){
用于(可丢弃的t:e){
System.out.println(t.getMessage());
}
}
/*
*将contactArray发送回Android客户端
*/
}
}
org.apache.catalina.core.StandardWrapperValve调用
严重:路径为[/ABC]的上下文中Servlet[XYZ]的Servlet.service()
它似乎未正确配置到应用程序中。如果它在web.xml中的应用程序appart中使用上下文xml,那么最好检查servlet XYZ是否在web.xml中正确配置,特别是如果它在lib中的.jar中,则需要在web.xml中将.jar命名为资源,并且需要重新启动服务器。
它说它找不到servlet。您在XYZ servlet的doPost方法中有一个试图访问的空指针。显示doPost的代码!显示
com.mnp.abc.xyz.doPost
,并指出哪一行是116号。@JimGarrison第116行标有***
@Razvan已按要求添加了代码。您确定要在更改某些内容后重建、重新警告、重新部署吗?它不使用web.xml而使用@WebServlet(name=“xyz”,urlPatterns={/xyz})
。我最近在context.xml
中添加了连接池。我是否需要以某种方式清理这两个xml
文件?”如果它位于lib中的.jar中,那么.jar将需要在web.xml中作为资源命名。“如果没有web.xml,我们如何实现这一点?