2012-07-15 121 views
2

我無法弄清楚爲什麼我得到這個錯誤。我已檢查並重新檢查我的代碼似乎沒有發現錯誤。 XYZ的servlet爲什麼Servlet.service()在與路徑[/ ABC]上下文中的servlet [XYZ]拋出異常

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) 

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 
     */ 

     } 
    } 
+0

您有一個空指針,您試圖訪問您的XYZ servlet的doPost方法。顯示doPost的代碼! – Razvan 2012-07-15 22:41:01

+0

顯示'com.mnp.abc.xyz.doPost'的代碼,並指出哪一行是116. – 2012-07-15 22:46:36

+0

@JimGarrison 116行用***標記。 – 2012-07-15 22:52:56

回答

5

org.apache.catalina.core.StandardWrapperValve調用 重度:Servlet.service()進行的servlet [XYZ]與路徑上下文[/ ABC]

它看起來是不正確地配置到應用程序中。如果它在web.xml的應用程序appart中使用上下文xml,那麼無論如何都要檢查並確保servlet XYZ在web.xml中正確配置,尤其是在lib中的.jar文件中。 jar將需要在web.xml中作爲資源命名,並且服務器將需要重新啓動。 它說它找不到servlet。

+0

它不使用web.xml代替'@WebServlet(name =「XYZ」,urlPatterns = {「/ XYZ」})''。我最近在'context.xml'中添加了連接池。我需要以某種方式清理兩個'xml'文件嗎? – 2012-07-15 22:59:41

+1

我不得不在Netbeans上完全卸載並重新安裝。 – 2012-07-19 13:30:15

+0

「如果它位於lib中的.jar中,那麼.jar將需要在web.xml中作爲資源命名」如果沒有web.xml,我們如何實現這一點? – Dish 2018-02-16 05:42:10

相關問題