您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > WebWork 开发指南
Webwork2开发指南目录WebWork2开发指南QuickStartWebWork高级特性Action驱动模式XWork拦截器体系输入校验国际化支持Webwork2inSpringWebWork配置说明WebWork2开发指南很长一段时间内,OpenSymphony作为一个开源组织,其光辉始终被Apache所掩盖。Java程序员热衷于Apache组织Struts项目研讨之后,往往朦朦胧胧的感觉到,似乎还有另外一个框架正在默默的发展。这种朦胧的感觉,则可能来自曾经在国内流行一时的论坛软件-JiveForum。很多软件技术人员不惜从各种渠道得到Jive的源代码,甚至是将其全部反编译以探其究竟。作为一个论坛软件能受到技术人员如此垂青,想必作者睡梦中也会乐醒。而WebWork,就是Jive中,MVC实现的核心。这里我们所谈及的WebWork,实际上是Webwork+XWork的总集,Webwork1.x版本中,整个框架采用了紧耦合的设计(类似Struts),而2.0之后,Webwork被拆分为两个部分,即Webwork2.x+XWork1.x,设计上的改良带来了系统灵活性上的极大提升。这一点我们稍后讨论。QuickStart准备工作:首先下载WebWork2的昀新版本。WebWork2发行包中的\lib\core目录下包含了WebWork2用到的核心类库。将\webwork-2.1.1.jar以及\lib\core\*.jar复制到Web应用的WEB-INF\lib目录。本例的部署结构如图所示:这里我们选择了一个昀常见的登录流程来演示Webwork2的工作流程。虽然简单,但足以明理。页面流程如下:登录成功页面,显示几条通知消息:登录失败页面:只是一个简单不过的登录流程,然而在这个简单的例子里,贯穿了Webwork框架的大部分应用技术。我们将MVC框架的运作流程拆分为以下几部分加以讨论:1.将Web页面中的输入元素封装为一个(请求)数据对象。2.根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参数传入。3.逻辑处理单元完成运算后,返回一个结果数据对象。4.将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。首先来看登录界面:index.jsphtmlbodyformaction=/login.actionpalign=center登录br/p用户名:inputtype=textname=model.username/br密码:inputtype=passwordname=model.password/brpalign=centerinputtype=submitvalue=提交name=B1/inputtype=resetvalue=重置name=B2//p/form/body/html这里的index.jsp实际上是由纯html组成的,非常简单,其中包含一个表单:formaction=/login.action这表明其提交对象为/login.action表单中同时包含两个文本输入框:inputtype=textname=model.username/inputtype=passwordname=model.password/可以看到,两个输入框的名称均以“model”开头,这是因为在这里我们采用了WebWork中Model-Driven的Action驱动模式。这一点稍后再做介绍。当表单被提交之时,浏览器会以两个文本框的值作为参数,向Web请求以/login.action命名的服务。标准HTTP协议中并没有.action结尾的服务资源。我们需要在web.xml中加以设定:……servletservlet-namewebwork/servlet-nameservlet-classcom.opensymphony.webwork.dispatcher.ServletDispatcher/servlet-class/servletservlet-mappingservlet-namewebwork/servlet-nameurl-pattern*.action/url-pattern/servlet-mapping……此后,所有以.action结尾的服务请求将由ServletDispatcher接管。ServletDispatcher接受到ServletContainer传递过来的请求,将进行以下几个动作:1.从请求的服务名(/login.action)中解析出对应的Action名称(login)2.遍历HttpServletRequest、HttpSession、ServletContext中的数据,并将其复制到Webwork的Map实现中,至此之后,所有数据操作均在此Map结构中进行,从而将内部结构与ServletAPI相分离。至此,Webwork的工作阶段结束,数据将传递给XWork进行下一步处理。从这里也可以看到Webwork和xwork之间的切分点,Webwork为xwork提供了一个面向Servlet的协议转换器,将Servlet相关的数据结构转换成xwork所需要的通用数据格式,而xwork将完成实际的服务调度和功能实现。这样一来,以xwork为核心,只需替换外围的协议转换组件,即可实现不同技术平台之间的切换(如将面向Servlet的Webwork替换为面向JMS的协议转换器实现,即可在保留应用逻辑实现的情况下,实现不同外部技术平台之间的移植)。3.以上述信息作为参数,调用ActionProxyFactory创建对应的ActionProxy实例。ActionProxyFactory将根据Xwork配置文件(xwork.xml)中的设定,创建ActionProxy实例,ActionProxy中包含了Action的配置信息(包括Action名称,对应实现类等等)。4.ActionProxy创建对应的Action实例,并根据配置进行一系列的处理程序。包括执行相应的预处理程序(如通过Interceptor将Map中的请求数据转换为Action所需要的Java输入数据对象等),以及对Action运行结果进行后处理。ActionInvocation是这一过程的调度者。而com.opensymphony.xwork.DefaultActionInvocation则是XWork中对ActionInvocation接口的标准实现,如果有精力可以对此类进行仔细研读,掌握了这里面的玄机,相信XWork的引擎就不再神秘了。下面我们来看配置文件:xwork.xml:!DOCTYPExworkPUBLIC-//OpenSymphonyGroup//XWork1.0//EN=webwork-default.xml/⑴packagename=defaultextends=webwork-default⑵actionname=login⑶class=net.xiaxin.webwork.action.LoginActionresultname=successtype=dispatcher⑷paramname=location/main.jsp/param/resultresultname=loginfailtype=dispatcherparamname=location/index.jsp/param/resultinterceptor-refname=params/⑸interceptor-refname=model-driven/⑹/action/package/xwork⑴include通过include节点,我们可以将其他配置文件导入到默认配置文件xwork.xml中。从而实现良好的配置划分。这里我们导入了Webwork提供的默认配置webwork-default.xml(位于webwork.jar的根路径)。⑵packageXWork中,可以通过package对action进行分组。类似Java中package和class的关系。为可能出现的同名Action提供了命名空间上的隔离。同时,package还支持继承关系。在这里的定义中,我们可以看到:extends=webwork-defaultwebwork-default是webwork-default.xml文件中定义的package,这里通过继承,defaultpackage自动拥有webwork-defaultpackage中的所有定义关系。这个特性为我们的配置带来了极大便利。在实际开发过程中,我们可以根据自身的应用特点,定义相应的package模板,并在各个项目中加以重用,无需再在重复繁琐的配置过程中消耗精力和时间。此外,我们还可以在Package节点中指定namespace,将我们的action分为若干个逻辑区间。如:packagename=defaultnamespace=/userextends=webwork-default就将此package中的action定义划归为/user区间,之后在页面调用action的时候,我们需要用/user/login.action作为formaction的属性值。其中的/user/就指定了此action的namespace,通过这样的机制,我们可以将系统内的action进行逻辑分类,从而使得各模块之间的划分更加清晰。⑶actionAction配置节点,这里可以设定Action的名称和对应实现类。⑷result通过result节点,可以定义Action返回语义,即根据返回值,决定处理模式以及响应界面。这里,返回值success(Action调用返回值为String类型)对应的处理模式为dispatcher。可选的处理模式还有:1.dispatcher本系统页面间转向。类似forward。2.redirect浏览器跳转。可转向其他系统页面。3.chain将处理结果转交给另外一个Action处理,以实现Action的链式处理。4.velocity将指定的velocity模板作为结果呈现界面。5.xslt将指定的XSLT作为结果呈现界面。随后的param节点则设定了相匹配的资源名称。{5}interceptor-ref设定了施加于此Action的拦截器(interceptor)。关于拦截器,请参见稍后的“XWork拦截器体系”部分。interceptor-ref定义的是一个拦截器的应用,具体的拦截器设定,实际上是继承于webwork-defaultpackage,我们可以在webwork-default.xml中找到对应的params和model-driven拦截器设置:interceptors……interceptorname=paramsclass=com.opensymphony.xwork.interceptor.ParametersInterceptor/interceptorname=model-drivenclass=com.opensymphony.xwork.interceptor.ModelDrivenInterceptor/……/interceptorsparams大概是Webwork中昀重要、也昀常用的一个Interceptor。上面曾经将MVC工作流程划分为几个步骤,其中的第一步:“将Web页面中的输入元素封装为一个(请求)数据对象”就是通过params拦截器完成的。Interceptor将在Action之前被调用,因而,Interceptor也成为将Webwork传来的MAP格式的数据转换为强类型Java对象的昀佳实现场所。model-driven
本文标题:WebWork 开发指南
链接地址:https://www.777doc.com/doc-4221655 .html