登录注册页面基本实现

前端注册页面

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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
<%--
Created by IntelliJ IDEA.
User: renboyu010214
Date: 2021/2/1
Time: 19:54
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>书城注册页面</title>
<style>
#div1 {
border: 4px;
border-style: ridge;
border-radius:5px;
width: 400px;
}

#div2 {
background: gray;
opacity: 0.6;
z-index: 10;
width: 350px;
height: 35px;
margin-bottom: 20px;
}
</style>
<script src="js/jquery-3.5.1.min.js"></script>
<script>
function checkUsername(){
//获取用户名
var username=$("#username").val();
//定义正则表达式
var reg_name=/^\w{8,20}$/;
//判断用户名是否满足正则表达式
var result=reg_name.test(username);
if(result){
//用户名合法
$("#username").css("border","");
}else {
//用户名非法
$("#username").css("border","2px solid red");
}
return result;
}

function checkPassword(){
//获取密码
var password=$("#password").val();
//定义正则表达式
var reg_pwd=/^\w{8,20}$/;
//判断密码是否满足正则表达式
var result=reg_pwd.test(password);
if(result){
//密码合法
$("#password").css("border","");
}else {
//密码非法
$("#password").css("border","2px solid red");
}
return result;
}

function checkConfirmPWD(){
//获取密码
var password=$("#password").val();
//获取确认密码
var confirm_pwd=$("#confirm_pwd").val();
//定义正则表达式
var reg_pwd=/^\w{8,20}$/;
//判断重新输入的密码是否满足正则表达式
var result=reg_pwd.test(confirm_pwd);

//判断两次输入的密码是否一致
var result2=false;
if(password===confirm_pwd){
result2=true;
}else{
result2=false;
}
if(result&&result2){
//重新输入密码通过
$("#confirm_pwd").css("border","");
}else {
//未通过
$("#confirm_pwd").css("border","2px solid red");
}
return result;
}

function checkTel(){
//获取电话号码
var tel=$("#tel").val();
//定义正则表达式
var reg_tel=/^1[3|4|5|7|8][0-9]{9}$/;
//判断电话是否满足正则表达式
var result=reg_tel.test(tel);
if(result){
//电话合法
$("#tel").css("border","");
}else {
//电话非法
$("#tel").css("border","2px solid red");
}
return result;
}

function checkEmail(){
//获取邮箱
var email=$("#email").val();
//定义正则表达式
var reg_email=/^[A-Za-z0-9-._]+@[A-Za-z0-9-]+(.[A-Za-z0-9]+)*(.[A-Za-z]{2,6})$/;
//判断邮箱是否满足正则表达式
var result=reg_email.test(email);
if(result){
//邮箱合法
$("#email").css("border","");
}else {
//邮箱非法
$("#email").css("border","2px solid red");
}
return result;
}

$(function () {
$("#registerForm").submit(function () {
//采用ajax异步提交表单(以便于利用后端返回的数据进行操作,同时保证了信息的安全性)
if(checkPassword() && checkUsername()
&& checkEmail() && checkConfirmPWD() && checkTel()){
//表单验证通过,数据符合要求,执行异步提交操作
//$(this).serialize表示通过serialize方法获取表单数据(这里的this表示的就是registerForm)
//第三个参数就是利用后端返回的data数据进行操作
$.post("RegisterServlet",$(this).serialize(),function (data) {
if(data.flag){
//注册成功,跳转到登录页面
alert("注册成功!单击跳转到登录页面");
location.href="login.jsp";
}else {
//注册失败,向页面添加提示信息(errorMsg内添加文本)
$("#errorMsg").html(data.errMsg);
}
})
}else{
alert("提交失败!请检查信息是否填写准确");
}
//返回值若为true,则表单会被同步提交,所以这里始终将返回值设为false
return false;
})

//绑定所有离焦事件
$("#username").blur(checkUsername);
$("#password").blur(checkPassword);
$("#confirm_pwd").blur(checkConfirmPWD);
$("#email").blur(checkEmail);
$("#tel").blur(checkTel);
})
</script>
</head>
<body>

