项目采用strtus2+spring+hibernate的架构,在tomcat下部署没有问题,转到weblogic下启动报错,错误如下:
<2011-6-15 下午01时21分23秒 CST> <Error> <HTTP> <BEA-101165> <Could not load use
r defined filter in web.xml: org.apache.struts2.dispatcher.FilterDispatcher.
Unable to load configuration. - [unknown location]
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(
ConfigurationManager.java:58)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Di
spatcher.java:371)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:424)
at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.
java:213)
at weblogic.servlet.internal.FilterManager$FilterInitAction.run(FilterMa
nager.java:332)
Truncated. see log file for complete stacktrace
Error loading configuration file struts.xml - [unknown location]
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loa
dDocuments(XmlConfigurationProvider.java:165)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.ini
t(XmlConfigurationProvider.java:130)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContai
ner(DefaultConfiguration.java:155)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(
ConfigurationManager.java:55)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Di
spatcher.java:371)
Truncated. see log file for complete stacktrace
unable to attain an URLClassLoader - [unknown location]
at com.opensymphony.xwork2.util.ClassPathFinder.findMatches(ClassPathFin
der.java:80)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loa
dConfigurationFiles(XmlConfigurationProvider.java:908)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loa
dDocuments(XmlConfigurationProvider.java:161)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.ini
t(XmlConfigurationProvider.java:130)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContai
ner(DefaultConfiguration.java:155)
Truncated. see log file for complete stacktrace
>
解决方法:
在struts的配置文件struts.xml中不可以使用通配符*,将所有的xml使用决对路径include进来就可以了。例如:
<include file="com/maggie/admin/struts-admin.xml" />
造成的原因如下:
xwork的ClassPathFinder.findMatches方法里取得当前classloader的方式是
ClassLoader loader = Thread.currentThread().getContextClassLoader();
在tomcat环境下取到的是URLClassloader的实例
,而在weblogic下面却是weblogic.utils.classloaders.ChangeAwareClassLoader ,
weblogic有自己的classLoader机制,因此导致了错误。