浏览 2561 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-26
一. 配置Action 1. 基本配置 . action名 . action类 . result类型 <xwork> <include file="webwork-default.xml"> <package extends="webwork-default" name="default"> <default-action-ref name="home"> <action> name="helloWorld" class="ch2.example1.HelloWorld"> <result name="input">login.jsp</result> <result type="redirect" name="success">/index.jsp</result> </action> </default-action-ref> </package> 以上例子中,如果helloWorld action返回的result code是SUCCESS,那么用户将会重定向到/index.jsp。如果返回的 result code是INPUT,将会显示login.jsp页面。 2. 配置别名重用action 将多个名字映射到相同的action类;这个名字称为别名。这时多个请求访问相同的execute()方法; 在别名基础上,可增加一个可选的method属性,指定webwork该调用哪个方法。所指定的方法格式与execute()方法一样。 这时多个请求访问不同的方法; <action class="ch2.example1.Cal" name="add"> <result name="success">cal.jsp</result> </action> <action method="minus" class="ch2.example1.Cal" name="minus"> <result name="success">cal.jsp</result> </action> 注:WebWork通过xwork.xml映射至方法有两种途径: . 通过查找与method属性的值一致的方法; . 通过查找doMethod()形式的方法; WebWork先找method属性一致方法,如找不到,再找doMethod()形式方法; 3. 不配置别名重用action 通过name!method.action形式请求访问action,其中name为action的映射名字。这时不需额外配置。 注:优先推荐,但要预防不怀好意的用户通过该途径使用你不想让用户调用的方法; 4. 通过参数自定义action 可通过在配置文件中设置参数传递给action. 从而达到非常灵活设置的目的。 a. 在xwork.xml文件的action配置位置处配置以下信息(配置参数名称为url): <action class="ch2.example1.ParamTest" name="paramTest"> <result name="success">paramTest.jsp</result> http://www.javaw.cn </action> b. action 在action中定义与参数名同名的属性以及对应的setter/getter方法,webwork在action执行时会自动调用 setter方法为属性赋在xwork.xml文件中所配置的参数值; c. jsp 通过标记: <ww:property value="属性名"> 获取参数值; 二. 配置Result 1. 基本配置: <result type="redirect" name="success">paramTest.jsp</result> result由两个部分组成: . result映射: 通过name属性指定result的逻辑名,name的属性值与action中execute()方法中的返回值相同; result标记本体内容指定跳转的路径,既可以为绝对路径(/代表包含namespace内容在内的web应用根路径), 也可以为相对路径; . result类型: 通过type属性指定,默认值为dispatcher,可以指定为redirect。如指定为redirect,则产生 一个新的请求跳转至目的地址; 2. 使用全局result映射减少重复配置 设定全局result,服务于多个action配置,减少重复配置; <global-results> <result type="redirect" name="success">paramTest.jsp</result> </global-results> <action class="ch2.example1.ParamTest" name="paramTest"> 三. 配置interceptor interceptor(拦截器)是一种很特殊的对象,它围绕着action及result的执行过程。它可以在action之前或之后及result 之后工作,实现了某些逻辑的松耦合,譬如安全、日志和校验。 1. 定义interceptor . 定义 <package name="webwork-default"> <interceptors> <interceptor class="com.opensymphony.xwork.interceptor.LoggingInterceptor" name="logger"> <interceptor class="com.opensymphony.xwork.interceptor.TimerInterceptor" name="timer"> </interceptor> </interceptor> 注:一般不需自行定义,在webwork-default.xml文件中已定义了很多interceptor。webwork-default.xml位于 webwork-2.2.4.jar文件根目录中; . 使用 <package name="webwork-default"> <interceptors> <interceptor class="com.opensymphony.xwork.interceptor.LoggingInterceptor" name="logger"> <interceptor class="com.opensymphony.xwork.interceptor.TimerInterceptor" name="timer"> </interceptor> <action class="ch2.example1.ParamTest" name="paramTest"> <interceptor-ref name="timer"> <interceptor-ref name="logger"> </interceptor-ref> </interceptor-ref> 这样设置后,当paramTest.action被调用的时侯,timer和logger两个interceptor也会相应地被调用。 2. 将多个interceptor组合为栈 将多个interceptor组合到一起,而不需要为每一个action声明数量众多的<interceptor-ref>。一个interceptor栈包含 一组interceptor,并且按照它们本身在栈中定义的顺序来执行。 . 定义 <package name="webwork-default"> <interceptors> <interceptor class="com.opensymphony.xwork.interceptor.LoggingInterceptor" name="logger"> <interceptor class="com.opensymphony.xwork.interceptor.TimerInterceptor" name="timer"> </interceptor> <interceptor-stack name="myStack"> <interceptor-ref name="logger"> <interceptor-ref name="timer"> </interceptor-ref> </interceptor-ref> . 使用 <package name="webwork-default"> <interceptors> <interceptor class="com.opensymphony.xwork.interceptor.LoggingInterceptor" name="logger"> <interceptor class="com.opensymphony.xwork.interceptor.TimerInterceptor" name="timer"> </interceptor> <interceptor-stack name="myStack"> <interceptor-ref name="logger"> <interceptor-ref name="timer"> </interceptor-ref> <action class="ch2.example1.ParamTest" name="paramTest"> <interceptor-ref name="myStack"> </interceptor-ref> </action> 3. 使用默认interceptor-ref减少重复配置 通过使用default-interceptor-ref元素,package中每一个action都不再需要定义任何interceptor。 <package name="webwork-default"> <interceptors> <interceptor class="com.opensymphony.xwork.interceptor.LoggingInterceptor" name="logger"> <interceptor class="com.opensymphony.xwork.interceptor.TimerInterceptor" name="timer"> </interceptor> <interceptor-stack name="myStack"> <interceptor-ref name="logger"> <interceptor-ref name="timer"> </interceptor-ref> <default-interceptor-ref name="myStack"> <action class="ch2.example1.ParamTest" name="paramTest"> </action> 注:如为一个action定义了interceptor,那么这个action将不再使用默认的interceptor。 四. 高级配置 1. package WebWork中的package和Java中的package在很多方面非常相似,它将多个action组织成一个模块。简化维护工作,提高 重用性。一个package中包含了所有将用到的action, result, interceptor的定义。 2. 扩展package WebWork中的package可以扩展另外的package:为其extends属性指定一个用逗号分隔的package列表,从而扩展该列表的 package。当一个WebWork package扩展另外一个package时,将会从被包含的package中复制所有的定义,并在自己本身 已有的定义基础上增加这些配置。这让你可以将配置的公共部分集中起来,减少package中重复定义的内容。 <package extends="webwork-default" name="default"> ... </package> 3. 映射namespace WebWork通过action名字和所属的namespace标识action。如果package没定义namespace属性,将使用默认的namespace: "/"。 当WebWork接收到一个请求的时侯,WebWork会将请求的URL分为namespace和action名字两个部分,然后从xwork.xml中查找 namespace/action内容,如果没有找到,则从默认的namespace中查找action。 <package namespace="/enterinfo" extends="webwork-default" name="default"> <action class="ch2.example1.ParamTest" name="paramTest"> http://www.javaw.cn <result type="redirect" name="success">paramTest.jsp</result> </action> </package> 以上访问paramTest,通过URL: http://localhost:8080/enterinfo/paramTest.action,其中: . /enterinfo为namespace的名字; . paramTest为action的名字; 多个package可以使用相同的namespace。 4. 使用include标签实现组件化 为了支持将应用程序划分为更容易管理的模块,WebWork提供了一种包含机制,可以将xwork.xml划分为多个文件,而每一个 子文件又是与一个模块相联系的。可以通过使用<include>标签指定文件名的方法将子文件包含到xwork.xml中,而WebWork 就会在应用程序的classpath中查找指定的子文件。 <xwork> <include file="webwork-default.xml"> <package namespace="/enterinfo" extends="webwork-default" name="default"> ... </package> </include> 五. 其它配置 1. web.xml <web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>webwork</servlet-name> <servlet-class> com.opensymphony.webwork.dispatcher.ServletDispatcher </servlet-class> </servlet> <servlet-mapping> <servlet-name>webwork</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <jsp-config> <taglib> <taglib-uri>webwork</taglib-uri> <taglib-location> /WEB-INF/lib/webwork-2.2.4.jar </taglib-location> </taglib> </jsp-config> </web-app> 2. webwork.properties xwork.xml定义了action映射,并且将interceptor和result应用到这些action上。而webwork.properties用来定义 application范围的设置,以及能够改变框架功能的配置参数。 WebWork首先会装载位于WebWork JAR文件中的default.properties,然后再装载webwork.properties,并且根据 webwork.properties内容改写之前装载的配置设定。</xwork></include></default-interceptor-ref></interceptor-ref></interceptor-stack></interceptor></interceptors></package> </interceptor-ref></interceptor-stack></interceptor></interceptors></package> </interceptor-stack></interceptor></interceptors></package> </interceptor-ref></action></interceptor></interceptors></package> </interceptors></package> </action></ww:property></include></xwork> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |