2010-06-14 5 views
2

J'ai ajouté quelques paramètres dans mon fichier de configuration web.xml, comme suit:Java Servlet: getInitParameter fonctionne pas dans le service()

<context-param> 
    <param-name>service1</param-name> 
    <param-value>http://www.example.com/example2.html</param-value> 
    </context-param> 
    <context-param> 
    <param-name>service2</param-name> 
    <param-value>http://www.example.com/example2.html</param-value> 
    </context-param> 
    ... 

J'essaie d'obtenir le paramètre dans mon servlet, en particulier dans ma méthode de service:

protected void service(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
    System.out.println(this.getServletContext().getInitParameter("service1")); 
    ... 

mais à l'exécution je NullPointerException ... Comment puis-je obtenir la valeur du paramètre inclus dans web.xml?

C'est le stacktrace:

GRAVE: Servlet.service() for servlet DispatcherServlet threw exception 
java.lang.NullPointerException 
    at javax.servlet.GenericServlet.getServletContext(GenericServlet.java:160) 
    at it.servlethope.DispatcherServlet.service(DispatcherServlet.java:66) 
    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.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) 
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    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:127) 
    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:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Unknown Source) 

DispatcherServlet.java:66 est la ligne où je tente le getInitParameter()

+1

Cette ligne seule peut lancer 'NullPointerException'. S'il vous plaît poster le stacktrace et pointez-nous la ligne ** réelle **. – BalusC

+0

@BalusC: Si 'this.getServletContext()' est 'null', mais je ne vois pas pourquoi cela arriverait – skaffman

+0

@skaffman: vous le comprenez. Il ne retourne jamais nul. – BalusC

Répondre

5

Si vous appelez getServletContext() jette NPE alors cela signifie que la ServletConfig est nulle.

Vous avez remplacé init(ServletConfig config) dans votre propre servlet et vous n'êtes pas appeler correctement super.init(config) selon la Javadoc:

Appelé par le conteneur de servlet pour indiquer à un servlet que le servlet est mis en service . Voir Servlet.init(javax.servlet.ServletConfig).

Cette implémentation stocke l'objet ServletConfig qu'elle reçoit du conteneur de servlet pour une utilisation ultérieure. En remplaçant cette forme de la méthode, appelez super.init(config).

Fix en conséquence:

public void init(ServletConfig config) throws ServletException { 
    // Do your thing here. 
    // ... 
    // And then finally: 
    super.init(config); 
} 

Ou tout simplement utiliser la méthode parameterless init() qui ne prend pas ServletConfig afin que vous ne devez pas vous inquiéter à ce sujet.

Questions connexes