天天看點

WebWork完成使用者注冊的例子

功能描述:一個使用者注冊頁面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......"

WebWork完成使用者注冊的例子

;

System.out.println("User="+user);

Connection conn = null;

Statement stmt = null;

try{                      //向資料庫中添加使用者

Class.forName("com.mysql.jdbc.Driver"

WebWork完成使用者注冊的例子

;

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('"

WebWork完成使用者注冊的例子

;

sb.append(user.getUsername());

sb.append("','"

WebWork完成使用者注冊的例子

;

sb.append(user.getPassword());

sb.append("','"

WebWork完成使用者注冊的例子

;

sb.append(user.getEmail());

sb.append("',"

WebWork完成使用者注冊的例子

;

sb.append(user.getAge());

sb.append("

WebWork完成使用者注冊的例子

"

WebWork完成使用者注冊的例子

;

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

WebWork完成使用者注冊的例子

roperty value="user.username"/><br>

Password:<ww

WebWork完成使用者注冊的例子

roperty value="user.password"/><br>

Email:<ww

WebWork完成使用者注冊的例子

roperty value="user.email"/><br>

Age:<ww

WebWork完成使用者注冊的例子

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="

WebWork完成使用者注冊的例子

http://java.sun.com/xml/ns/j2ee"  xmlns:xsi="

WebWork完成使用者注冊的例子

http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="

WebWork完成使用者注冊的例子

http://java.sun.com/xml/ns/j2ee  

WebWork完成使用者注冊的例子

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" 

"

WebWork完成使用者注冊的例子

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

WebWork完成使用者注冊的例子

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脫胎換骨.

繼續閱讀