功能描述:一個使用者注冊頁面register.jsp,使用者可以在這個頁面裡輸入使用者注冊的基本資訊(例如:姓名、密碼、Email等),輸入完成送出表單,執行使用者注冊的Action,執行成功傳回成功提示的頁面(register-result.jsp)并将注冊的資訊輸出。
模型:User.java
控制:RegisterAction.java
視圖:register.jsp、register-result.jsp
配置:xwork.xml
User.java
package register;
public class User {
private String username;
private String password;
private String email;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
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;
}
public String toString(){
return "username=" + username
+ ";password=" + password
+ ";email=" + email
+ ";age=" + age;
}
}
RegisterAction.java
package example.register;
import com.opensymphony.xwork.Action;
import java.sql.*;
import register.User;
public class RegisterAction implements Action{
private User user = new User();
public User getUser(){
return this.user;
}
public String execute(){
System.out.println("Start execute......"
;
System.out.println("User="+user);
Connection conn = null;
Statement stmt = null;
try{ //向資料庫中添加使用者
Class.forName("com.mysql.jdbc.Driver"
;
String url = "jdbc:mysql://localhost/test?user=root&password=root&useUnicode=true&characterEncoding=GBK";
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();
StringBuffer sb = new StringBuffer();
sb.append("INSERT INTO usertable VALUES('"
;
sb.append(user.getUsername());
sb.append("','"
;
sb.append(user.getPassword());
sb.append("','"
;
sb.append(user.getEmail());
sb.append("',"
;
sb.append(user.getAge());
sb.append("
"
;
stmt.executeUpdate(sb.toString());
}catch(Exception e1){
e1.printStackTrace();
}finally{
try{
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}catch(Exception e2){
e2.printStackTrace();
}
}
return SUCCESS;
}
}
register.jsp
<title>Register Example</title>
<table border=0 width=97>
<tr><td align="left">
<form name="register" action="register.action" method="post">
Username:<input type="text" name="user.username"><br>
Password:<input type="text" name="user.password"><br>
Email:<input type="text" name="user.email"><br>
Age:<input type="text" name="user.age"><br>
<input type="submit" name="Submit"><br>
</form>
</td></tr>
</table>
register-result.jsp
<%@ taglib prefix="ww" uri="webwork" %>
<title>Register result</title>
<table border=0 width=97>
<tr>
<td align="left">
Congratulation,your register success!<p>
Username:<ww
roperty value="user.username"/><br>
Password:<ww
roperty value="user.password"/><br>
Email:<ww
roperty value="user.email"/><br>
Age:<ww
roperty value="user.age"/><br>
</td>
</tr>
</table>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="
http://java.sun.com/xml/ns/j2ee" 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">
<display-name>
TestRegister</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>webwork</servlet-name>
<servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>webwork</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>webwork</taglib-uri>
<taglib-location>/WEB-INF/lib/webwork-2.2.1.jar</taglib-location>
</taglib>
</web-app>
xwork.xml
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"
http://www.opensymphony.com/xwork/xwork-1.0.dtd"><xwork>
<!-- Include webwork defaults (from WebWork-2.1 JAR). -->
<include file="webwork-default.xml" />
<!-- Configuration for the default package. -->
<package name="default" extends="webwork-default">
<!-- Default interceptor stack. -->
<default-interceptor-ref name="defaultStack" />
<action name="register" class="example.register.RegisterAction">
<result name="success" type="dispatcher">
<param name="location">register-result.jsp</param>
</result>
</action>
</package>
</xwork>
一些應該注意的地方:
1.Action裡最好不要實作業務代碼,Action的主要功能是提供從請求中取得參數的值,轉化成相應的模型,再将模型傳遞給執行業務操作的對象,比如:将注冊的使用者資訊存儲到資料庫中,由業務對象執行業務操作,再傳回執行的結果.
2.執行<ww
roperty value="user.username"/>,Ognl會根據value的值"user.username"去分别調用RegisterAction類的getUser()和User類的getUsername()方法,即:getUser().getUsername(),取得的資料就是前面注冊頁面輸入的使用者名。
3.xwork.xml中的<interceptor-ref name="params"/>,interceptor-ref标簽設定這個Action用到的攔截器,"params"引用的是配置檔案中的<interceptor name="params" class="
com.opensymphony.xwork.interceptor.ParametersInterceptor"/>這個攔截器将在RegisterAction的execute()方法執行之前調用,作用是将request請求的參數通過表達式語言設定到相應RegisterAction的模型裡.假設你在注冊頁面輸入使用者名“moxie”,送出表單ParametersInterceptor就會下面的操作:首先從請求中取得參數的名字和名字對應的值,分别為:“user.username”和“moxie”,根據這個名字,從OgnlValueStack中取得堆棧最上面的getUser().setUsername(“tracy”)操作,即取得RegisterAction對象的User模型,并設定username屬性的值為“tracy”。
Action是通過XWork的攔截器ParametersInterceptor從送出的表單中取得請求的參數和值,再通過OgnlValueStack來執行表達式,調用Action和模型裡相應的get或set方法,将從請求中取得的值設定到模型中去.
做完這個例子,對WebWork的了解又加深了一些,但距離随心所欲,為我所用還有很長的路要走,繼續加油,但願我的下一個項目可以通過使用WebWork脫胎換骨.