本文簡單講述使用javabean實現(xiàn)用戶登錄,包括用戶登錄,注冊和退出等。
1.關(guān)于javabean
JavaBean 是一種JAVA語言寫成的可重用組件。為寫成JavaBean,類必須是具體的和公共的,并且具有無參數(shù)的構(gòu)造器。JavaBean 通過提供符合一致性設(shè)計模式的公共方法將內(nèi)部域暴露成員屬性,set和get方法獲取。眾所周知,屬性名稱符合這種模式,其他Java 類可以通過自省機制發(fā)現(xiàn)和操作這些JavaBean 的屬性。
2.系統(tǒng)架構(gòu)
2.1登錄用例圖
2.2頁面流程圖
2.3系統(tǒng)架構(gòu)圖
2.4數(shù)據(jù)庫設(shè)計
本例使用oracle數(shù)據(jù)庫
用戶表包括id,用戶名,密碼,email,共4個字段
1
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
|
-- Create table create table P_USER ( id VARCHAR2(50) not null , username VARCHAR2(20), password VARCHAR2(20), email VARCHAR2(50) ) tablespace USERS pctfree 10 initrans 1 maxtrans 255 storage ( initial 64 minextents 1 maxextents unlimited ); -- Add comments to the table comment on table P_USER is '用戶表' ; -- Add comments to the columns comment on column P_USER.id is 'id' ; comment on column P_USER.username is '用戶名' ; comment on column P_USER. password is '密碼' ; comment on column P_USER.email is 'email' ; |
3.javabean編寫
3.1開發(fā)數(shù)據(jù)庫底層處理javabean
DBAcess.java
1
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
package com.baosight.bean; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /**數(shù)據(jù)庫操作類 * <p>Title:DBAcess </p> * <p>Description:TODO </p> * <p>Company: </p> * @author yuan * @date 2016-5-22 下午12:40:24*/ public class DBAcess { private String driver = "oracle.jdbc.driver.OracleDriver" ; private String url = "jdbc:oracle:" + "thin:@127.0.0.1:1521:orcl" ; private String username = "scott" ; private String password = "tiger" ; private Connection conn; private Statement stm; private ResultSet rs; //創(chuàng)建連接 public boolean createConn() { boolean b = false ; try { Class.forName(driver); // 加載Oracle驅(qū)動程序 conn = DriverManager.getConnection(url, username, password); b = true ; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 獲取連接 catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return b; } //修改 public boolean update(String sql){ boolean b = false ; try { stm = conn.createStatement(); stm.execute(sql); b = true ; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return b; } //查詢 public void query(String sql){ try { stm = conn.createStatement(); rs = stm.executeQuery(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //判斷有無數(shù)據(jù) public boolean next(){ boolean b = false ; try { if (rs.next()){ b = true ; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return b; } //獲取表字段值 public String getValue(String field) { String value = null ; try { if (rs != null ) { value = rs.getString(field); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return value; } //關(guān)閉連接 public void closeConn() { try { if (conn != null ) { conn.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //關(guān)閉statement public void closeStm() { try { if (stm != null ) { stm.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //關(guān)閉ResultSet public void closeRs() { try { if (rs != null ) { rs.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public String getDriver() { return driver; } public void setDriver(String driver) { this .driver = driver; } public String getUrl() { return url; } public void setUrl(String url) { this .url = url; } public String getUsername() { return username; } public void setUsername(String username) { this .username = username; } public String getPassword() { return password; } public void setPassword(String password) { this .password = password; } public Statement getStm() { return stm; } public void setStm(Statement stm) { this .stm = stm; } public ResultSet getRs() { return rs; } public void setRs(ResultSet rs) { this .rs = rs; } public void setConn(Connection conn) { this .conn = conn; } public Connection getConn() { return conn; } } |
上述數(shù)據(jù)庫操作類使用JDBC連接數(shù)據(jù)庫,并封裝了連接數(shù)據(jù)庫、查詢、修改、關(guān)閉資源等方法。
3.2開發(fā)JavaBean業(yè)務(wù)邏輯組件
UserBean.java
1
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
|
package com.baosight.bean; import com.baosight.util.GenerateUUID; /** * <p>Title:UserBean </p> * <p>Description:TODO </p> * <p>Company: </p> * @author yuan * @date 2016-5-22 下午1:05:00*/ public class UserBean { //登錄驗證 public boolean valid(String username,String password){ boolean isValid = false ; DBAcess db = new DBAcess(); if (db.createConn()){ String sql = "select * from p_user where username='" +username+ "' and password='" +password+ "'" ; db.query(sql); if (db.next()){ isValid = true ; } db.closeRs(); db.closeStm(); db.closeConn(); } return isValid; } //注冊驗證 public boolean isExist(String username){ boolean isValid = false ; DBAcess db = new DBAcess(); if (db.createConn()){ String sql = "select * from p_user where username='" +username+ "'" ; db.query(sql); if (db.next()){ isValid = true ; } db.closeRs(); db.closeStm(); db.closeConn(); } return isValid; } //注冊用戶 public boolean add(String username,String password,String email){ boolean isValid = false ; DBAcess db = new DBAcess(); if (db.createConn()){ String sql = "insert into p_user(id,username,password,email) values('" +GenerateUUID.next()+ "','" +username+ "','" +password+ "','" +email+ "')" ; isValid = db.update(sql); db.closeStm(); db.closeConn(); } return isValid; } } |
上述業(yè)務(wù)邏輯javabean,定義了登錄驗證、注冊驗證和新增用戶等方法
3.3關(guān)于生成唯一ID
上面在新增用戶時需要插入ID,本例使用UUID來生成唯一ID
GenerateUUID.java
1
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
|
package com.baosight.util; import java.util.Date; /** * <p>Title:GenerateUUID </p> * <p>Description:TODO </p> * <p>Company: </p> * @author yuan * @date 2016-5-22 下午1:31:46*/ public class GenerateUUID { private static Date date = new Date(); // private static StringBuilder buf = new StringBuilder(); private static int seq = 0 ; private static final int ROTATION = 99999 ; public static synchronized long next(){ if (seq > ROTATION) seq = 0 ; // buf.delete(0, buf.length()); date.setTime(System.currentTimeMillis()); String str = String.format( "%1$tY%1$tm%1$td%1$tk%1$tM%1$tS%2$05d" , date, seq++); return Long.parseLong(str); } public static void main(String[] args) { for ( int i= 0 ;i< 100 ;i++){ System.out.println(next()); } } } |
4.頁面編寫
4.1登錄頁面
login.jsp
1
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
|
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < html > < head > < base href="<%=basePath%>"> < title >登錄頁面</ title > < meta http-equiv = "pragma" content = "no-cache" > < meta http-equiv = "cache-control" content = "no-cache" > < meta http-equiv = "expires" content = "0" > < meta http-equiv = "keywords" content = "keyword1,keyword2,keyword3" > < meta http-equiv = "description" content = "This is my page" > <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </ head > < body > < form action = "login_action.jsp" method = "post" > < table > < tr > < td colspan = "2" >登錄窗口</ td > </ tr > < tr > < td >用戶名:</ td > < td >< input type = "text" name = "username" /> </ td > </ tr > < tr > < td >密碼:</ td > < td >< input type = "text" name = "password" /> </ td > </ tr > < tr > < td colspan = "2" >< input type = "submit" value = "登錄" /> < a href = "register.jsp" >注冊</ a > </ td > </ tr > </ table > </ form > </ body > </ html > |
頁面效果
4.2登錄業(yè)務(wù)邏輯處理頁面
login_action.jsp
1
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
|
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page import="java.sql.*" %> <%@ page import="com.baosight.bean.*" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <% String username = request.getParameter("username"); String password = request.getParameter("password"); if(username==null||"".equals(username.trim())||password==null||"".equals(password.trim())){ //out.write("用戶名或密碼不能為空!"); System.out.println("用戶名或密碼不能為空!"); response.sendRedirect("login.jsp"); return; //request.getRequestDispatcher("login.jsp").forward(request, response); } UserBean userBean = new UserBean(); boolean isValid = userBean.valid(username,password); if(isValid){ System.out.println("登錄成功!"); session.setAttribute("username", username); response.sendRedirect("welcome.jsp"); return; }else{ System.out.println("用戶名或密碼錯誤,登錄失敗!"); response.sendRedirect("login.jsp"); return; } %> |
上面的JSP調(diào)用了Javabean進行業(yè)務(wù)處理
當(dāng)用戶名或密碼為空時返回登錄頁面login.jsp
當(dāng)?shù)卿洺晒髮⒂脩粜畔⒈4娴絪ession,跳轉(zhuǎn)到歡迎頁面welcome.jsp
當(dāng)?shù)卿浭r返回登錄頁面login.jsp
4.3登錄成功歡迎頁面
welcome.jsp
1
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < html > < head > < base href="<%=basePath%>"> < title >My JSP 'welcom.jsp' starting page</ title > < meta http-equiv = "pragma" content = "no-cache" > < meta http-equiv = "cache-control" content = "no-cache" > < meta http-equiv = "expires" content = "0" > < meta http-equiv = "keywords" content = "keyword1,keyword2,keyword3" > < meta http-equiv = "description" content = "This is my page" > <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </ head > < body > < table > < tr > < td >< img src = "images/logo4.png" /> </ td > < td >< img src = "images/logo2.png" height = "90" /> </ td > </ tr > < tr > < td colspan = "2" >< hr /> </ td > </ tr > < tr > < td > < table > < tr > < td >< a >Main</ a > </ td > </ tr > < tr > < td >< a >Menu1</ a > </ td > </ tr > < tr > < td >< a >Menu2</ a > </ td > </ tr > < tr > < td >< a >Menu3</ a > </ td > </ tr > < tr > < td >< a >Menu4</ a > </ td > </ tr > < tr > < td >< a >Menu5</ a > </ td > </ tr > < tr > < td >< a >Menu6</ a > </ td > </ tr > < tr > < td >< a >Menu7</ a > </ td > </ tr > < tr > < td >< a >Menu8</ a > </ td > </ tr > </ table ></ td > < td > < form action = "loginout.jsp" method = "post" > < table > < tr > < td colspan = "2" >登錄成功!</ td > </ tr > < tr > < td >歡迎你,</ td > < td >${username }</ td > </ tr > < tr > < td colspan = "2" >< input type = "submit" value = "退出" /></ td > </ tr > </ table > </ form ></ td > </ tr > </ table > </ body > </ html > |
頁面效果
4.4退出登錄業(yè)務(wù)處理頁面
loginout.jsp
1
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
|
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < html > < head > < base href="<%=basePath%>"> < title >My JSP 'loginout.jsp' starting page</ title > < meta http-equiv = "pragma" content = "no-cache" > < meta http-equiv = "cache-control" content = "no-cache" > < meta http-equiv = "expires" content = "0" > < meta http-equiv = "keywords" content = "keyword1,keyword2,keyword3" > < meta http-equiv = "description" content = "This is my page" > <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </ head > < body > <% session.removeAttribute("username"); response.sendRedirect("login.jsp"); %> </ body > </ html > |
從session中移除用戶信息,跳轉(zhuǎn)到登錄頁面login.jsp
4.5用戶注冊頁面
register.jsp
1
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
|
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < html > < head > < base href="<%=basePath%>"> < title >注冊頁面</ title > < meta http-equiv = "pragma" content = "no-cache" > < meta http-equiv = "cache-control" content = "no-cache" > < meta http-equiv = "expires" content = "0" > < meta http-equiv = "keywords" content = "keyword1,keyword2,keyword3" > < meta http-equiv = "description" content = "This is my page" > <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </ head > < body > < form action = "register_action.jsp" method = "post" > < table > < tr > < td colspan = "2" >注冊窗口</ td > </ tr > < tr > < td >用戶名:</ td > < td >< input type = "text" name = "username" /></ td > </ tr > < tr > < td >密碼:</ td > < td >< input type = "text" name = "password1" /></ td > </ tr > < tr > < td >確認(rèn)密碼:</ td > < td >< input type = "text" name = "password2" /></ td > </ tr > < tr > < td >email:</ td > < td >< input type = "text" name = "email" /></ td > </ tr > < tr > < td colspan = "2" >< input type = "submit" value = "注冊" /> < a href = "login.jsp" >返回</ a ></ td > </ tr > </ table > </ form > </ body > </ html > |
運行效果
4.6注冊業(yè)務(wù)處理頁面
1
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
|
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="java.sql.*" %> <%@ page import="com.baosight.bean.*" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <% String username = request.getParameter("username"); String password1 = request.getParameter("password1"); String password2 = request.getParameter("password2"); String email = request.getParameter("email"); if(username==null||"".equals(username.trim())||password1==null||"".equals(password1.trim())||password2==null||"".equals(password2.trim())||!password1.equals(password2)){ //out.write("用戶名或密碼不能為空!"); System.out.println("用戶名或密碼不能為空!"); response.sendRedirect("register.jsp"); return; //request.getRequestDispatcher("login.jsp").forward(request, response); } UserBean userBean = new UserBean(); boolean isExit = userBean.isExist(username); if(!isExit){ userBean.add(username, password1, email); System.out.println("注冊成功,請登錄!"); response.sendRedirect("login.jsp"); return; }else{ System.out.println("用戶名已存在!"); response.sendRedirect("register.jsp"); return; } %> |
上面的JSP調(diào)用了Javabean進行業(yè)務(wù)處理
當(dāng)用戶名或密碼為空時返回注冊頁面register.jsp
當(dāng)注冊用戶名在數(shù)據(jù)庫不存在時,新增用戶
新增成功后跳轉(zhuǎn)到登錄頁面login.jsp
當(dāng)注冊用戶名在數(shù)據(jù)庫存在時,返回注冊頁面register.jsp
5.總結(jié)
本例使用javabean對數(shù)據(jù)庫操作和業(yè)務(wù)邏輯處理進行了封裝。
以上即為使用javabean實現(xiàn)用戶登錄的簡單介紹,還需要不斷完善,希望大家一起學(xué)習(xí)進步!