快捷搜索:

JavaPub系列--webwork开发指南-1

编译:Brickhan

邮件:brickhan2003@yahoo.com.cn

网站:http://www.opensymphony.com/webwork/ ,

http://www.javapub.com/

关键词:webwork简称ww

版权申明:容许非盈利性引用,如有转载,请注明滥觞:“编译:brickhan;转载自http://www.javapub.com ”字样, 版权归原作/译者所有。

1 若何安装

1.1 下载后,解包到你选择的目录

复制/lib/webwork.jar到你自己的web利用的/WEB-INF/lib目录下,webwork在某些功能方面必要依附其他的支持包,这些包是在supporting-jars的文件夹里,你必要做的是把这些包包孕到你的classpath中。

1.2 改动web.xml文件

改动web.xml文件以包孕webwork的设置,若何设置的内容,请不雅察$WEBWORK/src/resource/web/WEB-INF/web.xml文件。

1.3 Taglib部分的选择

假如你不盘算应用taglib、Velocity、或者XSLT,仅仅只必要在web.xml中不要包孕这些内容就可以了。

1.4 Log的设置

Webwork应用log4j,假如你的app server没有安装log4j,你必要增添log4j,复制log4j.jar文件到相宜的lib目录。假如你应用tomcat,那么安装目录是$TOMCAT_HOMElib,当然也可以安装到你的web利用的路径。但必要留意的是假如appserver也适用log4j,你必要小心版本冲突。

1.5 (可选)javaclient

假如你盘算在一个javaclient中应用webwork,那么必要将webworkclient.jar增添到你的client的classpath中,这将容许webwork应用ClientServlet的dispatch措施。别的client还必要引用log4j.jar.

到此,安装已经完成,你可以开始开拓你的webwork的action和view了。来组建你的利用

2 设置webwork

2.1 Framework部分

2.1.1 基础设置设置设备摆设摆设文件

webwork和其他的mvc框架一样,经由过程设置property文件就可以设置设置设备摆设摆设webwork,经由过程设置设置设备摆设摆设文件,你可以设置webwork的行径。缺省环境下,webwork探求两个property文件:webwork.properties和default.properties,来发明webwork.configuration.properties属性,这个属性的值是用来装载你实际设置设置设备摆设摆设webwork的设置设置设备摆设摆设文件。

webwork.configuration.properties的缺省值是:views,webwork,webwork/default.

这个用逗号瓜分的列表是奉告webwork去探求views.properties、webwork.properties和default.properties属性文件。你可以在webwork.properties文件中定义任何属性设置来覆盖default.properties中的设置,也可以为你的利用定义新的属性值。还必要在views.properites中定义你的views。

下面是webwork识别的属性列表:

Properties

? webwork.action.packages - When you refer to actions in URLs, you may include the absolute or a relative package name. If you use a relative name, WW will prefix the name with your list of prefixes to see if it can find the action. You will normally override this property.

? webwork.action.factory - The action factory WW will use to retrieve the desired action. DefaultActionFactory is the default. It chains together factories to provide a chain of responsibility. It will ask the first factory in the chain for the action. This factory will either return the appropriate action or pass the request up the chain for the next factory to service the request.

? webwork.configuration - Class WW will use to load configurations. The default is DefaultConfiguration.

? webwork.configuration.properties - The list of property files WW will load. By default, WW will load webwork.properties and default.properties files to look for this property setting. It will then load all indicated property files and XML view config file indicated by webwork.configuration.xml. Only these last configuration files are used. By default this property is set to views,webwork,webwork/default.

? webwork.configuration.xml - The XML view configuration file. The default is actions. You can null it by setting its = to nothing if you do not plan to map your views this way.

? webwork.log4j.configfile - The configuration file to use to configure log4j logger. You can null it by setting its = to nothing if you do not want WW to configure log4j.

? webwork.action.extension - The extension WW will use to identify an action. You will need to modify your web.xml as well if you change it from the default “action.”

? webwork.multipart.parser - The parser WW should use for multi-part content.

