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

Struts2的基本流程分析

2014-12-04 21:26 141 查看
Struts2的基本流程分析

大致上,Struts2框架由3个部分组成,核心控制器StrutsPrepareAndExecuteFilter,业务控制器和用户实现的业务逻辑

逻辑组件,而在这三个部分里,Struts2框架提供了核心控制器StrutsPrepareExecuteFilter,而用户需要实现业务控制器和业务逻辑组件

核心控制器StrutsPrepareAndExecuteFilter

StrutsPrepareAndExecuteFilter控制器作为一个Filter运行在Web应用中,它负责

拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求,所有请求都会交给Struts框架处理

Struts2框架获得了用户请求后,将根据请求的名字决定调用那个业务逻辑组件,例如:

对应Login请求,Struts2调用调用名为Login的Action来处理该请求

Struts2应用中Action都被定义在struts.xml文件中,在该文件中定义Action时,定义该Action的name属性和class属性

其中name属性决定该Action处理哪个用户请求,而class数据决定该Action的实现类

Struts2用于处理用户的请求的Action实例,并不是用户实现的业务控制器,而Action代理

-因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求

而Struts2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequestIQ请求中的参数解析出来,传入到Action中

并回调Action的execute方法来处理用户请求

显然,这是典型的AOP(面向切面编程)处理方式

用户实现的Action类仅仅是Struts2的Action代理的代理目标,用户实现的业务控制器(Action)则包含了对用户请求的

处理,用户的请求数据包含在HttpServletRequest对象,而用户的Action类无须访问HttpServletRequest对象,拦截器负责将HttpServletRequest

里的请求数据解析出来,并传给业务逻辑组件Action实例

业务控制器组件就是用户实现Action类的实例,Action类里通常包含一个execute方法,该方法返回一个字符串

-该字符串就是一个逻辑视图名,当业务控制器处理用户请求后,根据处理结果不同,execute()方法返回不同的字符串-每个字符串对应一个视图名

开发出系统所需要的业务控制器后,还需要配置Struts2的Action,即需要配置Action的如下3个部分的定义:

(1)Action所处理的URL

(2)Action组件所对应的实现类

(3)Action返回的逻辑视图和物理视图资源之间的对应关系

每个Action都要处理一个用户请求,而用户请求总是包含指定的URL,当StrutsPrepareAndExecutorFilter拦截到

用户请求后,根据请求的URL和Action处理URL之间对应关系来处理转发

Struts2的模型组件

通常,MVC框架里的业务控制器会调用模型组件的方法来处理用户请求,也就是说,业务逻辑控制器不会对用户请求

进行任何实际处理,用户请求最终由模型组件负责处理,业务控制器只是中间负责调度的调度器,这也是称Action为控制器的原因

当控制器需要获取业务逻辑组件实例是,通常并不会直接获取业务逻辑组件实例,而是通过工厂模式来获取逻辑组件实例,或者利用其它IOC容器

(如Spring容器)来管理业务逻辑组件实例

Struts2的视图组件(FreeMaker,Velocity和XSTL等)当Struts2的控制器返回逻辑视图名时,逻辑视图并未与任何的视图

技术管理,仅仅是返回返回一个字符串,该字符串作为逻辑视图名

在Struts.xml文件中配置Action时,不仅需要指定Action的name属性和class属性,还有为Action元素指定系列<result.../>子元素。每个<result.../>子元素定义一个逻辑

视图和物理视图之间的映射,Struts2默认使用jsp作为视图资源
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息