was6.1上部署struts2应用FilterDispatcher错误

was 6.1.0.19部署struts2应用,访问页面,出现如下错误:

Error 500: Filter [struts]: not a filter class

 

查看后台日志,异常:

java.lang.ClassCastException: org.apache.struts2.dispatcher.FilterDispatcher incompatible with javax.servlet.Filter at com.ibm.ws.webcontainer.filter.WebAppFilterManager._loadFilter(WebAppFilterManager.java:427) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.loadFilter(WebAppFilterManager.java:385) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterInstanceWrapper(WebAppFilterManager.java:244) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterChain(WebAppFilterManager.java:302) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:792) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:679) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:565) at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478) at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:122) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:226) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.handleRequest(AbstractJSPExtensionProcessor.java:285) at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3440) at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267) at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815) at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1461) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:118) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267) 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:1473)

 

web.xml配置:

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

 

同一个struts2的应用,我在同一个was服务器上部署成功过的。于是,想到可能是这次同事部署的时候,设置的参数不一样。

 

首先想到的是,检查 invokefilterscompatibility,发现已经设置。如没有设置的,参照下面的步骤:

在WAS Console -> Application Servers -> [SERVER1] -> Web Container Settings -> Web Container -> Custom Properties里,增加一个custom property,名字为com.ibm.ws.webcontainer.invokefilterscompatibility,值为true。

 

然后检查类装入器配置。

WAS控制台->应用程序->企业应用程序->[SomeWebApp]->类装入和更新检测,

“类装入器顺序”选择的是“类已装入并且是先使用应用程序类装入器”,改成“类已装入并且是先使用父类装入器”。

“WAR 类装入器策略”选择的是“应用程序中每个 WAR 文件的类装入器”,保持不变。

was6.1上部署struts2应用FilterDispatcher错误_第1张图片

WAS控制台->应用程序->企业应用程序->[SomeWebApp]->管理模块->[SomeWebApp.war],

“类装入器顺序”选择的是“类已装入并且是先使用应用程序类装入器”,改成“类已装入并且是先使用父类装入器”。

was6.1上部署struts2应用FilterDispatcher错误_第2张图片

重启Web应用,问题解决。

 

你可能感兴趣的:(Web,struts,properties,filter,企业应用,application)