现在的位置: 首页 > 综合 > 正文

struts核心运行机制

2013年09月19日 ⁄ 综合 ⁄ 共 2580字 ⁄ 字号 评论关闭

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()方法,在其中调用ActionServletprocess()方法。

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

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

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

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

6、  Action beanexecute()方法执行完璧后,返回一个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>中声明。

scopeActionForm bean的适用范围,通常为requestsession

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

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

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

 

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

 

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

抱歉!评论已关闭.