2012-12-12 52 views
4

http://struts.apache.org/2.3.1.2/docs/webxml.html在web.xml

Struts2的配置文件的名稱按照上面的鏈接,我們可以在web.xml中指定配置文件名。所以我在以下映射中添加了config參數。

<filter> 
    <filter-name>struts2</filter-name> 
    <filter-class> 
     org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 
    </filter-class> 
    <init-param> 
     <param-name>config</param-name> 
     <param-value>struts.xml</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>*.action</url-pattern> 
</filter-mapping> 

現在我無法啓動Web應用程序。以下日誌打印在控制檯上。

SEVERE: Dispatcher initialization failed

com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=com.opensymphony.xwork2.ObjectFactory, name='default'] in public void com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.setObjectFactory(com.opensymphony.xwork2.ObjectFactory). 
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMembers(ContainerImpl.java:144) 
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMethods(ContainerImpl.java:113) 
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectors(ContainerImpl.java:90) 
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectors(ContainerImpl.java:86) 
at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:71) 
at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:67) 
at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:150) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:284) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:76) 
at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:116) 
at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:483) 
at com.opensymphony.xwork2.inject.ContainerImpl$6.call(ContainerImpl.java:523) 
at com.opensymphony.xwork2.inject.ContainerImpl$6.call(ContainerImpl.java:521) 
at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:574) 
at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:521) 
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:203) 
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66) 
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390) 
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:436) 
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69) 
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51) 
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295) 
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422) 
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115) 
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4072) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4726) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) 
at org.apache.catalina.core.StandardService.start(StandardService.java:525) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:595) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:618) 
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 

Caused by: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=com.opensymphony.xwork2.ObjectFactory, name='default'] in public void com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.setObjectFactory(com.opensymphony.xwork2.ObjectFactory). 
at com.opensymphony.xwork2.inject.ContainerImpl.createParameterInjector(ContainerImpl.java:235) 
at com.opensymphony.xwork2.inject.ContainerImpl.getParametersInjectors(ContainerImpl.java:225) 
at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.<init>(ContainerImpl.java:287) 
at com.opensymphony.xwork2.inject.ContainerImpl$3.create(ContainerImpl.java:117) 
at com.opensymphony.xwork2.inject.ContainerImpl$3.create(ContainerImpl.java:114) 
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMembers(ContainerImpl.java:141) 
... 39 more 

Dec 12, 2012 4:32:43 PM org.apache.catalina.core.StandardContext filterStart 
SEVERE: Exception starting filter struts2 
com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=com.opensymphony.xwork2.ObjectFactory, name='default'] in public void com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.setObjectFactory(com.opensymphony.xwork2.ObjectFactory). - Class: com.opensymphony.xwork2.inject.ContainerImpl 

File: ContainerImpl.java 
Method: addInjectorsForMembers 
Line: 144 - com/opensymphony/xwork2/inject/ContainerImpl.java:144:-1 
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:449) 
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69) 
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51) 
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295) 
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422) 
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115) 
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4072) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4726) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) 
at org.apache.catalina.core.StandardService.start(StandardService.java:525) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:595) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:618) 
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 

Caused by: com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=com.opensymphony.xwork2.ObjectFactory, name='default'] in public void com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.setObjectFactory(com.opensymphony.xwork2.ObjectFactory). 
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMembers(ContainerImpl.java:144) 
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMethods(ContainerImpl.java:113) 
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectors(ContainerImpl.java:90) 
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectors(ContainerImpl.java:86) 
at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:71) 
at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:67) 
at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:150) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:284) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:76) 
at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:116) 
at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:483) 
at com.opensymphony.xwork2.inject.ContainerImpl$6.call(ContainerImpl.java:523) 
at com.opensymphony.xwork2.inject.ContainerImpl$6.call(ContainerImpl.java:521) 
at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:574) 
at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:521) 
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:203) 
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66) 
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390) 
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:436) 
... 20 more 

Caused by: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=com.opensymphony.xwork2.ObjectFactory, name='default'] in public void com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.setObjectFactory(com.opensymphony.xwork2.ObjectFactory). 
at com.opensymphony.xwork2.inject.ContainerImpl.createParameterInjector(ContainerImpl.java:235) 
at com.opensymphony.xwork2.inject.ContainerImpl.getParametersInjectors(ContainerImpl.java:225) 
at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.<init>(ContainerImpl.java:287) 
at com.opensymphony.xwork2.inject.ContainerImpl$3.create(ContainerImpl.java:117) 
at com.opensymphony.xwork2.inject.ContainerImpl$3.create(ContainerImpl.java:114) 
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMembers(ContainerImpl.java:141) 
... 39 more 

Dec 12, 2012 4:32:43 PM org.apache.catalina.core.StandardContext start 
SEVERE: Error filterStart 
Dec 12, 2012 4:32:43 PM org.apache.catalina.core.StandardContext start 
SEVERE: Context [/theStruts2] startup failed due to previous errors 
Dec 12, 2012 4:32:43 PM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 
SEVERE: The web application [/theStruts2] created a ThreadLocal with key of type [com.opensymphony.xwork2.inject.ContainerImpl$10] (value [[email protected]]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@1fb61fb6]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak. 
Dec 12, 2012 4:32:43 PM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 
SEVERE: The web application [/theStruts2] created a ThreadLocal with key of type [com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony.xwork2.inject.Con[email protected]]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@13d013d0]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak. 

回答

7

您需要定義struts-default.xmlstruts-plugin.xml以及內部<init-param>

<init-param> 
    <param-name>config</param-name> 
    <param-value>struts-default.xml,struts-plugin.xml,struts.xml</param-value> 
</init-param> 

沒有它Struts2找不到必要的beans/results/interceptors/etc。在struts-default.xml文件中定義。當然,您可以將所有聲明從默認文件複製到配置文件中。