国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php框架 > 框架设计 > Struts2的基本流程分析

Struts2的基本流程分析

来源:程序员人生   发布时间:2015-01-16 08:43:24 阅读次数:2825次
Struts2的基本流程分析
大致上,Struts2框架由3个部份组成,核心控制器StrutsPrepareAndExecuteFilter,业务控制器和用户实现的业务逻辑
逻辑组件,而在这3个部份里,Struts2框架提供了核心控制器StrutsPrepareExecuteFilter,而用户需要实现业务控制器和业务逻辑组件
核心控制器StrutsPrepareAndExecuteFilter
StrutsPrepareAndExecuteFilter控制器作为1个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类里通常包括1个execute方法,该方法返回1个字符串
-该字符串就是1个逻辑视图名,当业务控制器处理用户要求后,根据处理结果不同,execute()方法返回不同的字符串-每一个字符串对应1个视图名
开发出系统所需要的业务控制器后,还需要配置Struts2的Action,即需要配置Action的以下3个部份的定义:
(1)Action所处理的URL
(2)Action组件所对应的实现类
(3)Action返回的逻辑视图和物理视图资源之间的对应关系
每一个Action都要处理1个用户要求,而用户要求总是包括指定的URL,当StrutsPrepareAndExecutorFilter拦截到
用户要求后,根据要求的URL和Action处理URL之间对应关系来处理转发


Struts2的模型组件
通常,MVC框架里的业务控制器会调用模型组件的方法来处理用户要求,也就是说,业务逻辑控制器不会对用户要求
进行任何实际处理,用户要求终究由模型组件负责处理,业务控制器只是中间负责调度的调度器,这也是称Action为控制器的缘由
当控制器需要获得业务逻辑组件实例是,通常其实不会直接获得业务逻辑组件实例,而是通过工厂模式来获得逻辑组件实例,或利用其它IOC容器
(如Spring容器)来管理业务逻辑组件实例


Struts2的视图组件(FreeMaker,Velocity和XSTL等)当Struts2的控制器返回逻辑视图名时,逻辑视图并未与任何的视图
技术管理,仅仅是返回返回1个字符串,该字符串作为逻辑视图名


在Struts.xml文件中配置Action时,不但需要指定Action的name属性和class属性,还有为Action元素指定系列<result.../>子元素。每一个<result.../>子元素定义1个逻辑
视图和物理视图之间的映照,Struts2默许使用jsp作为视图资源
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生