Java Servlet:getInitParameter在服务()中不起作用
我在web.xml配置文件中添加了一些参数,如下所示:Java Servlet:getInitParameter在服务()中不起作用,java,servlets,Java,Servlets,我在web.xml配置文件中添加了一些参数,如下所示: <context-param> <param-name>service1</param-name> <param-value>http://www.example.com/example2.html</param-value> </context-param> <context-param> <param-name&
<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>
...
但在运行时我有一个NullPointerException。。。如何获取web.xml中包含的参数值
这是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)
java:66是我尝试getInitParameter()的行。如果调用抛出NPE,则表示ServletConfig
为空
因此,您已经在自己的servlet中重写了init(ServletConfig)
,并且您没有按照以下规则正确调用super.init(config)
:
由servlet容器调用,以向servlet指示servlet正在投入服务。看
此实现存储从servlet容器接收的对象,以供以后使用重写此形式的方法时,调用super.init(config)
相应地进行修正:
public void init(ServletConfig config) throws ServletException {
// Do your thing here.
// ...
// And then finally:
super.init(config);
}
或者只使用无参数的
init()
方法,该方法不采用ServletConfig
,因此您不必担心它。仅这一行就不可能抛出NullPointerException
。请发布stacktrace并给我们指出实际行。@BalusC:如果this.getServletContext()
为null
,就会这样做,但我不知道为什么会这样happen@skaffman:你明白。它从不返回null。
public void init(ServletConfig config) throws ServletException {
// Do your thing here.
// ...
// And then finally:
super.init(config);
}