Pourquoi Servlet?service() de la servlet jsp lever cette exception?

j'obtiens l'erreur suivante, ce qui 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)
28
demandé sur kapex 2010-02-24 00:52:13

5 réponses

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

36
répondu axtavt 2010-02-23 22:44:54

si votre projet est basé sur Maven, n'oubliez pas de définir scope à provided pour des dépendances telles que servlet-api, JSP-api. Sinon, ces bocaux seront exportés vers WEB-INF / lib et donc contamineront ceux du serveur Tomcat. Qui provoque des problèmes douloureux.

<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>
14
répondu bnguyen82 2012-03-13 04:52:42

j'ai eu cette erreur; c'est arrivé un peu spontanément, et la page s'arrêtait dans le navigateur au milieu d'une balise HTML (pas une section de code). Il est déconcertant!

Pour donner un exemple plus concret... À l'intérieur d'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 retourné par elle. 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 (puisqu'il s'agit d'une variable locale). Ainsi, peu de temps après son retour, le collecteur d'ordures a balayé le tableau "foos", et mon accès à la liste a causé une NullPointerException puisque son tableau sous-jacent a été maintenant effacé.

en fait, je me suis demandé, comme j'ai écrit la méthode ci-dessus, si cela se produirait.

encore plus profond problème sous-jacent est l'optimisation prématurée. Je voulais une liste, mais je savais que j'aurais exactement 20 éléments, donc je me suis dit que j'essaierais d'être plus efficace que new ArrayList<Foo>(20) qui n'établit une taille initiale de 20, mais peut éventuellement être moins efficace que la méthode que j'ai utilisé. Donc bien sûr, pour le réparer, j'ai créé mon tableau, je l'ai rempli et je l'ai retourné. Pas plus étrange erreur.

5
répondu Ricket 2010-11-01 04:16:28

le problème est dans votre JSP, très probablement vous appelez une méthode sur un objet qui est null à 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: j'ai seulement reproduit ceci en remplaçant la méthode _jspInit (). Est-ce que vous êtes en train de faire? Si oui, il n'est pas recommandé - c'est pourquoi il commence par un _.

3
répondu brabster 2010-02-23 22:17:14

j'ai essayé de mon mieux pour suivre les réponses données ci-dessus. Mais j'ai une raison INFRA pour la même.

Note: Ceci est pour le déploiement maven+eclipse+tomcat et le problème rencontré en particulier avec MVC printemps.

1-Si vous incluez les dépendances servlet et jsp, veuillez les marquer dans scope.

<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 incluez jstl comme dépendance. Donc, jsp-api.jar et servlet-api.jar va être inclus. Donc, besoin d' exclure le servlet-api et le jsp-api déployés selon les besoins lib dans target 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>
    
2
répondu pkm1986 2016-05-06 18:14:59