Struts1.x是目前在项目中应用的较为广泛的框架,它的多模块功能在团队开发时很有用,但在很多书上讲的并不多,Struts自身的文档也说的比较简单,用起来好像比较简单,但有时候经常会造成一些问题,对初次接触多模块的人,这些问题会造成一些不必要的困惑。现将采用Struts的多模块时应注意的事项总结一下,在此和大家共享:
(1)在web.xml文件中添加模块的配置文件时,一定要保留默认的配置文件,即web.xml文件中至少保持两个 <init-param>标记,一个用于定义默认的struts-config.xml,一个用于定义你需要的模块配置文件。如果只定义了模块使用的配置文件,而删除了默认的配置文件,struts将不能正常的工作。
(2)在模块的配置文件中定义action、formbean的方法和不采用模块时的配置方法是一样的;但在定义forward时,一定不要忘了设置contextRelative="true",否则在跳转时struts会在forward要转向的网页前面加上模块的前缀作为在WEB程序中的查找路径,这样就会在转发时出现找不到JSP页面的错误。
(3)模块中的JSP页面如果使用了<html:form>标记来获得formbean中的数据,一定要注意,这种JSP页面不能直接作为直接的链接让用户点击,而是应该在该模块的action中,使用非重定向forward转入,否则该页面中的<html:form>会导致错误。另外,<html:form>标记的action属性要直接设置为该模块中对应的action的path属性,不需要加上模块的前缀。鉴于这些原因,一般都会把模块中的JSP页面放入/WEB-INF目录中的某个文件夹,比如/WEB-INF/jsps目录,由于/WEB-INF目录不能直接被用户访问,这样,就会阻止用户无意中访问了对应的JSP文件而造成的错误。
从以上的总结可以看出,利用struts多模块编程时,比较好的策略是,将所有struts管理的页面都放入/WEB-INF文件夹的某个目录中,最好在这个目录下为每一个模块建立一个见名知义的文件夹,然后将这些JSP页面按照其所属的模块,放入这些文件夹,而访问这些JSP页面都要通过对应模块中的action进行转发,这实际上也是MVC所要求的一种设计和运行模式。另外,不要由一个模块的action直接转发到另一个模块的action负责管理的页面,这样即破坏了MVC的分工原则,又会带来多模块中页面的路径和formbean的问题。如果需要模块之间的页面转移,可以利用重定向forward直接转发到另一个模块的action,再由这个action决定将用户转发到本模块中的具体的JSP页面。这样即保持了MVC的分工原则,又保护了多模块中使用formbean的JSP页面。最后,建议在多模块中,最好采用DispatchAction,这样action的代码比较清晰明确,易于维护。
附件是一个样本war文件,其中包含了源代码,用到了LazyFormBean.
分享到:
相关推荐
Struts1.x常用的开发包,需要学习struts1.x朋友可以下载
struts1.x和struts2.x区别
struts1.x多文件上传, 感觉不错.
freemarker与struts 1.x 结合,生成html 在http://blog.csdn.net/chen1255 的web中有详细描述关于freemarker与struts1.x的结合
在这里,通过一个小例子稍微总结了下struts1和struts2的区别,希望这个能帮助到初学struts的朋友
java Struts 1.x 框架 Web 开发 java Struts 1.x 框架 Web 开发
Struts 2.x权威指南(第3版)
Struts1.x的登录示例,Struts1.x相关详细教程参考我的Blog:http://blog.csdn.net/boyazuo
struts1.x入门教程
struts1 国际化 源代码 struts1 国际化 工程
struts1.x apps 所有最新的Struts1.x项目应用 struts1.x apps 所有最新的Struts1.x项目应用 欢迎大家下载。。。
适用于Struts1.x初学者(网摘共25节)
这是struts1.x标签! struts1.x是历经考验的成熟的框架! 此标签可以帮助你更好的学习struts1.x的标签!
Struts1.x-Jdbc,学习Struts1.的曾删改查
struts1.x 中文api 帮助文档
基于Struts1.x的简单电子商务系统,hiberntae实现数据的持久化,数据库是Mysql
struts1.x入门.pdf ,感觉写得还不错
struts1.x已经出来很久,在这里仅为那些刚学struts的人提供一些帮助
struts1.x和mysql整合的登陆例子,包括用户的增删改查,涉及到LookupDispatchAction,的多个submit提交,静态验证,和读取数据库properties文件