structs配置文件错误(MyEclipse 8.5)

最近新建一个项目,发现tomcat启动的时候时,控制台一直报告异常信息:

10 12 22 09:49:016,306  ERROR Digester:1463 - Parse Error at line 21 column 17: The content of element type "struts-config" must match "(data-sources?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)".
org.xml.sax.SAXParseException: The content of element type "struts-config" must match "(data-sources?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)".
。。。。。。

虽然这不影响系统的运行,但看到每次启动就报这一堆异常信息,心里也很不爽。

在网上搜索了下解决办法,但是大部分都是只有提问,没有结果,或者就是解决办法不管用。于是,下决心自己去解决。认真查看异常信息,发现如下重要信息:

at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:738)
 at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:687)

于是,找到对应源代码:ActionServlet中的方法initConfigDigester()

 

[c-sharp]  view plain copy
  1. if (configDigester != null) {  
  2.             return (configDigester);  
  3.         }  
  4.   
  5.         // Create a new Digester instance with standard capabilities  
  6.         configDigester = new Digester();  
  7.         configDigester.setNamespaceAware(true);  
  8.         configDigester.setValidating(this.isValidating());//注意此处!!!  
  9.         configDigester.setUseContextClassLoader(true);  
  10.         configDigester.addRuleSet(new ConfigRuleSet());  
  11.   
  12.         for (int i = 0; i < registrations.length; i += 2) {  
  13.             URL url = this.getClass().getResource(registrations[i + 1]);  
  14.   
  15.             if (url != null) {  
  16.                 configDigester.register(registrations[i], url.toString());  
  17.             }  
  18.         }  
  19.   
  20.         this.addRuleSets();  

 

注意标注【注意的代码行】,其调用的代码如下:

 

[c-sharp]  view plain copy
  1. private boolean isValidating() {  
  2.        boolean validating = true;  
  3.        String value = getServletConfig().getInitParameter("validating");  
  4.   
  5.        if ("false".equalsIgnoreCase(value) || "no".equalsIgnoreCase(value)  
  6.            || "n".equalsIgnoreCase(value) || "0".equalsIgnoreCase(value)) {  
  7.            validating = false;  
  8.        }  
  9.   
  10.        return validating;  
  11.    }  

 

分析到此处,大家相信都知道怎么回事了。赶紧前往web.xml配置org.apache.struts.action.ActionServlet的地方加上

 

[c-sharp]  view plain copy
  1.   
  2.             validating  
  3.             false  
  4.           
  

 

启动服务器,果然搞定!

你可能感兴趣的:(Java)