一、WebWork介绍
WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的J2EE Web框架。WebWork目前最新版本是2.2.2,现在的WebWork2.x前身是Rickard Oberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。实现Interceptor接口的拦截器,代码部分在intercept方法中实现。在intercept方法中,可以直接返回一个Result字符串,这样整个执行直接“短路”,这时Action的execute方法也不会执行(一般很少会这么用)。所以,一般都会在这个方法里调用参数对象invocation的invoke方法,并返回这个方法执行的结果。这样会持续执行后面的拦截器方法以及Action的execute方法等。
二、WebWork架构
WebWork的网站上提供了一个完整的WebWork架构图。它描述了从客户端的一次请求到最后服务器端响应的整个执行过程。架构图如下:
架构图
架构图
此架构图一共分为五个部分,其中五个部分分别由五种不同颜色表示。
1.浅灰色方框。分别代表了客户端的一次Http请求,和服务器端运算结束之后的一次响应。
2.浅红色方框。表示一次Action请求所要经过的Servlet filters(Servlet 过滤器)。我们可以看到最后一个filter就是我们前面介绍的WebWork的前端控制器。
3.蓝色方框。这是WebWork框架的核心部分。
1)一次请求到了WebWork的前端控制器,它首先会根据请求的URL解析出对应的action 名称,然后去咨询ActionMapper这个action是否需要被执行。
2)如果ActionMapper决定这个action需要被执行,前端控制器就把工作委派给ActionProxy。接着她们会咨询WebWork的配置管理器,并读取在web.xml文件中定义的配置信息。接下来ActionProxy会创建ActionInvocation对象。
3)ActionInvocation是Xwork原理的(Command模式)实现部分。它会调用这个Action已定义的拦截器(before方法),Action方法,Result方法。
4)最后,看上面流程的图的方向,它会再执行拦截器(after方法),再回到Servlet Filter部分,最后结束并传给用户一个结果响应。
4.靛色方框。这是拦截器部分,在上面的拦截器章节我们已经有了详细的介绍。
5.黄色方框。这是我们在开发Web应用时,需要自己开发的程序。其中包括:Action类,页面模板,配置文件xwork.xm
三、WebWork架构关键部分
1.Actions。一般一个Action代表一次请求或调用。在WebWork中,一般Action类需要实现Action接口,或者直接继承基础类ActionSupport。这是,它要实现默认的execute方法,并返回一个在配置文件中定义的Result(也就是一个自定义的字符串而已)。当然,Action也可以只是一个POJO(普通Java对象),不用继承任何类也不用实现任何接口。Action是一次请求的控制器,同时也充当数据模型的角色,我们强烈建议不要将业务逻辑放在Action中。
2.Results。它是一个结果页面的定义。它用来指示Action执行之后,如何显示执行的结果。Result Type表示如何以及用哪种视图技术展现结果。通过Result Type,WebWork可以方便的支持多种视图技术;而且这些视图技术可以互相切换,Action部分不需做任何改动。
3.Interceptors。WebWork的拦截器,WebWork截获Action请求,在Action执行之前或之后调用拦截器方法。这样,可以用插拔的方式将功能注入到Action中。WebWork框架的很多功能都是以拦截器的形式提供出来。例如:参数组装,验证,国际化,文件上传等等。
四、WebWork架构特点
ValueStack 和 EL
关于ValueStack的描述:
1.ValueStack其实就是一个放置Java对象的堆栈而已,唯一特别的是可以使用EL来获得值堆栈中对象属性的数据,并可以为值堆栈的对象属性赋值。
2.EL,全称Express Language,即表达式语言。不要被语言吓倒,它是简单的对象导航语言。有字符串(例如:方法名)和特殊字符组成(例如用.表示调用对应的属性方法)。通过EL,我们可以存、取对象数据,而且还可以直接访问类的静态数据,调用静态方法。
3.WebWork的ValueStack底层有第三方开源项目OGNL实现。所以EL也都遵循OGNL的规范。我们在开发中,几乎不需要知道OGNL的细节。
4.WebWork为每一次请求构建一个ValueStack,并将所有相关的数据对象(例如:Action对象、Model对象等)放到ValueStack中。再将ValueStack暴露给视图页面,这样页面就可以直接访问后台处理生成的数据。
下面我们用一个雇员类为例,使用Junit框架(单元测试框架)来展示ValueStack的功能。
我们有一个Employee类,它有两个属性:姓名,地址。姓名是一个字符串,地址是一个对象,地址类有国家、城市、街道三个属性。
Interceptor( 拦截器 )
关于拦截器的描述:
1.一个拦截器就是在xwork.xml文件中定义的一个无状态Java类,它至少要实现XWork的com.opensymphony.xwork.interceptor.Interceptor接口。
2.实现Interceptor接口的拦截器,代码部分在intercept方法中实现。在intercept方法中,可以直接返回一个Result字符串,这样整个执行直接“短路”,这时Action的execute方法也不会执行(一般很少会这么用)。所以,一般都会在这个方法里调用参数对象invocation的invoke方法,并返回这个方法执行的结果。这样会持续执行后面的拦截器方法以及Action的execute方法等。
3.大部分的时候,拦截器直接继承WebWork的抽象类com.opensymphony.xwork.interceptor.AroundInterceptor就可以了。这时,需要实现它的before和after方法。Before方法会在Action执行之前调用,after方法在Action执行之后调用。
4.拦截器的执行顺序。我们可将多个拦截器放一起组装成一个拦截器栈。这样拦截器会按照栈的顺序由上而下执行before方法,所有before方法执行结束,再执行Action的方法,执行Result的方法,再返回执行结果,最后再从下而上执行拦截器的after方法。
5.拦截器的过滤功能。我们通常会在应用中使用一个通用的定义多个拦截器的拦截器栈。但有些Action方法在调用的时候,不需要要其中的部分拦截器。这时,我们就可以使用拦截器过滤功能。如果拦截器要拥有过滤功能,必须实现抽象类com.opensymphony.xwork.interceptor.MethodFilterInterceptor。这样,拦截器在定义的时候或者在Action引用拦截器栈的时候,我们就可以指定哪些Action方法是需要过滤的,哪些Action是不需要过滤的。
提供的拦截器介绍
1.自动为Action设置Http请求数据的拦截器(Parameters Interceptor)。这个拦截器非常方便实用,但完全自动组装对象数据,很可能会带来安全问题。如果Action不需要设置数据,那么这个Action只要实现com.opensymphony.xwork.interceptor.NoParameters接口即可。如果是Action中部分数据需要自动设置,部分数据不允许设置,这样可以实现接口com.opensymphony.xwork.interceptor.ParameterNameAware,可以在这个接口的acceptableParameterName(String parameterName)方法中,定义我们可以接受哪些方法,如果允许只要让这个方法返回True就可以了。
2.过滤参数功能的拦截器(Parameter Filter Interceptor)。它可以全局阻止非法或不允许Action访问的参数。可以很好的和上面的组装参数的拦截器一起使用。
3.为Action设置静态数据的拦截器(Static Parameters Interceptor)。它可以将Action定义的静态<param/>参数,设置到Action中。
4.数据验证拦截器(Validation Interceptor)。定义之后,会调用验证文件或实现验证接口com.opensymphony.xwork.Validateable的所有验证。
5.验证流程处理拦截器(Workflow Interceptor)。它和上面的拦截器一起使用,处理验证的流程。如果验证通过则继续前进,如果发现有验证错误消息,直接转到Action中定义的输入结果(input)页面。
6.类型转换错误处理拦截器()。它首先去取得类型转换的错误消息(主要是由设置Http请求参数的拦截器产生),如果取到错误消息,它会将错误消息传递给实现接口com.opensymphony.xwork.ValidationAware的Action,这样我们可以将这些错误消息暴露到页面中。
7.Action链拦截器(Chaining Interceptor)。它是用来拷贝前一个Action的属性数据到当前Action中。它要求前一个Action必须是chain Result(<result type="chain">),这样才能进行Action的数据拷贝。
8.防止页面重复提交(或页面重复刷新)拦截器。Token Interceptor和Token Session Interceptor都是防止重复提交的拦截器。不同点是后者在Session存贮了最近一次请求的结果数据。
9.文件上传的拦截器(File Upload Interceptor)。实现文件上传的功能。如果有人曾经手工写过文件上传程序,那一定会惊叹于这个拦截器。我们可以在这个拦截器中设定上传文件的大小和类型限制。记得需要第三方的文件上传库的支持,只要在webwork.properties中配置过,并拷贝相应的jar包就可以了。
10.进度条等待拦截器(Execute and Wait Interceptor)。当Action的执行需要很长时间的时候,我们可以使用这个进度条等待的拦截器。它会将Action放到后台执行,而在前端显示进度条或等待消息提示的页面。
11.还有一些其它不常用的拦截器,我们可以在WebWork文档中找到,这里就不再做介绍。
相关推荐
本指南将深入探讨WebWork2的基础知识、快速入门方法以及高级特性,以帮助开发者更好地理解和应用这一框架。 一、WebWork2基础知识 1. MVC模式:WebWork2遵循MVC设计模式,其中模型(Model)负责处理业务逻辑,视图...
1. **WebWork基础**:WebWork的核心概念,如Action、Interceptors(拦截器)、Results和Parameters等,以及它们如何协同工作来实现业务逻辑和视图呈现的分离。理解这些基础概念是掌握WebWork的关键。 2. **MVC模式*...
### Webwork教程知识点详解 #### 一、WebWork框架简介 **WebWork**是一个开源的Java Web应用程序框架,它的设计理念是简化Web应用的开发过程,提高开发效率。随着时间的发展,WebWork逐渐演变成了**Struts2**框架...
快速入门通常包括搭建开发环境、创建基本的Web应用、定义Action和配置拦截器等步骤,通过官方文档和社区资源,开发者可以迅速掌握这些基础知识,开始构建自己的Web应用程序。 #### 结语 WebWork 2.0和Struts 2.0的...
### WebWork教程知识点详解 #### 一、WebWork框架简介 **WebWork**是一个由OpenSymphony组织开发的、致力于组件化和代码重用的拉出式MVC(Model-View-Controller)模式的J2EE Web框架。该框架的核心设计理念在于...
### WebWork教程知识点详解 #### 一、WebWork框架简介 **WebWork**是一个由OpenSymphony组织开发的Java Web框架,它采用了Model-View-Controller(MVC)设计模式,旨在实现组件化和代码重用。WebWork的最新版本为...
5. **动作和结果映射**:`xwork-core.jar`通常包含了XWork,它是WebWork的基础,负责动作的执行和结果的映射。XWork的动作映射允许开发者定义多个动作及其对应的处理结果。 6. **异常处理**:WebWork有一个强大的...
本篇将介绍WebWork的基础知识,特别是它的类型转换机制,这对于理解Web应用程序中的数据处理至关重要。 WebWork的核心特性之一是其强大的类型转换系统,它允许开发者从HTTP请求参数自动转换为Java对象的属性。这种...
### WebWork基础知识详解 #### 一、WebWork简介 **WebWork** 是一款基于Java的开源Web应用框架,它提供了一种简洁的方式来构建复杂的Web应用程序。该框架的主要优点包括易于集成、灵活的数据处理机制以及强大的...
WebWork最初由OpenSymphony团队开发,后成为Struts2的基础,现在是Apache软件基金会的一个项目。它提供了一种声明式编程模型,允许开发者通过注解或XML配置文件定义动作、参数绑定和异常处理等。WebWork的核心特点...
1. **WebWork2基础**:介绍WebWork2的基本架构,包括Action、Interceptor、DispatcherServlet等核心组件的作用和工作原理。解释如何配置WebWork2项目,如web.xml和struts-config.xml文件的设置。 2. **Action与控制...
### 一、WebWork基础知识 #### 1. 框架概述 - **核心理念**:WebWork基于“动作(Action)”的概念来构建应用程序,每个动作负责处理一个特定的用户请求。 - **请求处理流程**:用户发送请求到服务器后,请求被解析...
最后,实践编写简单的WebWork应用,结合实际的项目需求,将理论知识转化为实际技能。 总的来说,WebWork是一个功能强大的框架,它提供了许多现代Web开发所需的特性。通过学习和使用WebWork 2.1.7,初学者不仅可以...
- 这些JAR包是Webwork2运行的基础,它们包含了框架的核心类和依赖库。 2. **Web.xml配置**: - 在`web.xml`文件中,配置Servlet以启动Webwork2。定义了一个名为`webwork`的Servlet,其类为`...
下面,我们将详细探讨与WebWork相关的几个关键知识点。 ### WebWork框架简介 WebWork框架是Struts框架的一个替代品,它采用了更现代的MVC(Model-View-Controller)架构设计,使得开发人员能够更容易地管理和维护...
在WebWork的基础上集成Spring,可以利用Spring的依赖注入来管理WebWork中的对象,提高代码的灵活性和可测试性。同时,Spring的事务管理可以帮助确保注册过程中的数据一致性,而其AOP能力则可能用于实现如日志记录、...