本文采用一个用户注册的例子,起到一个最简单的webwok2上手作用
用到的类:
Domain Object : User 类
Action Object :RegisterAction 类
用到的页面:
register .jsp
success.jsp
一.在webwork官网(http://www.opensymphony.com/webwork/download.action)下载最新的webwork版本,当前最新为webwork-2.2.4
把\webwork-2.2.4.jar文件解压出来之后,你会看到以下几个目录:
你需要把webwork-2.2.4.jar和lib目录下面的default 文件夹所有的 jar 文件拷贝到web工程的 WEB-INF 下面的lib目录中
需要配置web.xml文件如下:
- xml version="1.0" encoding="ISO-8859-1"?>
- "http://java.sun.com/dtd/web-app_2_3.dtd">
- <web-app>
- <display-name>Acme Corpdisplay-name>
- <filter>
- <filter-name>webworkfilter-name>
- <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher
- filter-class>
- filter>
- <filter-mapping>
- <filter-name>webworkfilter-name>
- <url-pattern>/*url-pattern>
- filter-mapping>
- web-app>
其中:
- <filter>
- <filter-name>webworkfilter-name>
- <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcherfilter-class>
- filter>
表示:定义过滤器
- <filter-mapping>
- <filter-name>webworkfilter-name>
- <url-pattern>/*url-pattern>
- filter-mapping>
表示:定义过滤器映射 (和servelt的培)
webwork会用filter过滤器来做前端分发器的工作,所有action指令都会通过它来转发,所以这里不要写错,以后这里是不会变的!
eclispse 下 web项目的结构如下:
再次提醒把前面的 jar文件放在 WEB-INF 下面的lib目录中,src目录下的xwork.xml是webwork的配置文件,后面会讲到
register.jsp页面:
- <%@taglib prefix="ww" uri="/webwork"%>
- <html>
- <body>
- <form action="register.action" name="register" method="post">
- username:<input type="text" name="user.username"><br>
- password:<input type="password" name="user.password"><br>
- <input type="submit" value="submit">
- form>
- body>
- html>
第一步:导入webwork的标签库 (然后不要马上写代码, 先按 Alt + / ,看eclipse 有没有出现 ww的标签帮助提示,如果没有出现说明你配置出错了,检查jar文件是否拷贝在lib文件夹里面没有)
第二步: 注意 表单 form 的action 为 register.action , 这个不能写错.前端控制器需要根据这个名字来匹配正确的action
第三步:注意 input 的name必须是 user.username ,user.password 形式, 可以理解成:user代表对象,username,passwrod 是user 对象的属性,
下面是Domain Object (域对象) User,说白了就是JavaBean
- package mypackage;
- public class User {
- private String username;
- private String password;
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
最后一段Java 代码,也是webwork的核心:Action
- package mypackage;
- import com.opensymphony.xwork.Action;
- public class RegisterAction implements Action {
- private User user = new User();
- public String execute() throws Exception {
- System.out.println("begin execute!......");
- return SUCCESS;
- }
- public User getUser() {
- return user;
- }
- }
每个用户自己定义的Action都必须实现 com.opensymphony.xwork.Action的方法execute
可能你很奇怪Action里面居然没有HttpServletRequest,HttpServletRespone这些东东.这就webwork的好处,你不需要自己去处理和Servlet有关的东西,webwork已经通过拦截器技术把诸如从页面获取参数这些功能给你在后面做好了!你只需要写一个getUser()方法让返回页面也能得到user对象.
注意:这里 的user 是不是和前面register.jsp页面里面的user.username,有某种关联呢?
对头!,前面的user.username就用这里的user,
execute 相当于Servlet 的service 方法 ,在这里面可以调用业务层里面的服务,如果因为某种原因(比如权限验证)失败了,可以
return INPUT;表示返回请求页面,这里就直接返回SUCCESS;
最后一个配置xwork.xml
请看前面的eclipse工程结构截图,xwork.xml 文件应该放在classpath 根目录下面,也就src根目录下.
这里只需要注意
- <action name="register" class="mypackage.RegisterAction">
里面的register
它对应的class 名字就是我们自己写的类:mypackage.RegisterAction,
实际上,webwok帮我们把一个请求的字符串(register)映射成一个Action Object了,然后由我们的Action Object 来处理这次请求!
- <interceptor-ref name="params"/>
这里引用的就是前面提到的拦截器技术,它帮我们在后台提供了获得请求页面参数的功能.webwork还提供了其他的拦截器,你自己也可以定义自己的拦截器
success.jsp:
- <%@taglib prefix="ww" uri="/webwork"%>
- <p>welcome to you !p>
- username:<ww:property value="user.username"/><br>
- password:<ww:property value="user.password"/><br>
页面效果:
register.jsp
success.jsp
至此你已经成功搭建起一个webwork工程,后面还有很多要学
验证
拦截器
value stack
和spirng集成
webwork测试