做第二个ssh工程的时候,启tomcat一直报struts2起不来。但是配置完全按照第一个copy的,让我极度困扰
2012-1-11 13:52:32 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter struts2
Unable to load configuration. - [unknown location]
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:428)
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:3838)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4488)
于是去查了struts_2.2.1.1里面org.apache.struts2.dispatcher.Dispatcher的源代码 http://code.lupaworld.com/code.php?mod=list&itemid=33&path=./struts_2.2.1.1/
407. try {
408. init_DefaultProperties(); // [1]
409. init_TraditionalXmlConfigurations(); // [2]
410. init_LegacyStrutsProperties(); // [3]
411. init_CustomConfigurationProviders(); // [5]
412. init_FilterInitParameters() ; // [6]
413. init_AliasStandardObjects() ; // [7]
414.
415. Container container = init_PreloadConfiguration();
416. container.inject(this);
417. init_CheckConfigurationReloading(container);
418. init_CheckWebLogicWorkaround(container);
419.
420. if (!dispatcherListeners.isEmpty()) {
421. for (DispatcherListener l : dispatcherListeners) {
422. l.dispatcherInitialized(this);
423. }
424. }
425. } catch (Exception ex) {
426. if (LOG.isErrorEnabled())
427. LOG.error("Dispatcher initialization failed", ex);
428. throw new StrutsException(ex);
429. }
发现报错的是一个catch,应该是 init_DefaultProperties(); // [1] //读取xml文件 的问题
再找原因,原来是xml解析的jar包的问题两个项目的 xerces-2.6.2.jar 冲突
解决方法是,将两个xerces-2.6.2.jar从项目里删除,放到tomcat的lib下面或者用两个tomcat