你想要将你的应用隔离为多个相对不同的子应用、或者模块,每一个都有其自己的单独的配置。
除了默认模块的Struts 配置文件之外,为每一个模块创建一个单独的Struts 配置文件。然后使用ActionServlet的初始化参数在web.xml中声明每一个模块,如Example 2-11.
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模块:
使用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 应用的模块之间进行切换的技术。
posted on 2005-05-17 16:44 铁手 阅读(1436) 评论(1) 编辑 收藏 所属分类: Java 、Struts系列