在配置struts2时,开始采用的Tomcat5.5服务器,启动该服务器时,总是显示如下错误:
严重: ********** FATAL ERROR STARTING UP STRUTS-SPRING INTEGRATION **********
Looks like the Spring listener was not configured for your web app!
Nothing will work until WebApplicationContextUtils returns a valid ApplicationContext.
You might need to add the following to web.xml:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2008-12-14 15:06:26 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter struts2
java.lang.NullPointerException
at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:189)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyResultType(XmlConfigurationProvider.java:479)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addResultTypes(XmlConfigurationProvider.java:450)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:407)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:239)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:111)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:152)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:395)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:452)
at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:205)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:221)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:302)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:78)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3635)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4222)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
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(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
资料查询
在google查询了一下,网上给出了多种解决方案,
1)尝试将spring集成到struts2下,所以需要修改web.xml和添加applicationContext.xml
web.xml 部分代码增加
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
然后在WebRoot>WEB-INF>下加一个空的applicationContext.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="autodetect">
</beans>
2)WEB-INF中的jar包导入有问题,仅仅导入需要的包,如下图所示,仅仅导入了最最基本的jar包。
尝试了上面的两种思路,都无法解决上面的问题。
解决方法
最后抱着“死马当作活马医”的态度,分析可能是tomcat5.5与struts2有兼容性的问题,尝试将tomcat5.5更好为了tomcat6,重新启动服务器,居然好使了。
信息: Parsing configuration file [struts-default.xml]
2008-12-14 15:17:37 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider register
信息: Parsing configuration file [struts-plugin.xml]
2008-12-14 15:17:37 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider register
信息: Parsing configuration file [struts.xml]
2008-12-14 15:17:37 org.apache.struts2.config.Settings getLocale
警告: Settings: Could not parse struts.locale setting, substituting default VM locale
2008-12-14 15:17:37 com.opensymphony.xwork2.config.impl.DefaultConfiguration$ContainerProperties setProperty
信息: Overriding property struts.i18n.reload - old value: false new value: true
2008-12-14 15:17:37 com.opensymphony.xwork2.config.impl.DefaultConfiguration$ContainerProperties setProperty
信息: Overriding property struts.configuration.xml.reload - old value: false new value: true
2008-12-14 15:17:37 com.opensymphony.xwork2.util.ObjectTypeDeterminerFactory <clinit>
信息: Setting DefaultObjectTypeDeterminer as default ...
2008-12-14 15:17:37 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2008-12-14 15:17:37 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2008-12-14 15:17:37 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/0 config=null
2008-12-14 15:17:37 org.apache.catalina.startup.Catalina start
信息: Server startup in 591 ms
总结
花费了几个小时时间,终于搞定了这个麻烦的小问题,不过经过这么一折腾,对struts2的框架认识深入了许多,也看了其中一些源代码。算是一点收获了。Software development is science &art .
y1pIQAMhNCsObrju4X1MLelOnauHK8IxN2a_Uxn44FbDlkCdnO1P7GMAsyS77xQjE1HD3X2csoY8GzReOqHXn1Mqg.jpeg
y1pmMBtHRTvrjckKzUWM7wUn5r-uSA09kjFU53QgDOXiziz7UHWcMpNtDIX256vUGYYAuLP0Xrqayx8slK2AGhfEA.jpeg
y1pwoQYCQHUwO0eOVaZVP7I-7xsjv8zd_B9ev--knlgmrEx1xK9EeynUlW7DSxHmEyzFUDR7YECh1LLyzjFgcS-lA.jpeg