您的位置:首页 > 编程语言 > Java开发

struts1.2原理

2010-03-23 22:31 225 查看
Struts应用中包含3种组件:控制器组件(C)、模型组件(M)、和视图组件(V)。

控制器:ActionServlet(核心控制器)、自定义Action(代表一个用户操作)。

模型组件:定义和实现业务逻辑的接口和类。

视图组件:jsp页面、ActionForm和Struts标签。

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,并得知RegisterAction的name属性为"memberForm",于是找到MemberForm的实例(如果不存在则创建)。

2)在确定将要调用的Action
Bean 和 对应的Form Bean后,就将请求中的值填充到Form Bean 中(Action可以不关联任何ActionForm,这一步是可选的)。在调用Action的execute方法之前,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 的值 ,在页面中取出。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: