WebWork手册.docx

上传人:b****2 文档编号:24516847 上传时间:2023-05-28 格式:DOCX 页数:31 大小:46.75KB
下载 相关 举报
WebWork手册.docx_第1页
第1页 / 共31页
WebWork手册.docx_第2页
第2页 / 共31页
WebWork手册.docx_第3页
第3页 / 共31页
WebWork手册.docx_第4页
第4页 / 共31页
WebWork手册.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

WebWork手册.docx

《WebWork手册.docx》由会员分享,可在线阅读,更多相关《WebWork手册.docx(31页珍藏版)》请在冰豆网上搜索。

WebWork手册.docx

WebWork手册

WebWork使用指南

引言

WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EEWeb框架。

WebWork已经被拆分成了Xwork1和WebWork2两个项目。

 

Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。

Xwork提供了很多核心功能:

前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL–theObjectGraphNotationLanguage),IoC(InversionofControl倒置控制)容器等。

WebWork2建立在Xwork之上,处理HTTP的响应和请求。

WebWork2使用ServletDispatcher将HTTP请求的变成Action(业务层Action类),session(会话)application(应用程序)范围的映射,request请求参数映射。

WebWork2支持多视图表示,视图部分可以使用JSP,Velocity,FreeMarker,JasperReports,XML等。

在WebWork2.2中添加了对AJAX的支持,这支持是构建在DWR与Dojo这两个框架的基础之上.

用于WebWork辅助开发的一个Eclipse插件:

EclipseWork

 

文件目录

webwork下载一般包含的目录有:

webwork-2.x.jar:

WebWrok最新发布的Jar包

webwork-example.war:

WebWrok自带的很有代表性的功能演示例

webwork-migration.jar:

提供快速将1.x版本移植到2.x版本所用的类文件

docs:

WebWrok的使用文档;包括api文档、clover文档、单元测试(Junit)文档等

lib:

WebWork在运行或编译时所用到的所有.jar包

src:

源程序目录

xwork运行

当URL发生请求到动作action,将由ServletDispatcher调度,从配置文件xwork.xml里查找与提交动作匹配的Action名字,通过这个名字XWork框架找到对应Action的类;然后XWork框架会负责去创建这个Action类的对象并调用execute()方法进行用户注册操作。

正确执行execute()方法返回String类型数据后,它会请求再派遣到用户所配置指定好的页面。

当然在action执行之前会先执行配置好的拦截器。

webwork.xml中

用来配置拦截器。

其中params是在webwork-default.xml定义好的,可以是"chain"、"model-driven"等等。

引用的是

com.opensymphony.xwork.interceptor.ParametersInterceptor。

拦截器将作用是将request请求的参数值通过表达式语言设置到相应Action的模型里。

例如:

某jsp里的,它输入的值会由Action类的getUser()和User类的setUserName(“…”)设置到这个User模型里。

拦截器的使用,使得Action类和Web实现了完全的解耦

开发步骤

描述一个WEB项目使用xwork的开发过程

创建WEB工程

1、新建一个WEB工程将webwork的jar包放到web应用的WEB-INF\lib目录里

2、将xwork.xml、webwork.properties等webwork配置文件放到WEB-INF\classes目录

配置文件

Web框架都是通过web.xml配置一个JavaServlet控制器提供统一的请求入口,解析请求

的url,再去调用相应的Action进行业务处理。

WebWork也是如此,它是在web.xml文

件里配置一个派遣器ServletDispatcher,ServletDispatcher初始化WebWrok的一些配置

信息,解析XWork的Action配置信息,根据请求去组装和调用执行相应的拦截器

(Interceptor)、Action、ActionResult(Action执行结果的输出)等。

另外与Struts类似,Webwork也需要配置本身xml。

这个文件是xwork.xml,也是设置action及其转向

web.xml

webwork

com.opensymphony.webwork.dispatcher.ServletDispatcher

webwork

*.action

//如果使用WebWork自带的标签库则必须载入WebWorkVelocityServlet,

并配置webwork.tld

velocity

com.opensymphony.webwork.views.velocity.WebWorkVelocityServlet

velocity

*.vm

webwork

/WEB-INF/webwork.tld

xwork.xml

/main.jsp

/index.jsp

/login.jsp

/error.jsp

