2010-02-23 12 views
27

Ottengo il seguente errore, quale potrebbe essere il problema?Perché Servlet.service() per servlet jsp ha generato questa eccezione?

mio contesto descrittore:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <servlet> 
    <servlet-name>UploadServlet</servlet-name> 
    <servlet-class>controller.UploadServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>UploadServlet</servlet-name> 
    <url-pattern>/UploadServlet</url-pattern> 
    </servlet-mapping> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 
SEVERE: Servlet.service() for servlet jsp threw exception 
java.lang.NullPointerException 
    at org.apache.jsp.index_jsp._jspInit(index_jsp.java:22) 
    at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52) 
    at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:159) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    at java.lang.Thread.run(Unknown Source) 
Feb 23, 2010 11:35:28 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet jsp threw exception 
java.lang.NullPointerException 
    at org.apache.jsp.index_jsp._jspInit(index_jsp.java:22) 
    at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52) 
    at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:159) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    at java.lang.Thread.run(Unknown Source) 
+0

sembra è venuta da una natura preservata di file index.jsp, potresti passato? – Kartoch

risposta

33

Può essere causato da una contaminazione del percorso di classe. Verifica che il tuo numero /WEB-INF/lib non contenga qualcosa come jsp-api-*.jar.

+0

L'eliminazione manuale del file jar ha risolto il problema. Grazie. – tkt986

+2

Questo è stato il mio caso, come posso evitare che ciò accada di nuovo? – tomasb

+0

Ho lo stesso problema, ma anche dopo aver rimosso il file getta ancora la stessa eccezione. Gradirei se tu potessi darmi una mano, la mia domanda è su http://stackoverflow.com/questions/22086406/why-am-i-receiving-nullpointerexception-on-my-jsp-file – AlexCartio1

2

Il problema è nella tua JSP, molto probabilmente si sta chiamando un metodo su un oggetto che è nullo in fase di esecuzione.

Sta accadendo nella chiamata _jspInit(), che è un po 'più insolito ... il codice problema è probabilmente una dichiarazione di metodo come <%! %>


Aggiornamento: Ho riprodotto solo in questo sovrascrivendo il metodo _jspInit(). E 'quello che stai facendo? Se è così, non è raccomandato - è per questo che inizia con un _.

5

Ho avuto questo errore; è successo in qualche modo spontaneamente e la pagina si fermava nel browser nel mezzo di un tag HTML (non una sezione di codice). Era sconcertante!

Risulta, ho lasciato una variabile fuori portata e il garbage collector lo ha spazzato via e poi ho provato a usarlo. Quindi il tempismo apparentemente casuale.

Per dare un esempio più concreto ... all'interno di un metodo, ho avuto qualcosa di simile:

Foo[] foos = new Foo[20]; 
// fill up the "foos" array... 
return Arrays.asList(foos); // this returns type List<Foo> 

Ora nella mia pagina JSP, ho chiamato quel metodo e utilizzato l'oggetto lista restituita da esso. L'oggetto List è supportato da quella matrice "foos"; ma, l'array è andato fuori portata quando sono tornato dal metodo (poiché è una variabile locale). Così poco dopo il ritorno, il garbage collector ha spazzato via la matrice "foos", e il mio accesso all'Elenco ha causato una NullPointerException dal momento che il suo array sottostante è stato cancellato.

In realtà mi chiedevo, come ho scritto il metodo di cui sopra, se ciò sarebbe accaduto.

Il problema di fondo ancora più profondo era l'ottimizzazione prematura. Volevo una lista, ma sapevo che avrei esattamente 20 elementi, quindi ho pensato che avrei cercato di essere più efficiente di new ArrayList<Foo>(20), che imposta solo una dimensione iniziale di 20 ma può essere meno efficiente del metodo che ho usato. Quindi, per risolverlo, ho appena creato il mio ArrayList, lo ho riempito e restituito. Niente più strani errori.

13

Se il progetto è basato su Maven, ricordarsi di impostare l'ambito su Fornito per tali dipendenze come servlet-api, jsp-api. In caso contrario, questi jar verranno esportati su WEB-INF/lib e quindi contaminati con quelli presenti nel server Tomcat. Ciò causa problemi dolorosi.

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>2.5</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>javax.servlet.jsp</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.1</version> 
    <scope>provided</scope> 
</dependency> 
+3

ho impostato l'oscilloscopio come si può vedere sopra ma sta ancora accadendo, altri suggerimenti? – tomasb

+0

Questo funziona perfettamente per me. Grazie! – Michel

1

Ho fatto del mio meglio per seguire le risposte di cui sopra. Ma ho sotto la ragione per lo stesso.

Nota: questo è per la distribuzione di maven + eclipse + tomcat e il problema affrontato in particolare con mvc a molla.

1- Se si includono dipendenze servlet e jsp, contrassegnarli come forniti in ambito.

<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>javax.servlet.jsp-api</artifactId> 
     <version>2.3.1</version> 
     <scope>provided</scope> 
    </dependency> 
  1. Forse si potrebbe essere compresi JSTL come dipendenza. Quindi, jsp-api.jar e servlet-api.jar verranno inclusi. Quindi, è necessario escludere servlet-api e jsp-api distribuiti come lib richiesti nella destinazione o in "WEB-INF/lib" come indicato di seguito.

    <dependency> 
        <groupId>javax.servlet.jsp.jstl</groupId> 
        <artifactId>jstl-api</artifactId> 
        <version>1.2</version> 
        <exclusions> 
         <exclusion> 
          <artifactId>servlet-api</artifactId> 
          <groupId>javax.servlet</groupId> 
         </exclusion> 
         <exclusion> 
          <artifactId>jsp-api</artifactId> 
          <groupId>javax.servlet.jsp</groupId> 
         </exclusion> 
        </exclusions> 
    </dependency> 
    
Problemi correlati