Struts學習心得之Struts流程篇(3) -示例
上一篇我們講了Struts的配置以及運行環境,這一篇我們通過一個實例來說明Struts實現MVC的過程和Struts開發WEB應用的一般方法。
(1)實例介紹
這是《論文在線提交》系統的用戶注冊部分,用戶填入用戶名(userid)和Email地址(email)后,如果Email和userid在數據庫中不存在,則注冊成功,將系統生成的8位密碼發送到用戶的信箱里。數據表定義如下:
CREATE TABLE passwd (
userid varchar(20) DEFAULT '' NOT NULL, #用戶id
password varchar(16) DEFAULT '' NOT NULL, #密碼 使用PASSWORD()加密后的
email varchar(50) DEFAULT '' NOT NULL, #email
PRIMARY KEY (userid),
KEY password (password)
);
(2)不使用MVC模式的實現
有過ASP設計經驗的開發人員,如果看到這樣一個功能,那簡直是太簡單了。只要設計一個表單,然后post給一個asp頁面,在這個頁面中實現數據檢查(檢查email和用戶名是否存在)及數據插入和email發送的功能。如果純用jsp實現,基本流程也是一樣的。這樣做有什么不好呢?我們先看使用Struts的MVC來實現這樣的功能,然后我們再做一下比較。
(3)使用Struts MVC實現
如果使用框架,我們就必須按照框架進行編程,而不是“自由”的編程,我們必須在實現中有M,有V、有C。下面看一下Struts實現MVC的一般流程。
i.這是HTML中表單的定義,action指定要將表單中的數據提交給誰進行處理,看以下幾種情況:1. 純用jsp,action肯定是一個jsp文件;2.使用jsp/JavaBean方式,action也是一個jsp,但是它將form中的數據映射到javaBean中,然后在jsp文件中進行獲取和處理;3. 采用MVC方式,這要轉變一下思路,腦子中要時刻清醒,M是什么,V是什么,C是什么,并且要理解它們的用途,不可用錯和濫用。下面我們看一下Struts中MVC的表現方式和使用方法。
ii 首先我們看M、V和C的表現。在Struts中,
首先看viewer,這是表現層,主要有jsp、servelt和javabean組成。也就是說我們將表單的數據放到javabean中,這個過程都是viewer的工作;
Controller,控制器主要是實現數據的驗證,并且實現跳轉,就是要將控制權交給“誰”。譬如:在用戶注冊中,當用戶將數據傳到bean,然后到action時,action去判斷email是否存在,如果存在將頁面跳轉到error.jsp或者輸出錯誤信息,如果不存在就跳轉到注冊成功的頁面。
Model,這是業務邏輯,這在Struts中沒有強制定義,主要功能就是實現業務邏輯,是功能體,譬如實現數據庫的插入,刪除等。可以是POJO,也可以是EJB等。
(4)用Struts實現用戶注冊。
第一步、實現viewer,有以下幾個部分組成,signin.jsp(顯示輸入form和錯誤顯示)、SignForm.java(一個javaBean,不過在Struts中要繼承自ActionForm,實現數據映射和簡單的驗證)。一下是關鍵代碼:
signin.jsp
<font color=red>
<html:errors/> ---錯誤處理 詳細信息見本blog《Struts中的錯誤處理流程》
< SPAN>font>
<html:form action="/sign.do">
--- sign.do是一個Action,在解釋Struts-conf.xml時說明

<bean:message key="sign.userid"/><html:text property="userid"/><br>
<bean:message key="sign.email"/><html:text property="email"/>
<html:submit ><bean:message key="login.signup"/>< SPAN>html:submit>

< SPAN>html:form>

說明:<bean:message key="sign.userid"/>從資源文件中讀取數據,詳細信息見本blog的《struts中資源文件的使用》SignForm.java
從代碼我們可以看出,SignForm除了實現bean的getter和setter功能外還實現了簡單的驗證,即驗證userid和email是否為空,若空則出錯!
關于form的action,我們在講action和編輯struts-config.xml文件時會進行說明。
(1)實例介紹
這是《論文在線提交》系統的用戶注冊部分,用戶填入用戶名(userid)和Email地址(email)后,如果Email和userid在數據庫中不存在,則注冊成功,將系統生成的8位密碼發送到用戶的信箱里。數據表定義如下:







