在Struts1中如何自己加载struts_config.xml?

问题描述

为了实现模块化开发,struts_config.xml想放在各个plugin代码之下,如何扩展ActionServlet来读入这些分散的配置文件?

解决方案

如果看过struts的源码,了解struts的初期加载过程的话,就该知道在struts中可以覆写ActionServlet的initModuleConfig方法来实现自己的加载封装。举例说一下:假如你的模块都放在WEB-INFplugin之下:WEB-INFplugincmsWEB-INFpluginblogWEB-INFpluginmemberWEB-INFpluginspace...而struts_config.xml文件就在每个plugin的根目录下:如:WEB-INFplugincmsstruts_config.xml那么就可以如下扩展ActionServlet来实现自定义加载:public class BaseServlet extends ActionServlet {protected ModuleConfig initModuleConfig(String prefix, String paths)throws ServletException {// Parse the configuration for this moduleModuleConfigFactory factoryObject = ModuleConfigFactory.createFactory();ModuleConfig config = factoryObject.createModuleConfig(prefix);// Configure the Digester instance we will useDigester digester = initConfigDigester();String path = getServletContext().getRealPath("/");String pluginPath = path + "WEB-INF" + File.separator + "plugin";try {File[] files = new File(pluginPath).listFiles();for (int intCnt = 0; intCnt < files.length; intCnt++) {if (files[intCnt].isDirectory()) {digester.push(config);String configPath = files[intCnt].getAbsolutePath()+ File.separator + "struts_config.xml";if(new File(configPath).exists()) {String pp = configPath.substring(getServletContext().getRealPath("/").length() - 1).replace('\', '/');;System.out.println(pp);parseModuleConfigFile(digester, getServletContext().getResource(pp));}}} } catch (MalformedURLException e) { throw new UnavailableException(e.getMessage());}getServletContext().setAttribute(Globals.MODULE_KEY + config.getPrefix(), config);return config;}}
解决方案二:
中间用,分隔<servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml,/WEB-INF/struts-config-system.xml,。。。。。。。</param-value></init-param>
解决方案三:
或者在web.xml里config文件配置多个xml试试<init-param> <param-name>config</param-name> <!—config指明Struts应用程序的配置文件相对位置--> <param-value>/WEB-INF/struts-config.xml</param-value></init-param><init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config-registration.xml</param-value></init-param>
解决方案四:
其实只要在主struts_config.xml里把其他的struts的xml include进来就好了在struts_config.xml里加上<include file="XXX/xxx/struts-xxx.xml"></include>

时间: 2024-09-20 08:38:50

在Struts1中如何自己加载struts_config.xml?的相关文章

解决tableView中cell动态加载控件的重用问题

解决tableView中cell动态加载控件的重用问题 tableView的cell,有时候需要在运行时取得对应的数据后才能够动态的创建该cell中的控件并加载到该cell中,此时,你一定会遇到重用问题,即使你能做到该cell只根据数值加载了一回控件,你也没法保证不出现重用问题:) 效果(请注意查看,移动下面的格子时,上面出现了重用的问题) 源码: YXCell.h // // YXCell.h // YXTableView // // Copyright (c) 2014年 Y.X. All

Hibernate中双向关联加载排序的解决方案

问题:Hibernate的<many-to-many>双向关联中,一方加载另一方时,怎么样达到按自定义规则排序的目的呢? 实例:角色和菜单是多对多的关系,为角色分配菜单后,加载菜单时,我需要按照菜单的ID来排序显示. 解决办法: 1. 通过在hbm配置文件中配置解决,需要自定义比较器. 1) 在多对多的主控端指定sort属性 这里的主控端为role,受控端为menu. role的配置为: <set name="roleMenus" table="ROLE_M

Excel中如何保存“加载宏”动画教程

<Excel2003入门动画教程55.Excel中如何保存"加载宏">. 演示动画 操作步骤 如果想把一个编辑了宏或自定义函数的工作簿移植到其他电脑上使用,在Excel中最科学的方法是保存为加载宏,方法如下. 工作簿文档编辑完成后,单击"保存"按钮,打开"另存为"对话框,将"保存类型"设置为"Microsoft Office Excel加载宏(*.xla)",然后取名保存. 提示 进入"

eigniter中实现一次性加载多个view的方法

 这篇文章主要介绍了codeigniter中实现一次性加载多个view的方法,实例分析了codeigniter中view方法的实用技巧,需要的朋友可以参考下     本文实例讲述了codeigniter中实现一次性加载多个view的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 function somecontrollerfunction() { $data['pagetitle'] = "Welcome to jb51.net"; $this->l

IE11或IE10中的管理加载项按钮是灰色的无法点击怎么办

  有时候我们在使用IE11或者是IE10会遇到IE游览器卡死或者是崩溃的情况,一般我们是时候Internet选项中的"管理加载项"来排除时候问题是否是加载项引起的.可当我们要进入管理加载项的时候,可能会发现"管理加载项"按钮是灰色的,而且无法点击.就如下图这样,怎么样能解决这个问题呢?下面就看小编教大家如何解决: 1.使用win+r组合键打开"运行",在里面输入"regedit"并回车,打开注册表编辑器; 2.然后依次打开下

win8系统中Word稿纸加载项无法卸载怎么办

  word工具是我们在日常办公中经常会使用到的办公软件,它对我们的重要性不言而喻.但是,最近却有不少Win8系统用户反映自己在打开office2003的时候,系统提示"无法访问".经过分析后发现是稿纸加载项上出了问题,我们只有选择卸载才能解决,但是用户在卸载时又发现根本无法卸载.那么,遇到这种情况我们该怎么办呢?接下来,小编就向大家分享win8系统中Word稿纸加载项无法卸载的处理方法.   1.首先,咱们需要返回到win8系统的传统桌面位置,之后,咱们同时按下键盘上的win+R快捷

reference-QT中ortp库加载后,里面的函数未定义的问题

问题描述 QT中ortp库加载后,里面的函数未定义的问题 undefined reference to `ortp_init' 解决方案 http://blog.csdn.net/nemo2011/article/details/7371266 解决方案二: 你对应函数delib库没有link进来 解决方案三: 具体怎么做啊,不会弄那个,能说下步骤吗?

javaweb-java web程序中,如何加载一个keystore 文件??(keystore文件在项目中)

问题描述 java web程序中,如何加载一个keystore 文件??(keystore文件在项目中) 比如我有一个xx.keystore 如果是java 程序的话,用file file=new file("文件路径"): 一定可以. 但是web'程序如何加载???求解...先在这里谢谢了. 解决方案 请问楼主问的是Https加载证书的例子?

html5中,如何能够在video中的视频加载完成后运行js代码

问题描述 html5中,如何能够在video中的视频加载完成后运行js代码 window.onload时间并没有在视频加载后,找了好久都找不到答案,求大神回答下 解决方案 https://www.douban.com/note/158621500/