下面是job.xml

login.jsp

system/register.jsp

说明:

1、设置全局跳转

global-results允许定义全局的输出目地,只要继承它所在的package,这些全局定义都是可用的。

比如某个package下有多个action配置,那么这些action都可以使用全局的跳转,调用方式与action局部跳转一致。

2、必须包括webwork-default.xml

3、定义一个package,这个包可以继承其它package。

继承后则拥有此package中所有action配置

4、namespace命名空间:

用于指定一个action调用路径,假如此应用项目名为SchdulerCenter,那么要调用此例的注册action(job.xml),页面中提交的路径应为<%=request.getContextPath()%>/job/register.action。

当成功时返回页面路径为<%=request.getContextPath()%>/job/login.jsp

因为:

result目的地没有‘/’出现,表示目标页面的路径与action请求的命名空间路径一致,故将跳转到<%=request.getContextPath()%>/job/login.jsp

当失败时返回页面路径为<%=request.getContextPath()%>/system/register.jsp

因为:

result目的地出现‘/’,表示目标页面的路径是自定义,并非默认与命名空间一致,故将跳转到自定义的目的地<%=request.getContextPath()%>/system/register.jsp

5、通过include节点可将其它配置文件导入至默认配置文件xwork.xml中,此例将job.xml导入。

为了业务逻辑更加清晰,建议xwork.xml不设置package,而全部用include导入每个业务块的配置文件。

比如关于登陆与注册的action可以创建一个login.xml,login.xml设置好action;有关作业的业务可以创建一个job.xml并设置好action。

最后xwork.xml只需要引入这两个xml即可。

6、通过result定义action返回的跳转的名字,跳转的处理模式有:

dispatcher:

类似struts的forward,本系统页面间转向,能传递request,session

数据

redirect:

浏览器跳转,可转向其它系统页面,无法将request,session数据传送

velocity:

将指定的velocity模板作为结果呈现页面

xslt:

将指定的xslt作为结果呈现页面、

chain:

将处理结果交给另一个Action处理,以实现Action的链式处理

7、通过param设定action跳转相应的资源名称

8、action拦截器设定,webwork拦截器有name="params"与name="model-driven"两种方式,在webwork-default包都有定义。

拦截器是在action运行之前执行。

model-driven是针对action的Modle驱动模式的拦截器实现

9、上面的配置文件在拦截器设定方面还可修改为如下:

//通过interceptors组合params与model-driven拦截器,以减少interceptor-ref声明

...

//启用组合后的指定拦截器,

模型

通常所指的JavaBean。

主要是一些属性及其set/get方法

Action

action操作有两种驱动模式

Property-Driven模式:

implementsAction或extendsActionSupport

Model-Driven模式:

implementsAction

注:

建议采用Model-Driven模式使得业务逻辑更加清晰

Property-Driven模式

publicclassInfoActionimplementsAction{

/*直接将页面要用的数据封到InfoAction,将InfoAction同时当成Bean*/

publicStringcompany;

/*重写Action的execute方法,指定返回跳转*/

publicStringexecute()throwsException{

company="ultrapower";

returnSUCCESS;

}

publicStringgetCompany(){

returncompany;

}

publicvoidsetCompany(Stringcompany){

pany=company;

}

}

说明:

采用此模式,在页面中可以直接使用action属性命名表单控件,如上例中,对于页面有一个文本框,,其中company是Action的属性.在提交页面时company的值自动映射到InfoAction的company属性。

此模式建议不采用。

Model-Driven模式

/*此模式将页面要用的数据单独作成Bean类*/

publicclassMessage{

publicStringaddress;

publicStringgetAddress(){

returnaddress;

}

publicvoidsetAddress(Stringaddress){

this.address=address;

}

}

然后action

publicclassMessageActionimplementsAction{

/*将页面要用的数据Bean作为属性*/

publicMessagemessage;

/*重写Action的execute方法,指定返回跳转*/

publicStringexecute()throwsException{

//TODOAuto-generatedmethodstub

returnnull;

}

publicMessagegetMessage(){

returnmessage;

}

publicvoidsetMessage(Messagemessage){

this.message=message;

}

}

说明:

采用此模式,在页面中可以直接使用模式属性命名表单控件,如上例中,对于页面有一个文本框,,其中message是Action的属性,即模型类对象Message。

