tomcat 启动后,报出了如下异常
java.lang.NullPointerException at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003),
- 2010-05-17 16:09:14,031[ ApplicationContext.java:676:ERROR] StandardWrapper.Throwable
- java.lang.NullPointerException
- at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003)
- at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955)
- at org.apache.struts.action.ActionServlet.init(ActionServlet.java:470)
- at cn.ac.iscas.core.control.LocalActionServlet.init(LocalActionServlet.java:124)
- at javax.servlet.GenericServlet.init(GenericServlet.java:212)
- at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
- at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
- at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
- at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
- at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
- at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
- at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
- at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
- at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
- at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
- at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
- at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
- at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
- at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
- at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
- at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
- at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
- at org.apache.catalina.core.StandardService.start(StandardService.java:448)
- at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
- at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
- at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
- 2010-05-17 16:09:14,047[ StandardContext.java:3958:ERROR] Servlet /pm threw load() exception
- java.lang.NullPointerException
- at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003)
- at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955)
- at org.apache.struts.action.ActionServlet.init(ActionServlet.java:470)
- at cn.ac.iscas.core.control.LocalActionServlet.init(LocalActionServlet.java:124)
- at javax.servlet.GenericServlet.init(GenericServlet.java:212)
- at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
- at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
- at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
- at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
- at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
- at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
- at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
- at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
- at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
- at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
- at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
- at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
- at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
- at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
- at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
- at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
- at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
- at org.apache.catalina.core.StandardService.start(StandardService.java:448)
- at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
- at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
- at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
在网上查了半天,说什么的都有,具体到自己的项目,错误的原因是下面的:
在我的项目的 web.xml中,有关config的配置是:
- <init-param>
- <param-name>config</param-name>
- <param-value>/WEB-INF/struts-config-hl.xml,/WEB-INF/struts-config.xml,/WEB-INF/struts-config-pm.xml,/WEB-INF/struts-config-spa.xml,/WEB-INF/struts-config-mt.xml,/WEB-INF/struts-config-org.xml,/WEB-INF/struts-config-scm.xml,/WEB-INF/struts-config-rm.xml,/WEB-INF/struts-config-dataview.xml,/WEB-INF/struts-config-cus.xml,/WEB-INF/struts-config-scmt.xml</param-value>
- </init-param>
但是在更新代码的时候,恰巧没有把WEB-INF/struts-config-scmt.xml这个文件给更新下来,所以一直报上述错误。
错误查询步骤,在我的项目中,使用了struts1.1,其中的ActionServlet类中parseModuleConfigFile方法是:
- private void parseModuleConfigFile(
- String prefix,
- String paths,
- ModuleConfig config,
- Digester digester,
- String path)
- throws UnavailableException {
- InputStream input = null;
- try {
- URL url = getServletContext().getResource(path);
- InputSource is = new InputSource(url.toExternalForm());
- input = getServletContext().getResourceAsStream(path);
- is.setByteStream(input);
- digester.parse(is);
- getServletContext().setAttribute(Globals.MODULE_KEY + prefix, config);
- } catch (MalformedURLException e) {
- handleConfigException(paths, e);
- } catch (IOException e) {
- handleConfigException(paths, e);
- } catch (SAXException e) {
- handleConfigException(paths, e);
- } finally {
- if (input != null) {
- try {
- input.close();
- } catch (IOException e) {
- throw new UnavailableException(e.getMessage());
- }
- }
- }
- }
第1003行就是
URL url = getServletContext().getResource(path);
也就是说在查找配置文件的过程中,有一个path找不多对应的资源文件;
然后在web.xml的config字段中,挨个检查配置文件,发现找不到 /WEB-INF/struts-config-scmt.xml 对应的源文件,于是找到出错原因。