<form id="registerForm">
<table align="center" border=0 cellpadding=0 cellspacing=0 style="width:100% ;height:100%" >
<td style="width:100%;" align="center" valign="middle">
<div id="div1">
<img src="img/icon.png" width="250" />
<div id="div2">
<h2 align="center">会员注册</h2>
</div>
<div id="errorMsg" style="color: red;text-align: center"></div>
<table align="center">
<tr>
<td><label for="username">用户名</label></td>
<td><input type="text" name="username" placeholder="请输入用户名" id="username"></td>
</tr>
<tr>
<td><label for="truename">姓名</label></td>
<td><input type="text" name="truename" placeholder="请输入真实姓名" id="truename"></td>
</tr>
<tr>
<td><label for="password">密码</label></td>
<td><input type="password" name="password" placeholder="请输入密码" id="password"></td>
</tr>
<tr>
<td><label for="confirm_pwd">确认密码</label></td>
<td><input type="password" name="confirm_pwd" placeholder="请再次输入密码" id="confirm_pwd"></td>
</tr>
<tr>
<td><label for="tel">联系电话</label></td>
<td><input type="text" name="tel" placeholder="请输入手机号" id="tel"></td>
</tr>
<tr>
<td><label for="email">Email</label></td>
<td><input type="email" name="email" placeholder="请输入Email" id="email"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="注册账号" id="submit"></td>
</tr>
</table>
<p> 已有账号!<a href="/login.jsp">点击登录</a></p>
</div>
</td>
</table>
</form>

</body>
</html>

前端登录页面

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
<%--
Created by IntelliJ IDEA.
User: renboyu010214
Date: 2021/2/3
Time: 9:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>书城登录页面</title>
<style>
#div1 {
border: 4px;
border-style: ridge;
border-radius:5px;
width: 400px;
}

#div2 {
border-radius:5px;
background: gray;
opacity: 0.6;
z-index: 10;
width: 350px;
height: 35px;
margin-bottom: 20px;
}
</style>
<script src="js/jquery-3.5.1.min.js"></script>
<script>
$(function () {
//为登录按钮绑定单机事件
$("#login").click(function () {
//采用ajax异步提交表单(以便于利用后端返回的数据进行操作,同时保证了信息的安全性)
$.post("LoginServlet",$("#loginForm").serialize(),function (data) {
//data为返回的结果日志
if(data.flag){
//登录成功
location.href="index.jsp";
}else{
//登录失败,显示错误信息,提示重新登录
$("#errorMsg").html(data.errMsg);
}
})
})
})

</script>
</head>
<body>


<form id="loginForm">
<table align="center" border=0 cellpadding=0 cellspacing=0 style="width:100% ;height:100%" >
<td style="width:100%;" align="center" valign="middle">
<div id="div1">
<img src="img/icon.png" width="250" />
<div id="div2">
<h2 align="center">会员登录</h2>
</div>
<div id="errorMsg" style="color: red;text-align: center"></div>
<table align="center">
<tr>
<td><label for="username">用户名</label></td>
<td><input type="text" name="username" placeholder="请输入用户名" id="username"></td>
</tr>
<tr>
<td><label for="password">密 码</label></td>
<td><input type="password" name="password" placeholder="请输入密码" id="password"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="button" value="登录账号" id="login"></td>
</tr>
</table>
<p> 没有账户?<a href="/register.jsp">点击注册</a></p>
</div>
</td>
</table>
</form>

</body>
</html>

后端部分实现

成员信息JavaBean

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
package cn.ywrby.model;