? webwork.multipart.saveDir - The directory WW should save the multi-part content to.

? webwork.multipart.maxSize - The maximum file size WW will allow for multi-part content

作为实例你可以参看缺省设置设置设备摆设摆设文件:default.properties.

2.1.2 若何覆盖一个属性

覆盖一个ww的属性是很轻易的,它在你的classpath路径中搜索webwork.properties文件。平日你可以将这个文件放在你的WEB-INF/classes目录下。在这个文件中,你增添你想要覆盖的属性。别的,你也可以增添你法度榜样中必要应用的其他属性,并可以经由过程webwork.config.Configuration的静态措施来造访这些属性。

例如:我们可以在webwork.properties应用如下行,包孕(Acme公司的action)来覆盖webwork.action.packages属性。

Webwork.action.packages=com.acme.action

2.2 Views

Views.properties文件定义了对应于Action或者JSP mappings的又名,这样可以容许你抽象的引用Actions和JSP。例如:你可以为testfoo.action定义一个又名为Test,那么ww将从views.properties中解析testfoo.action为Test.

" method="POST">

下面列示的是一个views.properties文件的典型。留意:Test!foo定义了驱动action的敕令,这意味着testfoo.action又名将导致ww获取Test action并调用doFoo措施。返回值是success,那么ww将解析又名testfoo.success并将test.jsp显示出来。

Testfoo.action=Test!foo

testfoo.success=test.jsp

假如你爱好在xml文件中定义你的view。,而不是在一个properties文件中,那么你可以供给一个actions.xml文件来办理这个问题。缺省环境下,ww将读取该文件中定义的任何views,这里有一个actions.xml文件的实例。

这个xml文件的DTD文件是webwork的宣布包的/etc/actions.dtd文件。

是应用如下得的算法来从设置设置设备摆设摆设文件中找到一个view的:

查询一个设置设置设备摆设摆设文件的actionName.viewName进口,若找到,就应用这个属性值,假如找不到,那么action的名称中就被移去部分,直到找到匹配项。例如:我们有如下的一个view mapping,并有一个foo.bar的action被履行,它的返回为success。Ww将要搜索foo.bar.success,然而,并不能找到匹配项。以是按照该算法。bar被移去,然后搜索foo.success,结果是找到。这容许你定义象login,error,success或任何你必要的得全局mapping。

foo.success=foo.jsp

2.3 Logger

Ww应用log4j来记录日志的,这是一个强大年夜的弹性的日志器,为你的利用供给办事。Ww经由过程一个property文件log4j.properties来设置设置设备摆设摆设logger,如下:

# A log4j properties file

### The WebWork console appender

log4j.category.webwork=DEBUG,WebWorkConsole

log4j.additivity.webwork=false

log4j.appender.WebWorkConsole=org.apache.log4j.ConsoleAppender

log4j.appender.WebWorkConsole.Threshold=DEBUG

log4j.appender.WebWorkConsole.layout=org.apache.log4j.PatternLayout

log4j.appender.WebWorkConsole.layout.ConversionPattern=[%x (%c{1})] %m%n

log4j.category.webwork.action.test=INFO

2.3.1 若何在actions中应用log

大年夜部分利用的actions是从根基action ActionSupport承袭来的,这个根基action供给了一个protected的log属性给你,用来在你的actions中输出logs

2.3.2 若何将log记录到一个文件

用一个相符你必要的log4j设置设置设备摆设摆设来覆盖ww的webwork.log4j.configfile属性,你可以指定一个属性或者一个XML文件。

3 Model-1与Model-2

一个web利用的framework最紧张的义务便是支持逻辑、内容、和体现层的分离,假如没有实现这些,掩护起来是很麻烦的。假如这样进入小组开拓,那么开拓历程是很艰苦的。而实现这些分离的盛行法子是采纳MVC的设计模式,MVC的模式将这些代码分离成几部分来处置惩罚model(商业逻辑)、controller(利用逻辑)、view。跟着这种分离,下一个问题便是controller若何和view之间进行交互。现在有两种盛行的模型:Model-1和Model-2

