5_struts重要组件。

本文详细介绍了Struts框架中的四个核心组件:Action、ActionMapping、ActionForward和ActionForm的作用及工作原理。深入探讨了它们在web应用程序中的交互方式,以及如何通过这些组件实现高效的业务逻辑处理。

1 Action

    每个Action在第一次请求的时候初始化,而不是在ActonServlet启动读取配置的时候初始化。

    在web环境中,Actioni一旦被初始化就一直存在于容器中,也就是单例模式。如果处理不当会产生并发问题,所以一般不能在Action中保存用户状态。

    即使在<action>配置中多个path路径都指向同一个Action类,在内存中也只有一份Action,也就是说多个url访问到的Action都是同一个。

    如果要统计Action被访问的次数,则可以利用Action的单例性在Action中设置一个属性来进行统计。

    在Action的execute()方法中,一般需要返回一个ActionForward对象,但是如果返回null,这时,ActionServlet就不会做相应的转发处理,而只是简单的返回。所以如果业务逻辑很简单的话,也可以在execute()中直接调用response.getWriter(),得到PrintWriter对象,然后和普通servlet一样,用pw对象输出响应。

 

 

2 ActionMapping

    struts-config.xml中的<action>元素的配置都被一个org.apache.struts.action.ActionMapping实例所封装,包括path,name,forward属性。通过这个对象可以得到action对应的配置属性。

    这个实例对象也在Action.execute()方法中作为第一个参数传递,所以我们可以在execute()方法中得到这个Action的配置信息。

    ActionMapping中有一些set/get方法,但是在execute()中进行set时,会抛出异常,操作被frozen,set只能在struts框架中调用,初始化完成后就被禁止访问了。

 

 

3 ActionForward

    ActionForward类封装了在<forward>标签中的配置,可以通过逻辑名称name得到path指向的页面或者资源路径。其中的redirect属性如果为true则指明使用sendRedirect方法重定向,否则默认就是请求转发。还有个重要的属性,contextRelative 指明了path中的/是站点根目录context-relative还是应用根目录module-relative。默认是false指明是应用根目录。如果不写 / 的话,就必须是完全绝对路径,http://...这样加协议头的。

 

4 ActionForm

    生命周期:

 

  1. 检查Action的映射,确定存在对应的Action
  2. 根据name属性,查找formbean的配置信息
  3. 检查ActionForm的使用范围(request or session),确定在此范围下是否已经存在一个实例
  4. 如果已经存在了这样一个formbean,就重用,否则就重新构建一个formbean对象,并且置入相应的范围(request or session)中,scope属性需要在<action>元素中配置,如果不配置scope属性,默认是session!
  5. 调用reset方法
  6. 调用form的set方法为属性赋值
  7. 如果<action>元素中的validate属性为true,就调用formbean的validate方法进行校验
  8. 如果vallidate方法没有返回错误信息,ActionServlet就将formbean作为参数传给Action.execute()方法,否则返回input页面

注:ActionForm基类中的reset和validate方法都没有实际处理能力,需要自己来覆写来实现功能。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值