欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Struts多模块开发_需注意的地方

程序员文章站 2022-03-16 12:04:03
...

在基于struts的WEB应用的开发中,使用多模块开发是十分必要的,总结了一下如下:

Struts 的配置文件struts-config.xml 是Struts 框架最重要的资源之一,并且是需要频繁改动的。如果并行开发的各个团队都是用这一个配置文件,势必造成访问冲突。Strus 框架的模块化机制就是专门应对这种情况的。

Struts 从1.1 版本开始增加了模块化支持,并且一直在强化对模块化的支持。不同的应用模块可以拥有各自的struts-config 配置文件、消息资源、Validator 框架配置文件。不同的模块可以协同开发,互不影响。

Struts 应用配置为多模块应用,需要如下三个步骤:

为每个模块分别建立一个struts配置文件;
通知模块控制器;
使用特定的Action在模块间跳转。
一 给各模块命名:

struts默认的配置文件名是struts-config.xml,给其它模块配置文件命名struts-config-***.xml.比如登录模块需要一个单独的模块可以命名为struts-config-login.xml;

二 通知模块控制器:

在web.xml中加入如下代码:

    
      config    
      /WEB-INF/conf/struts-config.xml    
    
    
      config/login    
      /WEB-INF/conf/login/struts-config-login.xml    
   

配置文件对应的ActionServlet 初始化参数名为config。对于其他模块,ActionServlet 初始化参数的命名原则是“config/模块名”。如上面的代码示例中,login 模块的配置文件对应的初始化参数为config/login。其中前缀“config/”是不能缺少的,后面跟模块名。在Struts 控制器中,是通过模块名来区分不同模块的。在资源访问中,也是一模块名作为前缀来区分对不同模块的访问。如以“/login”开头的路径会告诉控制器所要访问的将是login 模块的资源。

三 实现模块间跳转:

(1)用SwitchAction,主要用于实现页面的跳转

(2)全局转发和局部转发,用于实现模块间的跳转

(3)采用html:link标签

多模块开发示例:(Eclipse3.2+MyEclipse5.0)
1.新建一个Web Project
2.添加Struts 1.2 支持
3.在根目录(WebRoot)下新建index.jsp页面
4.在WebRoot目录下新建一个模块目录“ModuleA”。
5.新建一个struts 1.2 module,名为“ModuleA”。
6.测试直接链接到其他模块的jsp页面(注意不能直接链接到其他模块的与Action、ActionForm相关联的页面):

在根目录的index.jsp页面中添加如下代码:

1.链接到其他模块(ModuleA)直接链接到页面
适用于没有和Action,ActionForm关联的纯JSP页面

 

在ModuleA目录下新建index.jsp页面,完成后测试成功。

7.测试直接链接到其他模块的jsp页面(直接链接到其他模块的与Action、ActionForm相关联的页面,应该不能成功):
首先配置struts-config-ModuleA.xml文件:
新建一个Form、Action and JSP,用例中填写user,添加两个属性:name,password。
在JSP选项卡中填写“/ModuleA/login.jsp”,点击下一步,在Path中填写“/login”,在forward选项卡中添加一个forward,name为“OK”,Path为“/welcome.jsp”,点击完成。
在ModuleA目录下新建wellcome.jsp文件,在源码中加入如下代码:
.在UserAction.java源码中填写如下代码:return mapping.findForward(“OK”)。
在根目录下的index.jsp源码中添加如下代码:
2.链接到其他模块(ModuleA)试图连接到和Action,ActionForm关联的页面
不能直接这样链接,会报Cannot retrieve mapping for action /xxx异常,因为此时还是检查struts-config.xml


测试后果然异常。
正确做法如下:
在struts-config-ModuleA.xml文件中添加一个Action,在用例中填写“toLoginPage”,在forward选项卡中添加一个forward,name为“toLoginPage”,Path为“/login.jsp”。
修改ToLoginPage.java的源码为:return mapping.findForward(“toLoginPage”);。
在根目录下的index.jsp源码中添加如下代码:
3.链接到其他模块(ModuleA)的xxxx.do,连接到和Action,ActionForm关联的页面
正确做法,是对2链接形式的更正,应该链接到ModuleA的一个Action,由该Action的forward转发到login.jsp页面


经测试成功。

8.测试跨模块表单提交(从主模块提交表单到ModuleA模块):
在struts-config.xml(主模块)中新建Form、Action and JSP,用例中输入“reg”,增加两个属性:sex、age,点击下一步,在Path中填写“/userReg”,Action Impl中选择Use existing Action class,使用SwitchAction,直接finish掉。添加根目录下的indexs.jsp文件源码如下:

4.提交表单到其他模块:


sex :

age :


在ModuleA文件夹下新建regOK.jsp文件,在regOK.jsp文件源码中写入如下语句:
regOK,your sex is: age is:
经测试成功。

9.测试跨模块表单提交(从ModuleA模块提交表单到ModuleB模块):
新建struts1.2模块,叫“ModuleB”,在WebRoot目录下新建文件夹“ModuleB”,配置struts-config-ModuleB.xml文件:
新建Form、Action and JSP,在用例中输入“employee”,增加两个属性:empName、depName,在JSP选项卡中填写“/ModuleA/empInfo.jsp”,点击下一步,Path中填写“/employee”,在Action Impl中选择Use existing Action class,使用SwitchAction,直接finish掉。
修改empInfo.jsp文件源码: …。
在ModuleB文件夹中新建showEmp.jsp文件,修改showemp.jsp源码为:。
在struts-config-ModuleA.xml文件中,增加一个Action,在用例中输入“empInfo”,增加一个forward,name为“/empInfo.jsp”。在根目录下的index.jsp文件中增加如下内容:
5.提交表单到其他模块(子模块到子模块):

链接到模块(ModuleB)的empInfo.do
链接到ModuleA的一个Action,由该Action的forward转发到empInfo.jsp页面


最后修改EmpInfoAction.java源码:return mapping.findForward("empOK");
经测试成功。