WebWork入门使用教程.docx
- 文档编号:26127060
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:72
- 大小:334.06KB
WebWork入门使用教程.docx
《WebWork入门使用教程.docx》由会员分享,可在线阅读,更多相关《WebWork入门使用教程.docx(72页珍藏版)》请在冰豆网上搜索。
WebWork入门使用教程
WebWork使用教程
2012-11-5
1.WebWork简介
WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EEWeb框架。
WebWork目前最新版本是2.1,现在的WebWork2.x前身是RickardOberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目,如下示意图所示:
Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。
Xwork提供了很多核心功能:
运行时表单属性验证,类型转换,强大的表达式语言(OGNL–theObjectGraphNotationLanguage),IoC(InversionofControl倒置控制)容器等。
核心概念——WebWork的三个关键部分
1.Actions。
一般一个Action代表一次请求或调用。
在WebWork中,一般Action类需要实现Action接口,或者直接继承基础类ActionSupport。
这是,它要实现默认的execute方法,并返回一个在配置文件中定义的Result(也就是一个自定义的字符串而已)。
当然,Action也可以只是一个POJO(普通Java对象),不用继承任何类也不用实现任何接口。
Action是一次请求的控制器,同时也充当数据模型的角色,我们强烈建议不要将业务逻辑放在Action中。
2.Results。
它是一个结果页面的定义。
它用来指示Action执行之后,如何显示执行的结果。
ResultType表示如何以及用哪种视图技术展现结果。
通过ResultType,WebWork可以方便的支持多种视图技术;而且这些视图技术可以互相切换,Action部分不需做任何改动。
3.Interceptors。
WebWork的拦截器,WebWork截获Action请求,在Action执行之前或之后调用拦截器方法。
这样,可以用插拔的方式将功能注入到Action中。
WebWork框架的很多功能都是以拦截器的形式提供出来。
例如:
特点
ValueStack和EL
关于ValueStack的描述:
1.ValueStack其实就是一个放置Java对象的堆栈而已,唯一特别的是可以使用EL来获得值堆栈中对象属性的数据,并可以为值堆栈的对象属性赋值。
2.EL,全称ExpressLanguage,即表达式语言。
不要被语言吓倒,它是简单的对象导航语言。
有字符串(例如:
3.WebWork的ValueStack底层有第三方开源项目OGNL实现。
所以EL也都遵循OGNL的规范。
我们在开发中,几乎不需要知道OGNL的细节。
4.WebWork为每一次请求构建一个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请求数据的拦截器(ParametersInterceptor)。
这个拦截器非常方便实用,但完全自动组装对象数据,很可能会带来安全问题。
如果Action不需要设置数据,那么这个Action只要实现com.opensymphony.xwork.interceptor.NoParameters接口即可。
如果是Action中部分数据需要自动设置,部分数据不允许设置,这样可以实现接口com.opensymphony.xwork.interceptor.ParameterNameAware,可以在这个接口的acceptableParameterName(StringparameterName)方法中,定义我们可以接受哪些方法,如果允许只要让这个方法返回True就可以了。
2.过滤参数功能的拦截器(ParameterFilterInterceptor)。
它可以全局阻止非法或不允许Action访问的参数。
可以很好的和上面的组装参数的拦截器一起使用。
3.为Action设置静态数据的拦截器(StaticParametersInterceptor)。
它可以将Action定义的静态参数,设置到Action中。
4.数据验证拦截器(ValidationInterceptor)。
定义之后,会调用验证文件或实现验证接口com.opensymphony.xwork.Validateable的所有验证。
5.验证流程处理拦截器(WorkflowInterceptor)。
它和上面的拦截器一起使用,处理验证的流程。
如果验证通过则继续前进,如果发现有验证错误消息,直接转到Action中定义的输入结果(input)页面。
6.类型转换错误处理拦截器()。
它首先去取得类型转换的错误消息(主要是由设置Http请求参数的拦截器产生),如果取到错误消息,它会将错误消息传递给实现接口com.opensymphony.xwork.ValidationAware的Action,这样我们可以将这些错误消息暴露到页面中。
7.Action链拦截器(ChainingInterceptor)。
它是用来拷贝前一个Action的属性数据到当前Action中。
它要求前一个Action必须是chainResult(
8.防止页面重复提交(或页面重复刷新)拦截器。
TokenInterceptor和TokenSessionInterceptor都是防止重复提交的拦截器。
不同点是后者在Session存贮了最近一次请求的结果数据。
9.文件上传的拦截器(FileUploadInterceptor)。
实现文件上传的功能。
如果有人曾经手工写过文件上传程序,那一定会惊叹于这个拦截器。
我们可以在这个拦截器中设定上传文件的大小和类型限制。
记得需要第三方的文件上传库的支持,只要在webwork.properties中配置过,并拷贝相应的jar包就可以了。
10.进度条等待拦截器(ExecuteandWaitInterceptor)。
当Action的执行需要很长实际的时候,我们可以使用这个进度条等待的拦截器。
它会将Action放到后台执行,而在前端显示进度条或等待消息提示的页面。
11.还有一些其它不常用的拦截器,我们可以在WebWork文档中找到,这里就不再做介绍。
WebWork2建立在Xwork之上,处理HTTP的响应和请求。
WebWork2使用ServletDispatcher将HTTP请求的变成Action(业务层Action类),session(会话)application(应用程序)范围的映射,request请求参数映射。
WebWork2支持多视图表示,视图部分可以使用JSP、Velocity、FreeMarker、JasperReports、XML等。
下面我们提到的WebWork都特指WebWork2,本文档使用的版本是2.1。
2.WebWork安装-HelloWorld实例介绍
2.1WebWork安装
在具体开发使用介绍之前,搭建好运行环境是必备的。
1、我们可以从并将其解压开来。
打开解压目录,你将看到以下的文件和目录:
webwork-2.x.jar:
/*
webwork-example.war:
/*掌握它是提高你的WebWork技术水平的捷径;
webwork-migration.jar:
docs目录:
/*包括api文档、clover文档、单元测试(Junit)文档等;
lib目录:
/*
src目录:
2、WebWork是J2EEWeb框架,当然要运行在Web容器中,本文档用的是稳定的Tomcat4.1,关于tomcat的安装和部署请参考相关文档。
3、用WebWork必须要将它的运行时用到的Jar包放到Web容器可以找到的ClassPath中,将步骤1介绍的webwork-2.x.jar放到部署目录下WEB-INF\lib目录里,同时将WebWrok解压目录lib\core下的所有.jar文件也拷贝到WEB-INF\lib目录,这些是运行WebWork必需要用到的jar包。
4、了解Web框架的朋友都知道,一般Web框架都是通过一个JavaServlet控制器提供统一的请求入口,解析请求的url,再去调用相应的Action进行业务处理。
WebWork也不例外,它要求你在web.xml文件里配置一个派遣器ServletDispatcher,它初始化WebWrok的一些配置信息,解析XWork的Action配置信息,根据请求去组装和调用执行相应的拦截器(Interceptor)、Action、ActionResult(Action执行结果的输出)等,具体配置如下:
……
……
……
如此,.action结尾的所有url请求将直接有ServletDispatcher去调度。
下面我们写一个经典的HelloWorld实例,来验证你的运行环境是否可用,并感受一下简单、功能强大的WebWork的开发。
注意:
除了配置相应的标签库以外,还须将com.opensymphony.webwork.views.velocity.WebWorkVelocityServlet配置到web.xml,具体可以参考webwork-example里面的配置。
HelloWorld
首先看下面这个程序HelloWorldAction.java:
packagehelloWorld
importcom.opensymphony.xwork.Action;
publicclassHelloWorldActionimplementsAction{
Stringgreeting;
publicStringgetGreeting(){
returngreeting;
}
publicStringexecute()throwsException{
greeting="HelloWorld!
";
returnSUCCESS;
}
}
HelloWorldAction是一个普通的Java类,它实现了Action这个接口。
Action是一个非常简单的接口,只有一个方法:
/*Stringexecute()throwsException;,Action类介绍见下一节。
HelloWorldAction有一个String类型字段greeting,在execute()方法中,greeting被赋值“HelloWorld!
”,并返回String型常量SUCCESS,SUCCESS的定义详见Action接口,这个常量代表了execute()方法执行成功,将返回成功页面。
返回的页面greetings.jsp代码如下:
<%@taglibprefix="ww"uri="webwork"%>
propertyvalue="greeting"/>
greetings.jsp很简单的jsp页面,它使用了WebWork自带的标签库。
它的作用是输出变量“greeting”的值。
这个 propertyvalue="greeting"/>语句,相当于调用相应Action(HelloWorldAction)的getGreeting()方法,取得变量“greeting”的值。 这里的HelloWorld代码就这么多。 可是,HelloWorldAction怎么去调用、执行? 执行成功它又怎么知道返回到greetings.jsp? XWork的配置文件xwork.xml会负责将要执行的Action和展现的视图连接起来,见xwork.xml的如下片断: 我们先看action标签: /*表示我们调用这个Action的标识是hello,这样我们可以通过下面的url访问这个Action: /* 例如: helloWorld.HelloWorldAction"很好理解,这是真正调用执行的类。 我们在看看result标签: /*记得前面HelloWorldAction返回的字符常量SUCCESS吗? 它的值其实就是“success”,它表示Action执行成功返回success就转向这个结果;type="dispatcher"表示执行完Action,转向结果页面的方式;param参数指定了结果页面的位置: 代码写完,剩下的当然是编译、部署。 启动tomcat服务器之后我们就可以执行了: 在浏览器里输入你的地址: 你将会看到经典的: World! 3.Action Action简介 Action在MVC模式中担任控制部分的角色,在WebWork中使用的最多。 每个请求的动作都对应于一个相应的Action,一个Action是一个独立的工作单元和控制命令,它必需要实现XWork里的Action接口,实现Action接口的execute()方法。 Action接口的代码如下: packagecom.opensymphony.xwork; importjava.io.Serializable; publicinterfaceActionextendsSerializable{ publicstaticfinalStringSUCCESS="success"; publicstaticfinalStringNONE="none"; publicstaticfinalStringERROR="error"; publicstaticfinalStringINPUT="input"; publicstaticfinalStringLOGIN="login"; publicStringexecute()throwsException; } excute()方法是Action类里最重要的部分,它执行返回String类型的值,在Action中返回的值一般使用它上面定义的标准静态字符常量。 例如: 真正的值当然就是“success”,它与xwork配置文件里result标签name的值是相对应的。 它用来决定execute()方法执行完成之后,调用哪一种返回结果。 字符常量的含义如下: SUCCESS: /*返回相应的视图; NONE: 但并不返回任何视图; ERROR: 返回到错误处理视图; INPUT: /*需要从前端界面获取参数,INPUT就是代表这个参数输入的界面,一般在应用中,会对这些参数进行验证,如果验证没有通过,将自动返回到该视图; LOGIN: /*将返回该登陆视图,要求用户进行登陆验证。 用户注册例子 下面我们将以一个用户注册的例子详细介绍Action的原理: http: //tieba.bai
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WebWork 入门 使用 教程