WebWork是开源Web应用框架(OSWAF),基于拦截器技术,其结构为:WebWork+XWork,使用了适配器+代理模式连接可独立变化的两个部分,利于重用,例如WebWork可以是MailWork,FtpWork等,一般xwork很少变动.
官方网址为: http://www.opensymphony.com ,symphony(交响乐).
本例应用场景:WebWork2.1.7+XWork1.0.5+Tomcat5.5.9
一些组件的简单介绍
XWork是一个命令模式框架,应用于强大的WebWork,也可以用于其他应用,它提供一个IOC容器,一个强大的表达式语言,数据类型转换,验证以及可插式配置.
除核心类库外,还有两个必要的库:Ognl,Oscore.
http://www.ognl.org Ognl是对象图导航语言,其部分功能类似于JSTL中的EL,只是句法不同,如有对象foo,其属性为bar,则用Ognl访问为:#foo.bar.XWork在其上做了扩展.
Oscore 是Opensymphony其它项目的公用工具类库,它依赖commons-logging.jar.其还特别提供了一个序列生成器为CMP.
实例
这个实例中所有元素都是最小配置,可以作为空项目模板,然后根据项目需要增加其它功能.
在建立servlet规范的目录结构后,首先是web.xml的配置:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<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>
</web-app>
然后是xwork.xml的配置:
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<include file="webwork-default.xml" />
<package name="examples" extends="webwork-default">
<action name="login" class="org.sfliu.webwork.action.LoginAction">
<result name="error" type="dispatcher">index.jsp</result>
<result name="success" type="dispatcher">index.jsp</result>
<interceptor-ref name="params" />
</action>
</package>
</xwork>
要注意该文件作为资源加载所以要放在类路径中,其中webwork-default.xml是必须要引入的,该文件位于webwork-2.1.7档案根下.提供了基本组件的定义.
接下来是那个jsp文件:index.jsp
<%@ page pageEncoding="gb2312" contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="ww" uri="webwork"%>
<html>
<body>
<form action="login.action" method="post">
<table cellspacing=0 width="100%">
<tr>
<td>Login ID:
<input type="text" name="userid" width=100 />
Password:
<input type="password" name="pwd" width=100 />
<input type="submit" value="Login" />
</td>
<td align=right>
Hello, <ww:property value="userid" />
</td>
</tr>
</table>
</form>
</body>
</html>
动作类:
package org.sfliu.webwork.action;
import com.opensymphony.xwork.ActionSupport;
public class LoginAction
extends ActionSupport {
private String userid;
private String pwd;
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String execute() throws Exception {
return false;
}
}
简单的一个视图和一个动作提供完毕.
运行最小需求:
WEB-INF文件夹下除了web.xml外,还要包括表单必须的标记库webwork.tld.
WEB-INF文件夹下的lib文件夹下有:webwork.jar,xwork.jar,ognl.jar,oscore.jar.
lib文件夹下有:webwork.jar,xwork.jar,ognl.jar,oscore.jar.WEB-INF文件夹下的classes文件夹下放org.sfliu.webwork.action包.
WebWork参考:
https://webwork.dev.java.net/,有个Eclipse的WebWork插件.
http://sourceforge.net/projects/opensymphony 关于WebWork层次式拉模型的MVC.