2012-12-12 64 views
0

我想在一個應用程序中使用兩個struts2篩選器。我在web.xml中有以下過濾器定義。 「struts2」過濾器已經存在,我只是添加了「伴侶」過濾器。一個Web應用程序中的兩個Struts2篩選器

<filter> 
    <filter-name>struts2</filter-name> 
    <filter-class> 
     org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 
    </filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>*.abc</url-pattern> 
</filter-mapping> 


<filter> 
    <filter-name>companion</filter-name> 
    <filter-class> 
     org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 
    </filter-class> 
    <init-param> 
     <param-name>config</param-name> 
     <param-value>companion.xml</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>companion</filter-name> 
    <url-pattern>*.xyz</url-pattern> 
</filter-mapping> 

我在類路徑中創建了兩個配置文件「struts.xml」和「companion.xml」。這些文件是完全獨立的。我還爲每個配置文件中的常量struts.action.extension定義了適當的值(struts2 - > abc和companion - > xyz)。一些操作及其映射也可在兩個配置文件中使用。

現在,當我訪問某個操作時,它會在我的瀏覽器上顯示以下消息。

Error 404: SRVE0190E: File not found: /fetchUserInfo.xyz

以下日誌消息是從服務器日誌中獲取的。

12/12/12 15:48:24.846, ERROR, [WebContainer : 0], 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 com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.init(FilterInstanceWrapper.java:142) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager._loadFilter(WebAppFilterManager.java:465) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.loadFilter(WebAppFilterManager.java:379) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterInstanceWrapper(WebAppFilterManager.java:238) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterChain(WebAppFilterManager.java:296) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:721) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:673) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:688) 
at com.ibm.ws.wswebcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:96) 
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.invokeFilters(DefaultExtensionProcessor.java:758) 
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:718) 
at com.ibm.ws.wswebcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:113) 
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3252) 
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:264) 
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:811) 
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1439) 
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:112) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:454) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:383) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:263) 
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214) 
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) 
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136) 
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195) 
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743) 
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873) 
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1469) 

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) 
... 51 more 

是否可以在一個應用程序中使用兩個過濾器?如果是這樣,我錯過了什麼?

+0

此外,我使用WebSphere 6.1。 –

回答

0

問題通過定義struts-default.xmlstruts-plugin.xml以及companion.xml來解決。

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

參考:https://stackoverflow.com/a/13839585/1307229

相關問題