struts2中如何自动加载xml文件(不用修改配置文件)

来源:互联网 发布:fkshow软件安卓版 编辑:程序博客网 时间:2024/05/29 18:00
1.重写FilterDispatcher 类的三个方法,我的struts-*.xml的路径在WEB-INF/modules/struts文件夹下

,JLTEnvironment类为我的应用的配置路径

Java代码 复制代码
  1. public class JLTFilterDispatcher extends FilterDispatcher {    
  2. @Override  
  3.  protected Dispatcher createDispatcher(FilterConfig rConfig)         {    
  4.    Map <String, String> params = new HashMap <String, String>();   
  5.   
  6.    for (Enumeration e =  filterConfig.getInitParameterNames);   
  7.           e .hasMoreElements();)    
  8.   {    
  9.         String name = (String) e.nextElement();    
  10.         String value = filterConfig.getInitParameter(name);   
  11.         params.put(name, value);    
  12.   }    
  13.   // 加载modules下的struts配置文件    
  14.   getStrutsConfig(params);    
  15.    return  
  16.    new Dispatcher(filterConfig.getServletContext(), params);    
  17. }   
  18.   
  19. // 加载modules下的struts配置文件    
  20. private void getStrutsConfig(Map <String, String> m) {    
  21.    String strutsPath =   
  22.    new String( "struts-default.xml,struts-plugin.xml,struts.xml");    
  23.    File f = new File(JLTEnvironment.getModulesHome()+"/struts");    
  24.    if (f.getName().equals("struts")) {    
  25.          File[] ff = f.listFiles(); if (ff != null && ff.length > 0) {    
  26.          for (int i = 0; i < ff.length; i++) {    
  27.                String fname = ff[i].getName();    
  28.                if (fname.startsWith("struts-")    
  29.                    && fname.endsWith(".xml")) {   
  30.                      strutsPath+=","+ff[i].getAbsolutePath();   
  31.                 }    
  32.         }    
  33.     }   
  34.   
  35.   m.put("config", strutsPath);   
  36. }   
  37.   
  38. @Override    
  39. public void init(FilterConfig filterConfig) throws ServletException {    
  40.    //获得应用的路径    
  41.   ServletContext ctx = filterConfig.getServletContext();    
  42.    String home = ctx.getRealPath("/");   
  43.    home = home.replace('\\', '/');    
  44.    if (!home.endsWith("/")) {   
  45.          home = home + "/";   
  46.    }   
  47.   //初始化应用环境参数    
  48.   JLTEnvironment.init(home, ctx); super.init(filterConfig);    
  49. }   
public class JLTFilterDispatcher extends FilterDispatcher {   @Override   protected Dispatcher createDispatcher(FilterConfig rConfig)         {      Map <String, String> params = new HashMap <String, String>();       for (Enumeration e =  filterConfig.getInitParameterNames);            e .hasMoreElements();)     {           String name = (String) e.nextElement();           String value = filterConfig.getInitParameter(name);          params.put(name, value);     }     // 加载modules下的struts配置文件     getStrutsConfig(params);      return     new Dispatcher(filterConfig.getServletContext(), params);   }    // 加载modules下的struts配置文件   private void getStrutsConfig(Map <String, String> m) {      String strutsPath =     new String( "struts-default.xml,struts-plugin.xml,struts.xml");      File f = new File(JLTEnvironment.getModulesHome()+"/struts");      if (f.getName().equals("struts")) {            File[] ff = f.listFiles(); if (ff != null && ff.length > 0) {            for (int i = 0; i < ff.length; i++) {                  String fname = ff[i].getName();                  if (fname.startsWith("struts-")                      && fname.endsWith(".xml")) {                       strutsPath+=","+ff[i].getAbsolutePath();                  }           }       }      m.put("config", strutsPath);  }    @Override   public void init(FilterConfig filterConfig) throws ServletException {      //获得应用的路径     ServletContext ctx = filterConfig.getServletContext();      String home = ctx.getRealPath("/");     home = home.replace('\\', '/');      if (!home.endsWith("/")) {           home = home + "/";     }    //初始化应用环境参数     JLTEnvironment.init(home, ctx); super.init(filterConfig);   } 

 

2.web.xml更改为

 

Xml代码 复制代码
  1. <filter>    
  2.    <filter-name>struts2 </filter-name>  
  3.    <filter-class>  
  4.          com.jlt.core.JLTFilterDispatcher    
  5.    </filter-class>  
  6. </filter>  
<filter>      <filter-name>struts2 </filter-name>     <filter-class>           com.jlt.core.JLTFilterDispatcher      </filter-class>  </filter>

 

3.这样,WEB-INF/modules/struts下的所有以struts-开头的以xml结尾的xml文件都会被自动加载进去,

  不用去改其它配置了,呵呵 

  再添加struts配置文件的话,只要放在WEB-INF/modules/struts目录下,会自动被加载

0 0