收到激活邮件后,下面的操作就是点击进行激活操作。
激活的结果也就是两种:
1.激活成活
2.激活失败
实现逻辑
点击邮箱中的链接,向商城userservlet发送一个请求
user?method=active&code=****
在userservlet中编写active方法
接收code 调用service 完成激活 生成提示信息(激活成功或者失败)
在service中编写激活方法
通过code获取用户 如果没有找到,则激活失败,提示用户重新激活或者重新注册 如果找到了,设置激活状态为1,同时清空code
在dao中需要编写两个方法
getByCode
update
具体实现
- 在邮箱客户端中接收到邮件后,点击激活链接
active
方法实现
/**
* 用户激活
*
* @param req
* @param resp
* @return
* @throws ServletException
* @throws IOException
*/
public String active(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
//1. 接收code
String code = req.getParameter("code");
//2. 调用service完成激活
UserService us = new UserServiceImpl();
User user = us.active(code);
//3. 判断user 生成不同的提示信息
if (null == user) {
// 没有找到这个用户 激活失败
req.setAttribute("msg", "激活失败,请重新激活或者重新注册");
return "/jsp/msg.jsp";
}
// 激活成功
req.setAttribute("msg", "恭喜您激活成功,可以登录了");
} catch (Exception e) {
e.printStackTrace();
req.setAttribute("msg", "激活失败,请重新激活或者重新注册");
}
return "/jsp/msg.jsp";
}
- 在
service
中实现激活
@Override
public User active(String code) throws Exception {
// 1. 通过code 获取用户
UserDao ud=new UserDaoImpl();
User user=ud.getByCode(code);
// 1.1 通过激活码没有找到用户
if (null==user)
return null;
// 2.如果获取到了用户
user.setState(Constant.USER_IS_ACTIVE);
user.setCode(null);
ud.update(user);
return user;
}
dao
中根据code
查找用户,同时实现用户的更新
/**
* 通过激活码获取用户
*
* @param code
* @return
* @throws Exception
*/
@Override
public User getByCode(String code) throws Exception {
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select * from user where code = ? limit 1";
return qr.query(sql, new BeanHandler<User>(User.class), code);
}
/**
* 更新用户
*
* @param user
* @throws Exception
*/
@Override
public void update(User user) throws Exception {
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "update user set password = ? , sex = ? , state = ? where uid = ? ";
qr.update(sql, user.getPassword(), user.getSex(), user.getState(), user.getUid());
}