struts核心运行机制

转自http://hi.baidu.com/baozi52/blog/item/98c928088c135531e8248877.html

Struts中的C层功能:

1、  接受客户端请求

2、  调用M层模型组件执行相应的业务逻辑。

3、  获取M层业务逻辑的处理结果

4、  根据处理结果选择合适的视图呈现给客户端。

C层核心控制组件是:ActionServlet,它是org.apache.struts.action.ActionServlet类型的Servlet

他继承javax.Servlet.Http.HttpServlet,并实现了init(),doGet()/doPost(),destroy()等Servlet生命周期所用到的方法。还添加了一个process(),它本身不复杂,但它会调用其他的复杂方法。

ActionServlet接收到来自Servlet容器的客户请求时,他的处理步骤:

1、  根据浏览器是post还是get请求调用doPost()、doGet()方法,在其中调用ActionServlet的process()方法。

2、  Process()获取RequestProcessor对象-à调用RequestProcessor对象的process()方法

3、  Process()读取struts-config.xml,在其中查找<action>子元素,查找的条件是:用户请求的URI与action元素的path属性值一样,找到后确定name属性,根据name找到<form-bean>元素,再根据action元素的name匹配值找到相应的ActionForm bean。

4、  调用ActionForm bean的setter方法填充FormBean的属性,然后调用FormBean的validate()方法,对表单数据的有效性进行验证。

5、  RequestProcessor的process()方法根据3中找到的<action>中的type属性寻找Action bean对象(有则使用,无则创建),然后将FormBean对象,封装的请求对象等信息发给找到的Action对象,Action bean调用自己的execute()方法处理。

6、  Action bean的execute()方法执行完璧后,返回一个ActionForward对象,又回到RequestProcessor对象的process()方法,process方法将根据ActionForward请求重新定向到指定的页面。

流程:

1、客户请求req.do

ActionServlet—>process()—>RequestProcessor.process()—>struts-config.xml—>

                                                        <action>—>path=/req

                                                        <action>—>name—><form-bean>—>setXXX()

                                                        <action>—>type—>获得Action—>execute()

—>execute()返回ActionForward()

              

RequstProcessor类时struts控制器的真正的请求处理者。它定义了多个processXXX()方法完成具体的处理工作。如果要扩展ActionServlet类,可以从RequstProcessor继承,实现自己的控制逻辑。其中,它提供一个processPreprocess()方法用于在子类中被重写,加入定制的预处理共功能。

Struts中的ActionForm有表单数据是使用

ActionForm bean 的声明和使用在struts-config.xml中是分开的。这样一个bean可以处理多个页面不同的请求表单信息。

声明:<form-bean>

使用:<action name=”formbean”>

定义ActionForm bean后,必须在struts-config.xml中声明。之后,再指明ActionForm bean和被处理的请求之间的对应关系,一个萝卜一个坑,(当然,这个请求是含有表单信息的请求)。即事先约定好在那种情况下使用某个特定的ActionForm bean,这种约定是在配置文件中给出的。类似这样的:

<action-mappings>

<action path=”/login” type="com.fzxy.LoginAction" name="formBean1" scope="request" input="/login.jsp" />

<action path="/regist" forward="/regist.jsp"/>

</action-mappings>

这个<action-mappings>元素给出各种可能的客户端请求与处理方式之间的对应关系,一个<action>对一种请求URI的处理办法。

<action>元素的属性:

path:客户请求的页面URI。

type:处理请求的Action对象的类型,包括包名

name:用于自动接收path请求表单信息的ActionForm bean的名字,该名字在<form-bean>中声明。

scope:ActionForm bean的适用范围,通常为request或session,

虚线代表第一次请求,实线代表第二次请求当范围时:

request,只在当前请求和响应有效,请求由一个组件转发到另一个组件是,该对象一直有效。当服务器返回响应结果给客户时,ActionForm bean被销毁。图中范围为request时,form对象将覆盖第一次请求及响应周期内的4个组件,4个组件共用一个ActionForm对象。当浏览器发出第二个请求时,将重新创建一个新的ActionForm对象。

session时,两次请求只要在一个会话中,这些组件始终共用一个ActionForm对象。

 

input:处理请求出错时转向的页面

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值