3.1 Model-1

Model-1的基础思路是从界面层调用controller的代码。如:JSP或模版,假如你应用JSP,那就意味着webwork的action是经由过程“webwork:action”tag来履行的或经由过程应用“webwork:bean”来调用javabean来履行的。

3.2 Model-2

Model-2的措施:对付那些代码被调用,应用哪个view来显示,平日由第三方(平日是一个servlet dispatcher),这个分发器(dispatcher)将对HTTP的哀求的URL进行解码,然后抉择应该履行什么代码。代表节制代码的java工具被找到并履行,然落后行一些自定义的利用逻辑和商业逻辑的处置惩罚,履行完成后,分发器(dispatcher)将forward造访哀求到一个view处置惩罚器(如:JSP),然后前面处置惩罚的数据就被这个view显示出来。

3.3 若何应用MVC

由于controller逻辑和显示的孕育发生是完全分离的,那么根据履行的结果而显示不合的view给用户是完全可能的,如:假如处置惩罚历程掉足,那么一个差错页面将被显示出来。

Model-1的优点如下:

l 不必要在代码和显示间建立一个映射。

l 很轻易就能从JSP或模版中知道是什么代码被履行。

Model-2的优点:

l 清楚的代码和显示层的划分,同一个显示页可以被许多不合的action复用,每个action可以相异地造访数据,但应用相同的要领来显示。

l 假如Action的处置惩罚结果有许多不合的状态,如:“success”、“need more input”、“error occurred”等,那么应用Model-2就很轻松的针对不合的状态应用不合的叶面。

关于什么时刻应用什么模式,一个简明扼要的规则是:在为显示而查询数据的read-type的代码,就应用Model-1,而对付数据被action更新或一个流程必要处置惩罚就应用Model-2。

4 Action API

Actions 是webwork的中间,是你利用的controller,例如:让我们来看一个表单宣布的通俗流程。用户输入信息并宣布它,应用ww你应该将这个表单post给一个action(*.action)的URI。Servlet容器看到所有action URI被映射到分发器(dispatcher)servlet。以是这个post也被送到分发器来处置惩罚。分发器在URI的根基上找到相宜的action并建立它的context,context建立好之后,分发器将调用action的履行措施,action将履行它的事情并返回一个字符串给分发器,让分发器用来抉择什么视图应该显示给用户。大年夜多半环境,你将返回SUCCESS, ERROR, INPUT, 或者 LOGIN。为完成这些你必要供给一个view mapping entry来将这些映射到view。

Ww必要所有的action有响应的view,但这个规则有2处例外,第一个是:假如你的action是一个chain中的一部分,那么你不必要响应的view,只有chain中的着末一个action必要一个view。第二个例外是:假如你的action返回NONE,这是一个特殊的标示。Ww用来唆使分发器不要forward这个哀求到一个view。这个假设是你供给任何哀求的必须的处置惩罚,如:respond.sendRedirect()。

Action的强大年夜功能来自于它的context,当获得一个action,那么它的context由DefaultActionFactory来构建,这个类将其他设置action的context的factories链接在一路。例如:假设你的action是一个java action,缺省action factory将委派查找action给ParametersActionFactory,这个类将又委派给下一个factory,依次往下委派。直到JavaActionFactory 来处置惩罚这个调用并返回 Java action. ParametersActionFactory 然后在request的参数的根基上设置这个action的所有 setters .。而各层次的factories可能也可能不介入设置这个action的context。某个factories 是经由过程反省一个marker接口来抉择是否介入设置action的context。. WW 供给了几个 marker 接口,action可以有选择的来实现 that an action may choose to implement. 别的,这些层次的 factories 容许你从Java, JSP, JavaScript, 和 XML 文件来创建action. 然则,大年夜多半环境下你的action是承袭自ActionSupport 的Java文件。

(未完待续)

您可能还会对下面的文章感兴趣: