2010-02-23 302 views
27

Me sale el siguiente error, ¿cuál podría ser el problema?¿Por qué Servlet.service() para servlet jsp lanzó esta excepción?

Mi descriptor de contexto:

<?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

Parece que viene de youy archivo index.jsp, que podría pasado? – Kartoch

Respuesta

33

Puede ser causado por una contaminación de classpath. Compruebe que /WEB-INF/lib no contenga algo como jsp-api-*.jar.

+0

Eliminar manualmente el archivo jar solucionó el problema. Gracias. – tkt986

+2

thx este fue mi caso, ¿cómo puedo evitar que esto vuelva a pasar? – tomasb

+0

Tengo el mismo problema, pero incluso después de eliminar el archivo, arroja la misma excepción. Le agradecería si pudiera ayudarme, mi pregunta es en http://stackoverflow.com/questions/22086406/why-am-i-receiving-nullpointerexception-on-my-jsp-file – AlexCartio1

2

El problema está en su JSP, más probable es que está llamando a un método en un objeto que es nulo en tiempo de ejecución.

que está ocurriendo en la llamada _jspInit(), que es un poco más inusual ... el código de problema es, probablemente, una declaración de método como <%! %>


Actualización: Sólo he reproducido este sobreescribiendo el método _jspInit(). ¿Es eso lo que estás haciendo? Si es así, no es recomendable, es por eso que comienza con un _.

5

Tuve este error; sucedió de manera espontánea, y la página se detendría en el navegador en el medio de una etiqueta HTML (no una sección de código). ¡Fue desconcertante!

Resulta que dejé que una variable fuera de alcance y el recolector de basura lo barrió y luego traté de usarlo. Por lo tanto, el momento aparentemente aleatorio.

Para dar un ejemplo más concreto ... Dentro de un método, que tenía algo así como:

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

Ahora en mi página JSP, lo que se llama método y utilizado el objeto lista devuelta por el mismo. El objeto List está respaldado por esa matriz "foos"; pero, la matriz salió del alcance cuando volví del método (ya que es una variable local). Poco después de regresar, el recolector de basura barrió la matriz de "foos", y mi acceso a la Lista provocó una NullPointerException ya que su matriz subyacente ahora se borró.

De hecho, me pregunté, como escribí el método anterior, si eso sucedería.

El problema subyacente aún más profundo era la optimización prematura. Quería una lista, pero sabía que tendría exactamente 20 elementos, así que pensé que trataría de ser más eficiente que new ArrayList<Foo>(20), que solo establece un tamaño inicial de 20 pero posiblemente puede ser menos eficiente que el método que utilicé. Así que, por supuesto, para solucionarlo, acabo de crear mi ArrayList, rellenarla y devolverla. No más errores extraños

13

Si su proyecto está basado en Maven, recuerde configurar el alcance para tales dependencias como servlet-api, jsp-api. De lo contrario, estos archivos se exportarán a WEB-INF/lib y, por lo tanto, se contaminarán con los del servidor de Tomcat. Eso causa problemas dolorosos.

<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

he establecido el alcance como se puede ver arriba, pero todavía está sucediendo, ¿hay algún otro consejo? – tomasb

+0

Esto funciona perfecto para mí. ¡Gracias! – Michel

1

He intentado hacer mi mejor esfuerzo para seguir las respuestas dadas anteriormente. Pero tengo el siguiente motivo para lo mismo.

Nota: Esto es para el despliegue y problema de maven + eclipse + tomcat que se enfrenta especialmente con spring mvc.

1- Si incluye la dependencia de servlet y jsp, márquelos en el alcance.

<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. Posiblemente podría ser incluidos como jstl dependencia. Por lo tanto, jsp-api.jar y servlet-api.jar se incluirán junto. Por lo tanto, es necesario excluir el servlet-api y el jsp-api desplegados como lib requeridos en el destino o en "WEB-INF/lib" como se indica a continuación.

    <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> 
    
Cuestiones relacionadas