Java Servlet:getInitParameter在Service()中不起作用
我在web.xml配置文件中添加了一些参数,如下所示:
service1 http://www.example.com/example2.html service2 http://www.example.com/example2.html ...
我尝试在我的servlet中获取参数,特别是在我的服务方法中:
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(this.getServletContext().getInitParameter("service1")); ...
但在运行时我有一个NullPointerException …如何获取web.xml中包含的参数值?
这是堆栈跟踪:
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是我尝试getInitParameter()的行
如果调用getServletContext()
抛出NPE则意味着ServletConfig
为null。
所以你已经在你自己的servlet中覆盖了init(ServletConfig config)
,而你没有按照Javadoc正确调用super.init(config)
:
由servlet容器调用,以向servlet指示servlet正在投入使用。 请参阅
Servlet.init(javax.servlet.ServletConfig)
。此实现存储从servlet容器接收的
ServletConfig
对象供以后使用。 覆盖此方法的forms时,请调用super.init(config)
。
相应修复:
public void init(ServletConfig config) throws ServletException { // Do your thing here. // ... // And then finally: super.init(config); }
或者只使用无参数的init()
方法,该方法不需要ServletConfig
因此您无需担心它。