离出来。
Xwork提供了很多核心功能:前端拦截-器(interceptor)、表单验证、类型转换、基于OGNL的表达式语言、IOC容器等。
Webwork2以Xwork为基础来处理HTTP的响应和请求“21。
Webwork2使用servletDispatcher将HTTP请求变成Action(业务层Action类)、session(会话)及application(应用程序)范围的映射,request请求参数映射为Webwork2支持的多视图表示,视图部分可以使用JSP、Velocity、FreeMatker、JasperRepots、Ⅺ订L等n钉。
Web、№rk框架是一种MVC模式的实现n蚰。
其体系结构如图2.2所示。
图Z-2WebWork体系结构首先客户端的请求被发送至lJServlet容器,这个请求经过一个标准的Filter!链,其中包括(可选的)ActionContextCleanUpJ吐滤器(如果在应用程序中需要使用8基于轻量级J2EE的可插拔安全授权系统其他的开源技术如Sitemcsh,那么这个过滤器就会派上用场),然后客户端请求经过FilterDispatcher,在它里面ActionMapper通过判定这个请求是否需要调用Action。
如果ActionMapper决定应该调用一爪Action,FilterDispather就把请求委托给ActionProxy,ActionProxy来WebWork的配置文件管理器读取xworkxml文件里的配置信息,创建一个实现了命令模式的ActionInvocation。
这一过程包括在调用action本身之前调用所有的intereeptor,一旦action方法返回,Actionlnvocation就要查找xwork.xml文件中这个action的结果码所对应的result,然后执行这个result。
通常情况下result会调用JSP或FreeMarker模板来呈现页面。
当呈现页面时,模板可以使用Webwork提供的一些标签,其中一些组件可以和ActionMapper一起工作,为后面的请求呈现恰当的URL。
在这个架构中的所有对象(action、result、interceptor等)都足通过ObjectFactory;来仓lJ建的。
ObjeetFactory是可插入的,因此可以和Spring、Pico这样的框架整合地很好。
如果需要,Webwork中的对象也可以用自己提供的ObjectFactory来创建。
最后interc印tor被再次执行,顺序和开始相反,然后最终请求被返回给web.xml中配置的其他Filter。
如果已经设置了ActionContextCleanUpFilter,那么FilterDispatcher就不会清理ThreadLocal中的ActionContext¥言息。
如果没有设置AetionContextCleanUpFilter,FilterDispatcher会清理掉所有的ThreadLocal‘1钉。
2。
3.3struts2概述虽然Strutsl.X在MVC框架中曾经独领风骚,但是随着开源技术的不断更新和发展,众多其他的MVC框架各显神通,Strutsl.x自身的诸多不足也随之暴露出来了。
WebWork是Opensymphony组织的一个MVC框架。
与Strutsl.X相比它只能算做后起之秀,但是它的结构更加清晰,使用时编写的代码量少,可移植性能更加优越,因此它在市场上也占了很大的份额。
在这种情况下Strutsl.X吸收了WebWork的众多优点,对Strutsl进行了大规模的更新,APACHE组织于2007年上半年发布了它的一个新框架Struts2,这是继APAC髓Strutsl之后的又一个MVC框架。
相对于Strutsl框架的学习者而言,Struts2框架是一个全新的框架n钉,二者的体系结构、核心概念和设计模式都有很大的区别。
实际上,学习Struts2框架并不需要有Strutsl.X的相关基础,可以把它当做一个全新的框架来学习。
另一方面,Strtts2的核心是基于webwork的,Stmts29〔豆WebWork的相似程度更大,因此9基于轻量级J2EE的可插拔安全授权系统程序开发者可以很平滑地从WebWork过渡到Strum2。
Struts2使用的核心是WebWork的核心,而不是Struts1.x的核心。
Struts2.x框架的体系结构与WebWork基本一致。
Struts2.x的体系结构如图2.3所示。
◆/、7FilterDispatcher、过滤器凋皮管理器/过滤器l、/,、过滤器n用厂、户ActiOil浏动作览.厂忐1结果器\/\一/‘~/个I图2-3Struts2Ⅸ的体系结构Struts2.X与Struts1.x类似之处是它们都有一个核心的控制器,并且它们的控制器也由两部分组成:核心控制器Fil坝Dispatcher和业务逻辑控制器Action(用户自定义的)。
Struts2对用户请求的处理流程如下:浏览器发出请求。
FilterDispatcher根据用户请求的url及参数,在struts.xml配置文件中查找对应的Action配置,调用相应的Action。
用户的请求每经过一个Interceptor(拦截器),都可以对用户请求进行一些操作处理,如判断用户的身份和鉴别用户的权限。
经过拦截器链的处理之后,就会将请求传递给Action的execute方法,进行业务逻辑调用。
Action的execute方法根据执行结果返回result/rig,并根据这个result值,在struts.xml配置文件中查找应该返回给用户的视图。
Struts2的拦截器负责:g芋HttpServletRequest请求中的请求参数解析出来,传到Action中,并回调Action的execute方法来处理用户请求。
/ntereeptor(拦截器)将Action共用的行为独立出来,在Action执行前后运行。
这其实就足AOP(AspeetOrientedProgramming,面向方面编程)。
In钯l℃eptor将很多功能从用户的AcfiondP独立出来,减少了Action中的大量代码,独立出来的行为具有很好的可重用性Ⅲ。
业务逻辑控制器,是由用户自定义Action类组成的,它与Strutsl的Action有10基于轻量级J2EE的町插拔安全授权系统很大的不同。
Struts2的Action是与ServletAPl分离的,也就是说在Struts2的Action中没有request和response对象,这样的Action更加容易进行单元测试,另外,Struts2中的Action不需要像Strutsl的Action一样继承一个9LAction,并实现一大堆接口,Struts2的Action/l文仪是一个普通的Java灵j”象(PlainofJavaObject,简称POJO)。
具体地来说,在Struts2Action的execute方法中,是不带任何参数的。
这样做,一方面可以让代码更加简单易读,便于系统的维护。
另一方面方便了程序的测试,在不将整个Web应用部署到Web容器的情况下,就可以对Action类进行单元测试,方便了开发人员并提高了开发效率。
更重要的是它与ServletAPI是没有直接耦合的,这样就提高了代码的可移植性和可重用性。
使用过Struts1.x的开发人员都应该知道一个很头疼的I’HJ题,那就是随着系统功能的增力flActionForm不
上一篇:
中小型印刷企业ERP的设计、开发和应用
下一篇:
爱情只不过就是,爱与不爱