java tags - Pourquoi Servlet.service()pour servlet jsp at-il créé cette exception?




jstl balise (5)

Je reçois l'erreur suivante, quel pourrait être le problème?

Mon descripteur de contexte:

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

Answers

Cela peut être causé par une contamination de classpath. Vérifiez que vous /WEB-INF/lib ne contient pas quelque chose comme jsp-api-*.jar .


Le problème réside dans votre JSP, vous appelez très probablement une méthode sur un objet qui est nul à l'exécution.

Cela se produit dans l'appel _jspInit (), ce qui est un peu plus inhabituel ... le code de problème est probablement une déclaration de méthode comme <%! %> <%! %>

Mise à jour: je ne l'ai reproduite qu'en remplaçant la méthode _jspInit (). Est-ce ce que tu fais? Si oui, ce n'est pas recommandé - c'est pourquoi cela commence par un _.


J'ai eu cette erreur; cela s'est passé de manière assez spontanée, et la page s'arrêtait dans le navigateur au milieu d'une balise HTML (pas une section de code). C'était déconcertant!

Il s'avère que je laisse une variable hors de portée et que le ramasse-miettes l'a emporté et j'ai essayé de l'utiliser. Ainsi, le timing apparemment aléatoire.

Pour donner un exemple plus concret ... Dans une méthode, j'avais quelque chose comme:

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

Maintenant, dans ma page JSP, j'ai appelé cette méthode et utilisé l'objet List renvoyé par celle-ci. L'objet List est soutenu par ce tableau "foos"; mais, le tableau est sorti de la portée quand je suis revenu de la méthode (puisque c'est une variable locale). Donc, peu de temps après, le ramasse-miettes a supprimé le tableau "foos" et mon accès à la liste a provoqué une exception NullPointerException puisque son tableau sous-jacent était maintenant effacé.

Je me suis en fait demandé, en écrivant la méthode ci-dessus, si cela se produirait.

Le problème sous-jacent encore plus profond était l'optimisation prématurée. Je voulais une liste, mais je savais que j'aurais exactement 20 éléments, alors je me suis dit que j'essaierais d'être plus efficace que le new ArrayList<Foo>(20) qui ne fixe qu'une taille initiale de 20 mais peut être moins efficace que la méthode que j'ai utilisée. Alors, bien sûr, pour y remédier, je viens de créer ma ArrayList, de la remplir et de la renvoyer. Plus aucune erreur étrange.


J'ai fait de mon mieux pour suivre les réponses données ci-dessus. Mais j'ai ci-dessous raison pour la même chose.

Note: Ceci est pour le déploiement de maven + eclipse + tomcat et les problèmes rencontrés en particulier avec spring mvc.

1- Si vous incluez la dépendance servlet et jsp, veuillez les indiquer dans la portée.

<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. Peut-être que vous pourriez inclure jstl comme dépendance. Ainsi, jsp-api.jar et servlet-api.jar seront inclus. Donc, il faut exclure les servlet-api et jsp-api en cours de déploiement comme requis dans la cible ou dans "WEB-INF / lib" comme indiqué ci-dessous.

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





java jsp