后台代码的实现主要包括service,dao和servlet层。
注册功能的后台代码写完以后,点击注册按钮跳转至404页面。问题暂时未解决。
在获取数据前先进行验证码的校验
在RegistUserServlet中编写代码
//验证校验
String check=request.getParameter("check");
//从session中获取验证码
HttpSession session=request.getSession();
String checkcode_server=(String) session.getAttribute("CHECKCODE_SERVER");
//为了保证验证码只能使用一次
session.removeAttribute("CHECKCODE_SERVER");
//比较
if (!checkcode_server.equalsIgnoreCase(check)){
//验证码错误
ResultInfo info=new ResultInfo();
//验证失败
info.setFlag(false);
info.setErrorMsg("验证码错误");
//将info对象序列化为json
ObjectMapper mapper=new ObjectMapper();
String json=mapper.writeValueAsString(info);
// 将json数据写回到客户端
//设置content-type
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);
return;
}
错误::发现在regist.html中无法获得ResultInfo.java的变量。
**
** /* 发送验证信息的邮件 */
public static boolean sendMail(String to, String text, String title){
try {
final Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.qq.com");
// 发件人的账号
props.put("mail.user", USER);
//发件人的密码
props.put("mail.password", PASSWORD);
// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator);
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
// 设置发件人
String username = props.getProperty("mail.user");
InternetAddress form = new InternetAddress(username);
message.setFrom(form);
// 设置收件人
InternetAddress toAddress = new InternetAddress(to);
message.setRecipient(Message.RecipientType.TO, toAddress);
// 设置邮件标题
message.setSubject(title);
// 设置邮件的内容体
message.setContent(text, "text/html;charset=UTF-8");
// 发送邮件
Transport.send(message);
return true;
}catch (Exception e){
e.printStackTrace();
}
return false;
}**
我出现错误,控制台显示发送邮件成功,但是我没有收到邮件。
**
2 .用户激活
思路:激活主要是修改对应用户的status字段。
在UserServiceImpl中设置激活码,唯一激活码的实现用Java中的类Uuid。
然后设置激活状态。以及设置激活邮件的正文。
//2.1 设置激活码,唯一字符串
user.setCode(UuidUtil.getUuid());
//2.2 设置激活状态
user.setStatus("N");
userDao.save(user);
userDao.save(user);
//3.发送激活邮件的正文?
String content="登录";
}else {
msg="激活失败,请重新激活";
}
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(msg);
}
UserService 激活用户
同时也要保存和更新用户的status和code;
@Override
public boolean active(String code){
//1 根据激活码查询用户对象
User user=userDao.findByCode(code);
if (user!=null){
// 2 调用dao的修改激活状态的方法
userDao.updateSttus(user);
return true;
}else {
return false;
}
}
UserDao :findByCode,updteStatus;
@Override
public User findByCode(String code) {
User user=null;
try {
String sql="select * from tab_user where code= ?";
user=template.queryForObject(sql,new BeanPropertyRowMapper(User.class),code);
} catch (DataAccessException e) {
e.printStackTrace();
}
return user;
}
@Override
public void updateSttus(User user) {
String sql="update tab_user set status='Y' where uid=?";
template.update(sql,user.getUid());
}
后台代码实现:
LoginServlet:
//1 获取用户名和密码数据
Map map=request.getParameterMap();
//2 封装User对象
User user=new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//3 调用Service查询
UserService service=new UserServiceImpl();
User u=service.login(user);
ResultInfo info=new ResultInfo();
//4 判断用户对象是否为null
if (u==null){
//用户名密码错误
info.setFlag(false);
info.setErrorMsg("用户名密码错误");
}
//5 判断用户是否激活
if (u!=null&&!"Y".equals(u.getStatus())){
//用户尚未激活
info.setFlag(false);
info.setErrorMsg("用户尚未激活");
}
//6 判断登录成功
if (u!=null&&!"N".equals(u.getStatus())){
info.setFlag(true);
}
//响应数据
ObjectMapper mapper=new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
mapper.writeValue(response.getOutputStream(),info);
}
service中实现 login方法代码:
@Override
public User login(User user) {
return userDao.findByUsernameAndPassword(user.getUsername(),user.getPassword());
}
前台代码login.html