Struts秘籍之第1段:第2.5式. 将应用重构为模块

第2.5式. 将应用重构为模块
问题
你想要将你的应用隔离为多个相对不同的子应用、或者模块,每一个都有其自己的单独的配置。
动作要领
除了默认模块的Struts 配置文件之外,为每一个模块创建一个单独的Struts 配置文件。然后使用ActionServlet的初始化参数在web.xml中声明每一个模块,如Example 2-11.
Example 2-11. ActionServlet 的多模块配置
 
<!-- Action Servlet Configuration -->
<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  <init-param>
    <param-name>config/module1</param-name>
    <param-value>/WEB-INF/struts-config-module1.xml</param-value>
  </init-param>
  <init-param>
    <param-name>config/module2</param-name>
    <param-value>/WEB-INF/struts-config-module2.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
 
动作变化
Struts 1.1 引入了定义单独配置的子应用的能力,那就是模块(module)。Modules 引入到Struts 之中是为了解决将web应用分解为相对不同的,可管理的部分的问题。每一个module 都通过其自己的配置文件进行定义。每一个Struts 应用都隐含的具有一个默认module。默认module 没有名字。
附加的模块通过指定一个模块前缀来定义。前缀是Struts的ActionServlet的初始化参数中的config/后面紧跟的值。在Example 2-11中,定义了3个模块。第一个init-param元素定义了默认模块。第二个和第三个init-param元素分别建立了module1和module2。
Struts 预先为每一个通过在struts-config.xm文件中为每一个模块定义的声明来访问的URL准备模块前缀。这项规则也适用于全局转发,全局异常,action mapping,局部转发和局部以外中的path 属性。然而,module的 Struts 配置文件则不需要知道也不应该使用module 前缀。
通过Struts标签所产生的URL,比如通过html:link和html:rewrite,将包含module名称。这意味着包含模块前缀在你想要引用全局共享的Web资源比如图像和CSS时会很令人头痛。很多Web 应用通常都将所有图片放置在站点的顶层/images文件夹中。如果使用modules 并且使用html:img标签来显示这些图片,你必须为每一个模块创建一个单独的/images文件夹户或者设置html:img标签的module属性为空字符串("") 以指示默认的模块。
假定你想要为struts示例的MailReader应用创建一个管理的UI接口。需要在应用中加入一个管理模块,如下面的方式修改web.xml文件,其中第2个init-param元素就定义了admin模块:
  <!-- Action Servlet Configuration -->
  <servlet>
    <servlet-name>action</servlet-name>
    <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-registration.xml
      </param-value>
    </init-param>
    <init-param>
      <param-name>config/admin</param-name>
      <param-value>/WEB-INF/struts-config-admin.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
 
使用module常犯的一个错误就是在你导航到包含模块前缀的URL的时候, Struts 将认为你是在模块之中。例如,你可能在应用的主页面提供了一个标准的HTML 链接(比如<a href . . . >) 到管理模块的index页面。如果用户选择该链接,它们会看到正确的页面。然而, Struts 所关心的是,用户仍然在默认模块中。为了在Struts 1.1 应用的模块之间切换,你必须通过一个特殊的action,SwitchAction来转发用户。在Struts 1.2中,产生链接和URL的Struts html标签已经支持module属性,这样你就可以显式地指定目标模块。
使用Struts 1.1 的模块机制有其缺点。注意不是所有的Struts 1.1标签都支持模块。所以,你可能会发现模块中的JSP页面并不能完全与它们属于的模块无关的情况下便写出来。使用模块的这些缺点都在Struts 1.2中被弥补了。因此,我推荐你只有在Struts1.2中才考虑使用模块。如果你必须使用Struts 1.1 并且你的应用仅仅是稍微有些复杂,你可以向要避免使用模块的矛盾,而使用子目录的方式来组织你的应用,并且使用第2.4中所讲的技术来将struts-config.xml文件进行分解。
相关招式
第2.4 将struts-config.xml文件分解为多个配置的技术。
第6.7 展示了在运行的Struts 应用的模块之间进行切换的技术。
 

原文链接: http://www.dlog.cn/nicholascoder/diary/8937

转载于:https://my.oschina.net/moroseyu/blog/51441

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值