address又是模型对象Message的属性,在提交页面时message.address的值自动映射到InfoAction的message属性对象。

采用Model-Driven模式使用webwork标签比较简洁。

建议采用

ModelDriven接口

在webwork中提到com.opensymphony.xwork.ModelDriven接口是做什么的呢?

它是将ObjectgetModel()取得的Model放到ValueStack中。

这样在页面就可能使用webwork标签将值输出。

Property-Driven模式与Model-Driven模式都可以实现这个接口来将Model放入ValueStack

注意:

Model-Driven(模型驱动)的Action与com.opensymphony.xwork.ModelDriven接口是二回事。

Model-Driven只是action处理页面的一种方式

Action动态请求

通常情况下提交请求是转到Action的execute方法,webwork允许灵活的配置请求并转到相应的处理方法。

如下:

假如LoginAction有execute()方法和view()方法,请求名为login,那么

请求名为login.action时,进入execute()方法。

请求名为login!

view.action时,进入view()方法。

ActionContext

由于Xwork与Web无关性,我们的Action不用去依赖于任何Web容器,不用和那些JavaServlet复杂的请求(Request)、响应(Response)关联在一起。

对请求(Request)的参数(Param),可以使用拦截器框架自动调用一些get()和set()方法设置到对应的Action的字段中。

但是,仅仅取得请求参数的值就能完全满足我们的功能要求吗?

不,在Web应用程序开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServletHttp的请求(HttpServletRequest)、响应(HttpServletResponse)操作。

ActionContext简介

ActionContext(com.opensymphony.xwork.ActionContext)是Action执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个Map而已),它存放放的是Action在执行时需要用到的对象,比如:

在使用WebWork时,我们的上下文放有请求的参数(Parameter)、会话(Session)、Servlet上下文(ServletContext)、本地化(Locale)信息等。

在每次执行Action之前都会创建新的ActionContext,ActionContext是线程安全的,也就是说在同一个线程里ActionContext里的属性是唯一的,这样我的Action就可以在多线程中使用。

ActionContext获取

通过ActionContext的静态方法:

ActionContext.getContext()来取得当前的ActionContext对象,如下代码:

publicstaticActionContextgetContext(){

ActionContextcontext=(ActionContext)actionContext.get();

if(context==null){

OgnlValueStackvs=newOgnlValueStack();

context=newActionContext(vs.getContext());

setContext(context);

}

returncontext;

}

其中actionContext对象的创建为:

staticThreadLocalactionContext=newActionContextThreadLocal();

ActionContextThreadLocal是实现ThreadLocal的一个内部类。

ThreadLocal可以命名为“线程局部变量”,它为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。

这样,我们ActionContext里的属性只会在对应的当前请求线程中可见,从而保证它是线程安全的。

ActionContext运用

接获取HttpServletRequest、HttpServletResponse、HttpSession信息,如下例

例一:

获取所有参数中某个参数的值

//取得我们当前的ActionContext对象context

ActionContextcontext=ActionContext.getContext();

//从context对象里获取我们所有的请求参数,取得的却是一个Map对象

Mapparams=context.getParameters();

//得到的Map对象有许多参数值,这举例取request请求的“username”参数值

Stringusername=(String)params.get(“username”);

例二:

获取HttpSession

Mapsession=ActionContext.getContext().getSession();

此例取得的session却是Map类型的对象,这是为什么?

原来,WebWork框架将与Web相关的很多对象重新进行了包装,比如这里就将HttpSession对象重新包装成了一个Map对象,供我们的Action使用,而不用直接和底层的HttpSession打交道。

也正是框架的包装,让我们的Actoion可以完全的和Web层解藕。

ServletActionContext

如果Action需要直接与JavaServlet的HttpSession、HttpServletRequest等一些对象进行操作,则需要利用ServletActionContext。

ServletActionContext简介

ServletActionContext(com.opensymphony.webwork.ServletActionContext),这个类直接继承了我们上面介绍的ActionContext,它提供了直接与JavaServlet相关对象访问的功能,它可以取得的对象有:

1、javax.servlet.http.HttpServletRequest:

HTTPservlet请求对象

2、javax.servlet.http.HttpServletResponse;:

HTTPservlet相应对象

3、

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1