struts1.2原理

来源:互联网 发布:mac 版dreamweavercs6 编辑:程序博客网 时间:2024/05/16 05:11

Struts应用中包含3种组件:控制器组件(C)、模型组件(M)、和视图组件(V)。
控制器:ActionServlet(核心控制器)、自定义Action(代表一个用户操作)。
模型组件:定义和实现业务逻辑的接口和类。
视图组件:jsp页面、ActionFormStruts标签。
ActionServet
Struts最核心的组件。在Web容器启动的时候,ActionServlet被初始化,加载struts-config.xml配置文件(这就是为什么当struts配置文件修改后要重启web容器)。

Struts
处理请求的详细过程:

1
)客户端浏览器发送请求到ActionServlet,ActionServlet根据请求的路径和struts-config.xml的配置信息找到对应的Action Bean Form Bean 。如发送请求http://hocalhost:8080/myweb/register.do到服器,
ActionServlet
就会根据struts配置信息找path属性为“/register”Action Bean,于是找到RegisterAction,并得知RegisterActionname属性为"memberForm",于是找到MemberForm的实例(如果不存在则创建)。

2
)在确定将要调用的ActionBean 对应的Form Bean后,就将请求中的值填充到Form Bean 中(Action可以不关联任何ActionForm,这一步是可选的)。在调用Actionexecute方法之前,ActionServlet还要准备好ActionMapping 参数,ActionMapping中包含了该Action的配置信息。

3
)然后struts将请求分发至相应的 Action Bean 处理,ActionMapping参数,ActionForm参数,request response都作为参数传给处理请求的Action Bena 的 execute 方法。

4
Action 调用业务逻辑方法,得到返回值,并返回ActionForward对象。

5
)控制权重新回到ActionServlet ,ActionServlet 很据 Action 返回的 ActionForward 对象转发到相应的jsp

6
)处理结果返回给浏览器。。

注意的地方:
1) ActionServlet
将控制权转到页面的时候采用的是  转发  的方式
   request.getRequestDispatcher(url).forward(request,response); ),所以转发到页面的request Action 方法参数中的 request 是同一个请求,数据可以通过 request  对象的 attribute  属性传递。

2
)当需要重定向的方式转到新的页面的时候,可以再 Action 代码中使用
(     response.sendRedirect(url);  )
,并返回 null 。

3)ActionForm 很据对应  Action scope 属性配置不同而生命周期有所不同。一般,scope 属性设为
request,
则每次请求开始时ActionServlet 创建新的 ActionForm 对象,保存在request  对象的 attribute
属性中。所以可以在Action  代码中设置ActionForm 的值 ,在页面中取出。 

原创粉丝点击