旅游网小案例:登录功能&用户名提示&退出登录

分析

在这里插入图片描述

  • 使用了StringJDBC与Druid第三方工具
  • 前台代码
$(function () {
        $("#btn_sub").click(function () {
            $.post("loginServlet", $("#loginForm").serialize(), function (data) {
                if (data.flag) {
                    //登录成功
                    location.href = "index.html"
                } else {
                    //登录失败
                    $("#errorMsg").html(data.errorMsg)
                }
            })
        })
    })

对登录按钮进行事件绑定,使用jQuery进行Ajax异步交互,根据返回的信息,进行跳转页面和给出提示.

  • Servlet
 //获取验证码
 String check = request.getParameter("check");
 HttpSession session = request.getSession();
 String checkcodeServer = (String) session.getAttribute("CHECKCODE_SERVER");
 //标记
 boolean flag = false;
 String errorMsg = null;
 if (checkcodeServer != null && !"".equals(checkcodeServer) && checkcodeServer.equalsIgnoreCase(check)) {
     //获取用户名和密码
     Map<String, String[]> map = request.getParameterMap();
     //封装数据
     if (map != null && map.size() != 0) {
         User user = new User();
         try {
             BeanUtils.populate(user, map);
         } catch (IllegalAccessException | InvocationTargetException e) {
             e.printStackTrace();
         }
         //调用service方法
         UserService service = new UserServiceImpl();
         User u = service.login(user);
         //判断结果
         if (u == null) {
             //用户名密码错误
             errorMsg = "用户名或密码错误";
         } else if (!"Y".equals(u.getStatus())) {
             //用户尚未激活
             errorMsg = "您尚未激活,请进行激活";
         } else {
             session.setAttribute("user", u);
             flag = true;
         }
     } else {
         errorMsg = "请输入账号密码";
     }
 } else {
     errorMsg = "验证码错误";
 }

 //封装结果
 ResultInfo info = new ResultInfo();
 info.setFlag(flag);
 info.setErrorMsg(errorMsg);
 //将结果转换为json
 ObjectMapper mapper = new ObjectMapper();
 String json = mapper.writeValueAsString(info);
 //响应数据
 System.out.println(json);
 response.setContentType("application/json;charset=utf-8");
 response.getWriter().write(json);

进行验证码判断,激活判断,判空,然后根据service方法返回的信息,进行处理.最后同一封装成结果类转换为json格式返回.

  • Service
 @Override
    public User login(User user) {
        return dao.findByUsernameAndPassword(user.getUsername(),user.getPassword());
    }

调用dao中根据用户名和密码查询用户的方法并返回

  • Dao
 public User findByUsernameAndPassword(String username, String password) {
        String sql = "select * from tab_user where username=? and password=?";
        User user = null;
        try {
            user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username, password);
        } catch (DataAccessException e) {
//            e.printStackTrace();
        }
        return user;
    }

根据给出的用户名和密码,在数据库中查找相应的用户.(未使用redis优化)

7.2.3 index页面中用户姓名的提示信息功能

  • 实现目的
    在这里插入图片描述

  • 分析
    在这里插入图片描述

  • 头部html

	$(function () {
        $.get("findUserServlet", function (data) {
            if (data != null) {
                var msg = "欢迎回来," + data.name;
                $("#span_username").html(msg)
            }
        })
    })

每次加载头部html都进行异步请求,根据返回信息显示(较为简陋,简单实现)

  • Servlet
	//从sessoin中获取登录用户
	HttpSession session = request.getSession();
	Object user = session.getAttribute("user");
	//将user写回客户端
	ObjectMapper mapper = new ObjectMapper();
	response.setContentType("application/json;charset=utf-8");
	mapper.writeValue(response.getOutputStream(), user);

因为在登录时向session中存入了user对象,所以可以直接返回usre的json.

退出登录

  • 分析
    在这里插入图片描述
  • index.html
 <a href="javascript:location.href='exitServlet';">退出</a>
  • Servlet
		//销毁session
        request.getSession().invalidate();

        //跳转login.html页面
        response.sendRedirect(request.getContextPath()+"/login.html");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘿嘿嘿1212

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值