免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1029 | 回复: 0
打印 上一主题 下一主题

J2EE应用开发心得(4)——struts的工作流程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:44 |只看该作者 |倒序浏览

struts的工作流程搞得我很头疼,什么时候用.jsp什么时候用.do,form的生命周期设置成request还是session,reset、validate都怎么做,jsp中表单的实例化过程,这些问题纠缠在一起,比偶像剧还纠结。

简单说下我自己的理解吧:
struts的工作是一个path,也就是一条通路,从jsp页面的表单到actionform,再到action,最后回到jsp页面。看一个最简单的通路配置:
  1. <form-bean name="HelloForm" type="HelloForm"/>
  2. <action path="/hello" type="HelloAction" name="HelloForm" scope = "request">
  3.      <forward name="success" path="/ok.jsp"/>
  4.      <forward name="error" path="/error.jsp"/>
  5. </action>
这个通路的名字叫/hello,使用这个通路可以选择以一个jsp页面的表单为起点,也可以直接杀入通路。
先看前一种情况,一个jsp页面上有个表单:
  1. <html:form action="/hello">
  2.     <p>username<html:text property="username"></html:text></p>
  3.     <p>password<html:password property="password"></html:password></p>
  4.     <html:submit/>
  5. </html:form>
该表单对应的通路为/hello,因此,提交表单时便会将表单塞入通路,并做一系列动作。前面已经说过ActionForm和Action的基本概念,表单中的项都是ActionForm的属性,并且ActionForm中要实现每个属性的setter/getter方法。
jsp页面打开时,就会实例化ActionForm(如果配置了attribute属性,会首先寻找是否已存在叫该名称的实例,如否则重新实例化一个),此时调用reset方法,用户提交表单时,这个表单随着request被提交到Action中,表单中没有包含的actionForm属性就按照实例化后的值提交到Action。Action调用自己的execute函数做一些事情之后再决定下一步跳转到那个jsp页面,同时可以通过attribute/parameter等等方式给这些页面传一些数据,以便显示。这是最简单的情况,有时如果ActionForm是带有验证功能的ValidatorForm,提交表单时就会进行验证,这一点具体参考struts的Validator插件。另外Action也可以带有分派功能,如DispatchAction或者LookupDispatchAction,此时就会根据传入的参数决定调用哪个execute函数,这里也不仔细说了。如果再跳回提交前的表单,根据action配置的生命周期不同,会出现不同的情况。如果配置成page,那么actionForm会重新初始化,如果是request,那么只要没有重定向到其他页面,actionForm实例还在,所以各属性值就还是上次提交的值,如果是session,那么不管怎么折腾,只要不清空缓存,actionForm实例会一直存在,属性的值也一直保留。
以上这个是一种最常规的思路,当然也有很多时候不需要用户提交表单就直接进入通路,比如Action根据session中的用户名从数据库取出数据,传给jsp页面显示。此时可以通过通路名.do这个地址调用通路,如该例子里面hello.do这一地址就指向通路。这时也会实例化一个ActionForm,但是其中就不包含任何用户的输入,直接按照实例化时的默认值提交到Action(此时ActionForm没有什么意义,当然Action也没有必要用它了,甚至可以不配置ActionForm),Action根据session或者parameter传递过来的参数做一些事,再转到某个页面。

我想我阐述的思路还不是太清楚,大家可以结合其他的文章以及实践再慢慢理解,本文必定不是一篇优秀的教程,只希望其中的只言片语能帮助大家理解。

这篇文章将ActionForm的生命周期比较详尽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP