黑马旅游网-学习笔记Part05
大约 4 分钟
黑马旅游网-学习笔记Part05
今日目标
- 邮件激活功能 🍐 ❤️
- 用户登录✏️
- 注销功能
前置知识
- 曾经发送过邮件或者知道邮件是什么?
- 完成过mybatis的入门案例
- 已经导入了旅游网的初始项目工程
- 理解cookie和session的作用和特点
- 听说过JWT令牌进制
1. 邮件激活功能
2. 用户登录
用户登录

代码操作
步骤
- 书写Servlet接受请求和参数,处理交互逻辑
- 书写Service业务层代码,判断密码和用户名是否正确逻辑
- 书写Mapper代码,查询下数据库
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.验证验证码
//获取表单提交过来的 验证码,以及获取session 域中的code
String check = req.getParameter("check");
//从域中拿到对应的验证码 通过key获取vuale
String checkcode_server = (String) req.getSession().getAttribute("CHECKCODE_SERVER");
//创建一个封装结果集
ResultInfo resultInfo = new ResultInfo();
//判断验证码是否正确
if (check == null || !check.equalsIgnoreCase(checkcode_server)) {
//判断验证码错误 则设置为错误
resultInfo.setFlag(false);
resultInfo.setErrorMsg("验证码错误!!");
//将实体类转化为 json数据串
String jsonString = JSON.toJSONString(resultInfo);
//设置响应头信息
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write(jsonString);
return;
}
//2. 获取前端传递过来的参数 (username,password)
//第二步获取前端传递过来的数据
Map<String, String[]> userMap = req.getParameterMap();
//创建user对象
User user = new User();
//java 有api 可以将map的数据和实体类进行直接绑定 第一个参数传实体类, 第二个参数放map
try {
BeanUtils.populate(user, userMap);
System.out.println(user.toString());
} catch (Exception e) {
e.printStackTrace();
}
//3.调用service接口传入user对象
UserService userService = new UserServiceImpl();
User user1 = userService.findUser(user);
//3.1 serviceImpl 需要对传入的数据做处理, 第一步加密密码 设置到user.password
//3.2往数据库做 select 操作 查出来user == null 说明帐号密码错误,如果不为空则登录失败
//4.判断响应结果 是否登录成功 并且给前端显示不同的数据
//4.1 做用户是否激活判断, 如果 status= "Y" 就登录成功 如果 ="N" 就显示账户为激活 set.mag()
if(user1 == null){
resultInfo.setFlag(false);
resultInfo.setErrorMsg("登录失败");
}else if(user1.getStatus().equals("N")){
System.out.println(user1.getStatus());
resultInfo.setFlag(false);
resultInfo.setErrorMsg("帐号未激活,请前往邮箱激活!");
}else {
resultInfo.setFlag(true);
req.getSession().setAttribute("user",user1);
}
//将实体类转化为 json数据串
String jsonString = JSON.toJSONString(resultInfo);
//设置响应头信息
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write(jsonString);
return;
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
UserService接口类
public interface UserService {
//登录接口
User findUser(User user);
}
UserServiceImpl接口实现类
public class UserServiceImpl implements UserService {
@Override
public User findUser(User user) {
//获取sqlSession对象
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
//一步加密密码 设置到user.password
try {
String password1 = Md5Util.encodeByMd5(user.getPassword());
user.setPassword(password1);
} catch (Exception e) {
e.printStackTrace();
}
//3.2往数据库做 select 操作 查出来user == null 说明帐号密码错误,如果不为空则登录失败
User user1= mapper.findUser(user);
return user1;
}
}
Mapper接口类
public interface UserMapper {
//登录
User findUser(User user);
}
Mapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.itcast.travel.mapper.UserMapper">
<select id="findUser" resultType="user">
SELECT * from tab_user where username =#{username} and password =#{password}
</select>
</mapper>
登录后,单独获得用户信息

接口:/findUserServlet
参数:无参数
依赖:fastjson可以实现对象和json字符串互转: 👇
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
FindUserServlet: 👇
@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//从当前的session域中获取user对象
Object user = req.getSession().getAttribute("user");
//将查询出来的user对象响应给前端
String jsonString = JSON.toJSONString(user);
//设置响应头信息
resp.setContentType("text/json;charset=utf-8");
resp.getWriter().write(jsonString);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
3. 注销
前言

要点:点击退出后,清除Session中的user对象,并且重定向到登录页面
接口信息:
- 请求方式:Get
- 请求路径:
/travel/exitServlet
- 请求参数:无参数
代码操作
@WebServlet("/exitServlet")
public class ExitServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//完成退出登录模块的接口逻辑
// req.getSession().removeAttribute("user");
req.getSession().invalidate();
// 跳转到登录页面,重定向登录页面
resp.sendRedirect(req.getContextPath()+"/login.html");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}