WebWork入门使用教程.docx

上传人:b****6 文档编号:13526407 上传时间:2023-06-15 格式:DOCX 页数:72 大小:334.06KB
下载 相关 举报
WebWork入门使用教程.docx_第1页
第1页 / 共72页
WebWork入门使用教程.docx_第2页
第2页 / 共72页
WebWork入门使用教程.docx_第3页
第3页 / 共72页
WebWork入门使用教程.docx_第4页
第4页 / 共72页
WebWork入门使用教程.docx_第5页
第5页 / 共72页
WebWork入门使用教程.docx_第6页
第6页 / 共72页
WebWork入门使用教程.docx_第7页
第7页 / 共72页
WebWork入门使用教程.docx_第8页
第8页 / 共72页
WebWork入门使用教程.docx_第9页
第9页 / 共72页
WebWork入门使用教程.docx_第10页
第10页 / 共72页
WebWork入门使用教程.docx_第11页
第11页 / 共72页
WebWork入门使用教程.docx_第12页
第12页 / 共72页
WebWork入门使用教程.docx_第13页
第13页 / 共72页
WebWork入门使用教程.docx_第14页
第14页 / 共72页
WebWork入门使用教程.docx_第15页
第15页 / 共72页
WebWork入门使用教程.docx_第16页
第16页 / 共72页
WebWork入门使用教程.docx_第17页
第17页 / 共72页
WebWork入门使用教程.docx_第18页
第18页 / 共72页
WebWork入门使用教程.docx_第19页
第19页 / 共72页
WebWork入门使用教程.docx_第20页
第20页 / 共72页
亲,该文档总共72页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

WebWork入门使用教程.docx

《WebWork入门使用教程.docx》由会员分享,可在线阅读,更多相关《WebWork入门使用教程.docx(72页珍藏版)》请在冰点文库上搜索。

WebWork入门使用教程.docx

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(),这样才能进行Action的数据拷贝。

  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执行结果的输出)等,具体配置如下:

……

webwork

com.opensymphony.webwork.dispatcher.ServletDispatcher

……

webwork

*.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"%>

   FirstWebWorkExample

propertyvalue="greeting"/>

 

      greetings.jsp很简单的jsp页面,它使用了WebWork自带的标签库。

它的作用是输出变量“greeting”的值。

这个

propertyvalue="greeting"/>语句,相当于调用相应Action(HelloWorldAction)的getGreeting()方法,取得变量“greeting”的值。

这里的HelloWorld代码就这么多。

可是,HelloWorldAction怎么去调用、执行?

执行成功它又怎么知道返回到greetings.jsp?

XWork的配置文件xwork.xml会负责将要执行的Action和展现的视图连接起来,见xwork.xml的如下片断:

   

      /greetings.jsp

   

 

我们先看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模板 > 图表模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2