public class Member {
private Integer ID;
private String username;
private String truename;
private String password;
private String city;
private String address;
private String postcode;
private String cardno;
private String cardtype;
private String tel;
private String email;

public Member(Integer ID, String username,
String truename, String password,
String city, String address, String postcode,
String cardno, String cardtype,
String tel, String email) {
this.ID = ID;
this.username = username;
this.truename = truename;
this.password = password;
this.city = city;
this.address = address;
this.postcode = postcode;
this.cardno = cardno;
this.cardtype = cardtype;
this.tel = tel;
this.email = email;
}

public Member() {
this.ID = Integer.valueOf("-1");
this.username = "";
this.truename = "";
this.password = "";
this.city = "";
this.address = "";
this.postcode = "";
this.cardno = "";
this.cardtype = "";
this.tel = "";
this.email = "";
}

public Integer getID() {
return ID;
}

public void setID(Integer ID) {
this.ID = ID;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getTruename() {
return truename;
}

public void setTruename(String truename) {
this.truename = truename;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getCity() {
return city;
}

public void setCity(String city) {
this.city = city;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

public String getPostcode() {
return postcode;
}

public void setPostcode(String postcode) {
this.postcode = postcode;
}

public String getCardno() {
return cardno;
}

public void setCardno(String cardno) {
this.cardno = cardno;
}

public String getCardtype() {
return cardtype;
}

public void setCardtype(String cardtype) {
this.cardtype = cardtype;
}

public String getTel() {
return tel;
}

public void setTel(String tel) {
this.tel = tel;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

@Override
public String toString() {
return "Member{" +
"ID=" + ID +
", username='" + username + '\'' +
", truename='" + truename + '\'' +
", password='" + password + '\'' +
", city='" + city + '\'' +
", address='" + address + '\'' +
", postcode='" + postcode + '\'' +
", cardno='" + cardno + '\'' +
", cardtype='" + cardtype + '\'' +
", tel='" + tel + '\'' +
", email='" + email + '\'' +
'}';
}
}

封装后端返回数据JavaBean

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
package cn.ywrby.model;

/**
* 用于封装后端返回前端的数据对象
*/
public class ResultInfo {
private boolean flag; //后端正常返回true,后端异常返回false
private Object data; //后端 返回结果数据对象
private String errMsg; //发生异常的错误信息

public ResultInfo(boolean flag, Object data, String errMsg) {
this.flag = flag;
this.data = data;
this.errMsg = errMsg;
}

public ResultInfo(boolean flag) {
this.flag = flag;
}

public ResultInfo() {
}

public ResultInfo(boolean flag, String errMsg) {
this.flag = flag;
this.errMsg = errMsg;
}


public boolean isFlag() {
return flag;
}

public void setFlag(boolean flag) {
this.flag = flag;
}

public Object getData() {
return data;
}

public void setData(Object data) {
this.data = data;
}

public String getErrMsg() {
return errMsg;
}

public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
}

数据库工具类

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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
package cn.ywrby.utils;


import org.junit.Test;

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

/**
* ConnDB工具类
* 用于进行数据库连接与数据库操作
*/
public class ConnDB {
public Connection connection=null;
public Statement statement=null;
public ResultSet resultSet=null;

//定义各个静态变量
private static String url;
private static String user;
private static String password;
private static String driver;

/*
* 静态代码块,只在创建时调用一次
* 可以在此处进行配置文件的读取,以及驱动注册等步骤
*
* 将url,user,password,driver等变量
* 存入配置文件并读取可以提高代码复用性
*/
static {
try {
//创建配置文件数据集
Properties pro=new Properties();
//创建类加载器classLoader
ClassLoader classLoader=ConnDB.class.getClassLoader();
//通过类加载器获取在src下的配置文件,这样可以避免绝对路径带来的问题
URL res=classLoader.getResource("jdbc.properties");
assert res != null; //确保res不为空
String path=res.getPath();
//加载配置文件
pro.load(new FileReader(path));

//获取配置文件中的数据
url=pro.getProperty("url");
user=pro.getProperty("user");
password=pro.getProperty("password");
driver=pro.getProperty("driver");

//注册驱动
Class.forName(driver);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}

/**
* 创建数据库连接对象
* @return 返回新创建的数据库连接对象
*/
public static Connection getConnection() {
Connection connection=null; //创建数据库连接对象
try {
connection=DriverManager.getConnection(url,user,password); //进行数据库连接
} catch (SQLException throwables) {
throwables.printStackTrace();
}
if(connection == null){
//如果未获取到连接,输出连接信息,方便调试
System.err.println("DbConnectionManager.getConnection():"
+url+"\r\n"+user+"\r\n"+password+"\r\n"+driver);
}
//返回连接对象
return connection;
}

/**
* 执行数据库查询语句
* @param sql sql语句
* @return 查询结果集
*/
public ResultSet executeQuery(String sql) {
try {
connection=getConnection(); //获取数据库连接对象
//获取statement以操作数据库
statement=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
resultSet=statement.executeQuery(sql); //执行sql语句并获得结果集对象
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return resultSet; //返回结果集
}

/**
* 执行更新数据库语句
* @param sql sql语句
* @return 返回更新语句执行结果
*/
public int executeUpdate(String sql){
int result=0; //sql更新语句执行结果
try {
connection=getConnection(); //获取数据库连接对象
//获取statement以操作数据库
statement=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
result=statement.executeUpdate(sql); //执行更新语句
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return result; //返回更新操作执行结果
}

/**
* 实现更新数据后获取自动生成的编号
* @param sql sql语句
* @return 返回自动生成的编号
*/
public int executeUpdate_id(String sql){
int result=0; //sql更新语句执行结果
try {
connection=getConnection(); //获取数据库连接对象
//获取statement以操作数据库
statement=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
result=statement.executeUpdate(sql); //执行更新语句

String ID="select @@IDENTITY as id"; //定义用于获取刚刚生成的自动编号的SQL语句
resultSet=statement.executeQuery(sql); //获取自动生成的编号
if(resultSet.next()){ //如果存在该数据
int autoID=resultSet.getInt("id"); //将获取到的ID数据保存并返回
result=autoID;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return result; //返回更新操作执行结果
}

/**
* 关闭数据库相关资源
*/
public void closeDB(){
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}

if(statement!=null){
try {
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}

if(connection!=null){
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}

}

@Test
public void executeQueryTest(){
String sql="select * from tb_member where username='Leslie123'";
ResultSet rs=executeQuery(sql);
try {
while (resultSet.next()) {
String password = rs.getString("password");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
System.out.println(password);
}
}

父类Dao

1
2
3
4
5
6
7
8
9
10
package cn.ywrby.dao;

import cn.ywrby.model.Member;

import java.util.List;

public interface MemberDao {
public int insert(Member member);
public List select();
}

注册/登录Dao

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
165
166
167
168
169
170
171
172
173
174
175
176
177
package cn.ywrby.dao;

import cn.ywrby.model.Member;
import cn.ywrby.utils.ChStr;
import cn.ywrby.utils.ConnDB;
import org.junit.Test;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class MemberDaoImpl implements MemberDao{
private ConnDB connDB=new ConnDB();
private ChStr ch=new ChStr();

/**
* 创建会员
* @param member 会员对象
* @return 返回记录更改的条数
*/
@Override
public int insert(Member member) {
//System.out.println("insert方法正常执行...");
int ret=-1; //用于记录更新记录的条数
//获取传入用户的数据信息
String username=member.getUsername();
String truename=member.getTruename();
String password=member.getPassword();
String city=member.getCity();
String address=member.getAddress();
String postcode=member.getPostcode();
String cardno=member.getCardno();
String cardtype=member.getCardtype();
String tel=member.getTel();
String email=member.getEmail();

try {
//插入语句
String sql="INSERT INTO tb_member(userName,trueName,passWord,city,"
+ "address,postcode,cardNo,cardType,tel,email) VALUES('"
+ username+"','"+truename+"','"
+ password+"','"+city+"','"
+ address+"','"+postcode+"','"
+ cardno+"','"+cardtype+"','"
+ tel+"','"+email+"')";
ret=connDB.executeUpdate(sql); //执行插入语句
}catch (Exception e){
e.printStackTrace();
ret=0;
}
//关闭数据库连接
connDB.closeDB();
return ret;
}

/**
* 获取所有会员数据信息
* @return 以列表形式返回所有会员数据
*/
@Override
public List<Member> select() {
//声明会员对象
Member member=null;
//创建List集合,用于保存会员信息
List<Member> memberList=new ArrayList();
String sql="select * from tb_member"; //定义sql语句
ResultSet resultSet=connDB.executeQuery(sql); //获取所有会员数据信息
try {
//将会员数据信息插入列表
while (resultSet.next()) {
member = new Member(Integer.valueOf(resultSet.getString(1)),
resultSet.getString(2),resultSet.getString(3),
resultSet.getString(4),resultSet.getString(5),
resultSet.getString(6),resultSet.getString(7),
resultSet.getString(8),resultSet.getString(9),
resultSet.getString(12),resultSet.getString(13));
memberList.add(member);
}
}catch (SQLException e){
e.printStackTrace();
}
connDB.closeDB(); //关闭数据库连接
return memberList;
}

/**
* 根据用户名查询是否存在该用户
* @param username 用户名
* @return 是否存在同名用户
*/
public Member findByUsername(String username) throws SQLException {
//System.out.println("findByUsername方法正常执行...");
Member member=null;
String sql="select * from tb_member where userName = '"+username+"'";
//System.out.println(sql);
ResultSet resultSet=connDB.executeQuery(sql);
if(resultSet!=null){
try {
while (resultSet.next()) {
member = new Member(Integer.valueOf(resultSet.getString(1)),
resultSet.getString(2), resultSet.getString(3),
resultSet.getString(4), resultSet.getString(5),
resultSet.getString(6), resultSet.getString(7),
resultSet.getString(8), resultSet.getString(9),
resultSet.getString(12), resultSet.getString(13));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return member;
}

/**
* 根据用户名和密码查询用户是否存在
* @param username 用户名
* @param password 密码
* @return 用户对象
*/
public Member findByUsernameAndPassword(String username, String password) {
//System.out.println("findByUsername方法正常执行...");
Member member=null;
String sql="select * from tb_member where userName = '"+username+"' and password = '"+password+"'";
//System.out.println(sql);
ResultSet resultSet=connDB.executeQuery(sql);
if(resultSet!=null){
try {
while (resultSet.next()) {
member = new Member(Integer.valueOf(resultSet.getString(1)),
resultSet.getString(2), resultSet.getString(3),
resultSet.getString(4), resultSet.getString(5),
resultSet.getString(6), resultSet.getString(7),
resultSet.getString(8), resultSet.getString(9),
resultSet.getString(12), resultSet.getString(13));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return member;
}

@Test
public void insertTest(){
Member member=new Member();
member.setUsername("Leslie");
member.setTruename("BoyuRen");
member.setPassword("010214");
member.setCity("ChongQing");
member.setAddress("BayiRoadBeibeiDistrict");
member.setPostcode("761007");
member.setCardno("1301021999");
member.setCardtype("IDcard");
member.setTel("0311-89160328");
member.setEmail("ywrby@foxmail.com");

int num=insert(member);
System.out.println(num);
}

@Test
public void selectTest(){
List<Member> memberList=select();
for(Member m:memberList){
System.out.println(m+"\n");
}
}

@Test
public void findTest() throws SQLException {
Member member=findByUsername("Leslie123");
System.out.println(member);
}


}

注册Service

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
package cn.ywrby.service;

import cn.ywrby.dao.MemberDaoImpl;
import cn.ywrby.model.Member;
import cn.ywrby.utils.ConnDB;

import java.sql.SQLException;

public class RegisterService {

public boolean regist(Member member) throws SQLException {
//System.out.println("RegisterService正常执行...");
//创建数据库连接
ConnDB conn=new ConnDB();
MemberDaoImpl dao=new MemberDaoImpl();
//查询用户名是否存在
String username=member.getUsername();
Member memberResult=dao.findByUsername(username);
if(memberResult!=null){
//用户名存在,注册失败
return false;
}
//用户名不存在 保存信息
dao.insert(member);
return true;
}
}

注册Servlet

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
package cn.ywrby.servlet;

import cn.ywrby.dao.MemberDaoImpl;
import cn.ywrby.model.Member;
import cn.ywrby.model.ResultInfo;
import cn.ywrby.service.RegisterService;
import cn.ywrby.utils.ConnDB;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Map;

@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//System.out.println("RegisterServlet正常执行...");
ConnDB conn=new ConnDB();
MemberDaoImpl insertMember=new MemberDaoImpl();
RegisterService service=new RegisterService();
Member member=new Member();

//获取数据
Map<String,String[]> memberData=request.getParameterMap();
//封装对象
member.setUsername(memberData.get("username")[0]);
member.setTruename(memberData.get("truename")[0]);
member.setPassword(memberData.get("password")[0]);
member.setTel(memberData.get("tel")[0]);
member.setEmail(memberData.get("email")[0]);
//调用service完成注册
boolean result= false;
try {
result = service.regist(member);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
//封装对象返回前端
ResultInfo info=new ResultInfo();
if(result){
//用户创建成功,数据成功保存
info.setFlag(true);
}else{
//用户创建失败,数据未保存
info.setFlag(false);
info.setErrMsg("注册失败!请尝试重新注册");
}

//将info对象序列化为json
ObjectMapper mapper=new ObjectMapper();
String json=mapper.writeValueAsString(info);
//将json数据写回客户端
response.setContentType("application/json; charset=utf-8");
response.getWriter().write(json);


}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

登录Service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package cn.ywrby.service;

import cn.ywrby.dao.MemberDaoImpl;
import cn.ywrby.model.Member;
import cn.ywrby.utils.ConnDB;

public class LoginService {
public Member login(Member member) {
//创建数据库连接
ConnDB conn=new ConnDB();
MemberDaoImpl dao=new MemberDaoImpl();
return dao.findByUsernameAndPassword(member.getUsername(),member.getPassword());
}
}

登录Servlet

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
package cn.ywrby.servlet;

import cn.ywrby.model.Member;
import cn.ywrby.model.ResultInfo;
import cn.ywrby.service.LoginService;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户输入数据
Map<String, String[]> map = request.getParameterMap();
//封装对象
Member member = new Member();
member.setUsername(map.get("username")[0]);
member.setPassword(map.get("password")[0]);
//调用service进行查询与匹配
LoginService service = new LoginService();
Member member1 = service.login(member);

ResultInfo info = new ResultInfo();

//判断用户能否正常登录
if(member1==null){
//用户不存在,提示用户检查用户名以及密码输入
info.setFlag(false);
info.setErrMsg("用户名或密码输入错误!");
}else {
//用户存在,提示用户成功登陆
info.setFlag(true);
}
//响应数据
ObjectMapper mapper=new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
mapper.writeValue(response.getOutputStream(),info);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}