一、编写登录页面login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>电子书城</title>
<link rel="stylesheet" href="${pageContext.request.contextPath }/client/css/main.css" type="text/css" />
</head>
<body class="main">
<jsp:include page="head.jsp" />
<jsp:include page="menu_search.jsp" />
<div id="divcontent">
<form action="${pageContext.request.contextPath}/login" method="post">
<table width="900px" border="0" cellspacing="0">
<tr>
<td style="padding:30px"><div style="height:470px">
<b> 首页 » 个人用户登录</b>
<div>
<table width="85%" border="0" cellspacing="0">
<tr>
<td>
<div id="logindiv">
<table width="100%" border="0" cellspacing="0">
<tr>
<td style="text-align:center; padding-top:20px">
<img src="${pageContext.request.contextPath }/client/images/logintitle.gif" width="150" height="30" />
</td>
</tr>
<tr>
<td style="text-align:center;padding-top:20px;"><font
color="#ff0000">${requestScope["register_message"]}</font>
</td>
</tr>
<tr>
<td style="text-align:center">
<table width="80%" border="0" cellspacing="0"
style="margin-top:15px ;margin-left:auto; margin-right:auto">
<tr>
<td
style="text-align:right; padding-top:5px; width:25%">用户名:</td>
<td style="text-align:left"><input name="username"
type="text" class="textinput" />
</td>
</tr>
<tr>
<td style="text-align:right; padding-top:5px">密 码:</td>
<td style="text-align:left"><input name="password"
type="password" class="textinput" />
</td>
</tr>
<tr>
<td colspan="2" style="text-align:center">
<input type="checkbox" name="checkbox" value="checkbox01" />记住用户名
<input type="checkbox" name="checkbox" value="checkbox02" /> 自动登录
</td>
</tr>
<tr>
<td colspan="2"
style="padding-top:10px; text-align:center">
<input name="image" type="image" onclick="return formcheck()"
src="${pageContext.request.contextPath }/client/images/loginbutton.gif" width="90" height="30" />
</td>
</tr>
<tr>
<td colspan="2" style="padding-top:10px">
<img src="${pageContext.request.contextPath }/client/images/loginline.gif" width="241" height="10" />
</td>
</tr>
<!-- <tr>
<td colspan="2"
style="padding-top:10px; text-align:center"><a
href="register.jsp"><img name="image"
src="images/signupbutton.gif" width="135" height="33" />
</a></td>
</tr> -->
</table>
</td>
</tr>
</table>
</div></td>
<td style="text-align:left; padding-top:30px; width:60%"><h1>您还没有注册?</h1>
<p>注册新用户,享受更优惠价格!</p>
<p>千种图书,供你挑选!注册即享受丰富折扣和优惠,便宜有好货!超过万本图书任您选。</p>
<p>超人气社区!精彩活动每一天。买卖更安心!支付宝交易超安全。</p>
<p style="text-align:left">
<a href="${pageContext.request.contextPath }/client/register.jsp">
<img src="${pageContext.request.contextPath }/client/images/signupbutton.gif" width="135" height="33" />
</a>
</p>
</td>
</tr>
</table>
</div>
</div>
</td>
</tr>
</table>
</form>
</div>
<jsp:include page="foot.jsp" />
</body>
</html>
二、创建LoginServlet
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1.获取登录页面输入的用户名与密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 2.调用service完成登录操作。
UserService service = new UserService();
try {
User user = service.login(username, password);
// 3.登录成功,将用户存储到session中.
request.getSession().setAttribute("user", user);
// 获取用户的角色,其中用户的角色分普通用户和超级用户两种
String role = user.getRole();
// 如果是超级用户,就进入到网上书城的后台管理系统;否则进入我的账户页面
if ("超级用户".equals(role)) {
response.sendRedirect(request.getContextPath() + "/admin/login/home.jsp");
return;
} else {
response.sendRedirect(request.getContextPath() + "/client/myAccount.jsp");
return;
}
} catch (LoginException e) {
// 如果出现问题,将错误信息存储到request范围,并跳转回登录页面显示错误信息
e.printStackTrace();
request.setAttribute("register_message", e.getMessage());
request.getRequestDispatcher("/client/login.jsp").forward(request, response);
return;
}
}
}
三、UserService中添加登录方法
// 登录操作
public User login(String username, String password) throws LoginException {
try {
//根据登录时表单输入的用户名和密码,查找用户
User user = dao.findUserByUsernameAndPassword(username, password);
//如果找到,还需要确定用户是否为激活用户
if (user != null) {
// 只有是激活才能登录成功,否则提示“用户未激活”
if (user.getState() == 1) {
return user;
}
throw new LoginException("用户未激活");
}
throw new LoginException("用户名或密码错误");
} catch (SQLException e) {
e.printStackTrace();
throw new LoginException("登录失败");
}
}
四、创建DAO
public class UserDao {
// 添加用户
public void addUser(User user) throws SQLException {
String sql = "insert into user(username,password,gender,email,telephone,introduce,activecode) values(?,?,?,?,?,?,?)";
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
int row = runner.update(sql, user.getUsername(), user.getPassword(),
user.getGender(), user.getEmail(), user.getTelephone(),
user.getIntroduce(), user.getActiveCode());
if (row == 0) {
throw new RuntimeException();
}
}
// 根据激活码查找用户
public User findUserByActiveCode(String activeCode) throws SQLException {
String sql = "select * from user where activecode=?";
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
return runner.query(sql, new BeanHandler<User>(User.class), activeCode);
}
// 激活用戶
public void activeUser(String activeCode) throws SQLException {
String sql = "update user set state=? where activecode=?";
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
runner.update(sql, 1, activeCode);
}
//根据用户名与密码查找用户
public User findUserByUsernameAndPassword(String username, String password) throws SQLException {
String sql="select * from user where username=? and password=?";
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
return runner.query(sql, new BeanHandler<User>(User.class),username,password);
}
}