(2)不使用MVC模式的實現
有過ASP設計經驗的開發人員,如果看到這樣一個功能,那簡直是太簡單了。只要設計一個表單,然后post給一個asp頁面,在這個頁面中實現數據檢查(檢查email和用戶名是否存在)及數據插入和email發送的功能。如果純用jsp實現,基本流程也是一樣的。這樣做有什么不好呢?我們先看使用Struts的MVC來實現這樣的功能,然后我們再做一下比較。
(3)使用Struts MVC實現
如果使用框架,我們就必須按照框架進行編程,而不是“自由”的編程,我們必須在實現中有M,有V、有C。下面看一下Struts實現MVC的一般流程。
i.
ii 首先我們看M、V和C的表現。在Struts中,
首先看viewer,這是表現層,主要有jsp、servelt和javabean組成。也就是說我們將表單的數據放到javabean中,這個過程都是viewer的工作;
Controller,控制器主要是實現數據的驗證,并且實現跳轉,就是要將控制權交給“誰”。譬如:在用戶注冊中,當用戶將數據傳到bean,然后到action時,action去判斷email是否存在,如果存在將頁面跳轉到error.jsp或者輸出錯誤信息,如果不存在就跳轉到注冊成功的頁面。
Model,這是業務邏輯,這在Struts中沒有強制定義,主要功能就是實現業務邏輯,是功能體,譬如實現數據庫的插入,刪除等。可以是POJO,也可以是EJB等。
(4)用Struts實現用戶注冊。
第一步、實現viewer,有以下幾個部分組成,signin.jsp(顯示輸入form和錯誤顯示)、SignForm.java(一個javaBean,不過在Struts中要繼承自ActionForm,實現數據映射和簡單的驗證)。一下是關鍵代碼:
signin.jsp













1
package user;
2
3
import javax.servlet.http.HttpServletRequest;
4
5
import org.apache.struts.action.ActionError;
6
import org.apache.struts.action.ActionErrors;
7
import org.apache.struts.action.ActionForm;
8
import org.apache.struts.action.ActionMapping;
9
10
/**//**
11
* @author han
12
* @company soochow university
13
* 注冊bean
14
*/
15
public class SignForm extends ActionForm
{
16
private String userid = null;
17
private String email = null;
18
private String password = null;
19
20
21
/**//**
22
* @return Returns the password.
23
*/
24
public String getPassword()
{
25
return password;
26
}
27
/**//**
28
* @param password The password to set.
29
*/
30
public void setPassword(String password)
{
31
this.password = password;
32
}
33
/**//**
34
* @return Returns the email.
35
*/
36
public String getEmail()
{
37
return email;
38
}
39
/**//**
40
* @param email The email to set.
41
*/
42
public void setEmail(String email)
{
43
this.email = email;
44
}
45
/**//**
46
* @return Returns the userid.
47
*/
48
public String getUserid()
{
49
return userid;
50
}
51
/**//**
52
* @param userid The userid to set.
53
*/
54
public void setUserid(String userid)
{
55
this.userid = userid;
56
}
57
58
public void reset(ActionMapping mapping, HttpServletRequest request)
{
59
userid = null;
60
email = null;
61
}
62
//驗證
63
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
{
64
ActionErrors errors = new ActionErrors();
65
66
if(this.userid == null || this.userid.length()<1)
{
67
errors.add("userid", new ActionError("userid.required"));
68
}
69
70
if(this.email == null || this.email.length() < 1)
{
71
errors.add("email", new ActionError("email.required"));
72
}
73
74
return errors;
75
}
76
}

2

3

4

5

6

7

8

9

10


11

12

13

14

15



16

17

18

19

20

21


22

23

24



25

26

27


28

29

30



31

32

33


34

35

36



37

38

39


40

41

42



43

44

45


46

47

48



49

50

51


52

53

54



55

56

57

58



59

60

61

62

63



64

65

66



67

68

69

70



71

72

73

74

75

76

從代碼我們可以看出,SignForm除了實現bean的getter和setter功能外還實現了簡單的驗證,即驗證userid和email是否為空,若空則出錯!
關于form的action,我們在講action和編輯struts-config.xml文件時會進行說明。
posted on 2005-05-19 10:31 soochow_hhb 以java論成敗 以架構論英雄 閱讀(1639) 評論(0) 編輯 收藏 所屬分類: Struts