📄 第一章 webwork入门.txt
字号:
WebWork.Jar包 com.opensymphony.webwork.default.properties文件。
webwork.jar webwork-default.xml。
xwork.jar xwork-default.xml。
xwork.jar com.opensymphony.xwork.validator.validators.default.xml的规则
一、 webwork介绍
WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.2.
现在的WebWork2.x前身是Rickard Oberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。
WebWork2建立在Xwork之上,大量使用拦截器机制(interceptor),在方法前或后执行。WebWork2支持多视图表示,视图部分可以使用JSP, Velocity, FreeMarker, JasperReports,XML等。
使用的版本是2.2。
二、WebWork架构图
1. 表示一次Action请求所要经过的Servlet filters(Servlet 过滤器)。我们可以看到最后一个filter就是我们前面介绍的WebWork的前端控制器。
2. 一次请求到了WebWork的前端控制器,它首先会根据请求的URL解析出对应的action 名称,然后去咨询ActionMapper这个action是否需要被执行。
3. 如果ActionMapper决定这个action需要被执行,前端控制器就把工作委派给ActionProxy。接着她们会咨询WebWork的配置管理器,并读取在xwork.xml文件中定义的配置信息。接下来ActionProxy会创建ActionInvocation对象。
4. ActionInvocation是Xwork原理的(Command模式)实现部分。它会调用这个Action已定义的拦截器(before方法),Action方法,Result方法。
5. 最后,看上面流程的图的方向,它会再执行拦截器(after方法),再回到Servlet Filter部分
6. 最后结束并传给用户一个结果响应。
http请求-->一系列过滤器(FilterDispatcher)-->ActionMapper-->ActionProxy(读取xwork.xml)-->创建Action对象(command模式)-->方法前拦截器-->excute方法并定位返回的视图-->方法后拦截器-->响应视图
三、WebWork的三个关键组件
1、 Action
一般一个Action代表一次请求或调用,是基于Command模式的实现。在WebWork中,一般Action类需要实现Action接口,或者直接继承基础类ActionSupport。不要将业务逻辑放在Action中。
2、 Result。
它是一个结果页面的定义。它用来指示Action执行之后,如何显示执行的结果。Result Type表示如何以及用哪种视图技术展现结果。通过Result Type,WebWork可以方便的支持多种视图技术;而且这些视图技术可以互相切换,Action部分不需做任何改动。
3、 Interceptor。
WebWork的拦截器,WebWork截获Action请求,在Action执行之前或之后调用拦截器方法。这样,可以用插拔的方式将功能注入到Action中。WebWork框架的很多功能都是以拦截器的形式提供出来。例如:参数组装,验证,国际化,文件上传等等。
四、开发一个最简单的登陆的例子
1. 导入jar包,将常用的jar拷贝到lib目录下
2. 注册webwork组件,修改web.xml,加上webwork的过滤器
<filter>
<filter-name>webwork</filter-name>
<filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>webwork</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
3. 写登陆页面 login.jsp
<%@ page contentType="text/html;charset=GBK" %>
<body align="center">
<form name="form1" action="user.action" method="post">
<table align="center">
<tr><td>用户名:<input type="text" name="uid" /></td></tr>
<tr><td>密 码:<input type="password" name="pwd" /></td></tr>
<tr><td align="center"><input type="submit" value="提交" /><input type="reset" value="重置" /></td></tr>
</table>
</form>
</body>
然后用webwork的标签改写:将调用user.setUid()与user.getUid()
<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib uri="/webwork" prefix="ww" %>
<body align="center">
<ww:form name="form1" action="user.action" method="post">
<table align="center">
<tr><td><ww:label value="用户名:"/><ww:textfield name="user.uid" /></td></tr>
<tr><td><ww:label value="密 码:"/><ww:password name="user.pwd" /></td></tr>
<tr><td align="center"><ww:submit value="提交" /><ww:reset value="重置" /></td></tr>
</table>
</ww:form>
</body>
4. 写LoginAction
实现implements Action接口,再封装一个User类,也可不封装,将这个action同时作为javabean.在execute方法中调用代理处理验证,成功返回SUCCESS,失败返回到INPUT或通用错误页面error.
package org.accp.webwork.action;
import com.opensymphony.xwork.Action;
public class LoginAction implements Action{
private String uid;
private String pwd;
public String execute() throws Exception {
if(uid.equals(pwd))
return this.SUCCESS;
return this.INPUT;
}
public String getPwd() {return pwd;}
public void setPwd(String pwd) {this.pwd = pwd;}
public String getUid() {return uid;}
public void setUid(String uid) {this.uid = uid;}
}
5. 在src下写配置文件webwork.properties
webwork.ui.theme=simple
webwork.i18n.encoding=gbk
webwork.locale=zh_CN
webwork.devMode = true
webwork.i18n.reload=true
webwork.configuration.xml.reload=true
以下是常用的,并有解释
如果在ClassPath中没有这个文件,WebWork会自动读取WebWork的Jar包里面的/com/opensymphony/webwork/default.properties文件。
webwork.ui.theme=simple //指定页面布局为简单的,不会缺省生成表单。default的template用xhtml
webwork.i18n.encoding=gbk //gbk后面加空格都不行,这是解决乱码问题
webwork.locale=zh_CN
webwork.devMode = true //true为开发模式,提供更多的友好性,如自动加载i18n与xwork.xml文件等
webwork.configuration.xml.reload=true //xwork.xml改变后自动重新加载
webwork.i18n.reload=true //i18n改变后重新加载
webwork.objectFactory = spring //设置WebWork对Spring的支持
webwork.action.extension=action,do //将特定后缀请求映射到对应的Servlet
webwork.tag.altSyntax=true //altSyntax的default值为true。在以前如果要为标签的某一属性设置String类型的值,就必须给这个值加上单引号了,否则这个value将会被认为是存在于Value Stack的Object所对应的key。如果加上''又会有太多的双与单引号,于是,新的语法被提了出来:使用%{...}来指明某一个部分需要到Value Stack中取值,这样就可以将多余的单引号去掉了。为了使用新的语法,我们就必须将altSyntax设为true。
6. 在src下写配置文件xwork.xml
1) dtd可在xwork.jar包下的xwork-default下拷贝过来
2) webwork-default.xml位于webwork.jar包下,包含了一些result-type与interceptors
3)package, name可随便写,extends一定要写,表示webwork.jar/webwork-default.xml中的<package name="webwork-default">名字。
4) default-interceptor-ref
缺省的截获器在方法前调用,是basicStack,一组拦截器栈,同时包括多个拦截器
<interceptor-stack name="defaultStack">
<interceptor-ref name="static-params"/>
<interceptor-ref name="params"/>
<interceptor-ref name="conversionError"/>
</interceptor-stack>
5) action
name属性对应页面的调用名称,class指定类名,可选属性"method"用来告诉WebWork调用action的那个方法.如果method属性为空,WebWork调用默认调用*execute*()方法.如果Action类中既没有execute()方法也没有在xml文件中指定其他方法,WebWork会抛出异常.
6) result
name属性不写,默认是success。
<result>/main.jsp</result>
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
<include file="webwork-default.xml"></include>
<package name="aaa" extends="webwork-default">
<default-interceptor-ref name="basicStack"></default-interceptor-ref>
<action name="user" class="org.accp.webwork.action.LoginAction">
<result name="success">/succ.jsp</result>
<result name="input">/login.jsp</result>
</action>
</package>
</xwork>
7. 添加succ.jsp页面
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -