JavaWeb黑马旅游网-学习笔记03【登陆和退出功能】

  1. JavaWeb黑马旅游网-学习笔记01【准备工作】
  2. JavaWeb黑马旅游网-学习笔记02【注册功能】
  3. JavaWeb黑马旅游网-学习笔记03【登陆和退出功能】
  4. JavaWeb黑马旅游网-学习笔记04【BaseServlet抽取】
  5. JavaWeb黑马旅游网-学习笔记05【分类数据展示功能】
  6. JavaWeb黑马旅游网-学习笔记06【旅游线路分页展示分页展示】
  7. JavaWeb黑马旅游网-学习笔记07【旅游线路查询】
  8. JavaWeb黑马旅游网-学习笔记08【旅游线路详情】
  9. JavaWeb黑马旅游网-学习笔记09【旅游线路收藏】
  10. JavaWeb黑马旅游网-学习笔记10【项目代码】

目录

18-登录功能_分析

19-登录功能_实现_Servlet

LoginServlet.java

20-登录功能_实现_Service&Dao

UserServiceImpl.java

UserDaoImpl.java

21-登录功能_实现_前台页面

login.html

22-登录功能_姓名提示

header.html代码

FindUserServlet代码

23-退出功能

header.html

ExitServlet.java


18-登录功能_分析

登录功能

19-登录功能_实现_Servlet

LoginServlet.java

package cn.itcast.travel.web.servlet;

import cn.itcast.travel.domain.ResultInfo;
import cn.itcast.travel.domain.User;
import cn.itcast.travel.service.UserService;
import cn.itcast.travel.service.impl.UserServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取用户名和密码数据
        Map<String, String[]> map = request.getParameterMap();
        //2.封装User对象
        User user = new User();
        try {
            BeanUtils.populate(user, map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } 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 && "Y".equals(u.getStatus())) {
            request.getSession().setAttribute("user", u);//登录成功标记
            //登录成功
            info.setFlag(true);
        }

        //响应数据
        ObjectMapper mapper = new ObjectMapper();

        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(), info);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

20-登录功能_实现_Service&Dao

UserServiceImpl.java

UserDaoImpl.java

21-登录功能_实现_前台页面

login.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>黑马旅游网-登录</title>
    <link rel="stylesheet" type="text/css" href="css/common.css">
    <link rel="stylesheet" type="text/css" href="css/login.css">
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
    <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
    <!--导入angularJS文件-->
    <!--<script src="js/angular.min.js"></script>-->
    <!--导入jquery-->
    <script src="js/jquery-3.3.1.js"></script>
    <script>
        $(function () {
            //1.给登录按钮绑定单击事件
            $("#btn_sub").click(function () {
                //2.发送ajax请求,提交表单数据
                $.post("user/login", $("#loginForm").serialize(), function (data) {
                    //data : {flag:false,errorMsg:''}
                    if (data.flag) {
                        //登录成功
                        location.href = "index.html";
                    } else {
                        //登录失败
                        $("#errorMsg").html(data.errorMsg);
                    }
                });
            });
        });
        //3.处理响应结果
    </script>
</head>
<body>
    <!--引入头部-->
    <div id="header"></div>
    <!-- 头部 end -->
    <section id="login_wrap">
        <div class="fullscreen-bg" style="background: url(images/login_bg.png);height: 532px;">
        </div>
        <div class="login-box">
            <div class="title">
                <img src="images/login_logo.png" alt="">
                <span>欢迎登录黑马旅游账户</span>
            </div>
            <div class="login_inner">
                <!--登录错误提示消息-->
                <div id="errorMsg" class="alert alert-danger"></div>
                <form id="loginForm" action="" method="post" accept-charset="utf-8">
                    <input type="hidden" name="action" value="login"/>
                    <input name="username" type="text" placeholder="请输入账号" autocomplete="off">
                    <input name="password" type="text" placeholder="请输入密码" autocomplete="off">
                    <div class="verify">
                        <input name="check" type="text" placeholder="请输入验证码" autocomplete="off">
                        <span><img src="checkCode" alt="" onclick="changeCheckCode(this)"></span>
                        <script type="text/javascript">
                            //图片点击事件
                            function changeCheckCode(img) {
                                img.src = "checkCode?" + new Date().getTime();
                            }
                        </script>
                    </div>
                    <div class="submit_btn">
                        <button type="button" id="btn_sub">登录</button>
                        <div class="auto_login">
                            <input type="checkbox" name="" class="checkbox">
                            <span>自动登录</span>
                        </div>
                    </div>
                </form>
                <div class="reg">没有账户?<a href="javascript:;">立即注册</a></div>
            </div>
        </div>
    </section>
    <!--引入尾部-->
    <div id="footer"></div>

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="js/jquery-1.11.0.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
    <!--导入布局js,共享header和footer-->
    <script type="text/javascript" src="js/include.js"></script>
</body>
</html>

22-登录功能_姓名提示

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

header.html代码

FindUserServlet代码

package cn.itcast.travel.web.servlet;

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //从session中获取登录用户
        Object user = request.getSession().getAttribute("user");
        //将user写回客户端
        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(), user);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

23-退出功能

什么叫做登录了?session中有user对象。

实现步骤:

  1. 访问servlet,将session销毁
  2. 跳转到登录页面

header.html

<!-- 头部 start -->
<script>
    $(function () {
        //查询用户信息
        $.get("user/findOne", {}, function (data) {
            //{uid:1,name:'李四'}
            var msg = "欢迎回来," + data.name;
            $("#span_username").html(msg);
        });
        //查询分类数据
        $.get("category/findAll", {}, function (data) {
            //[{cid:1,cname:国内游},{},{}]
            var lis = '<li class="nav-active"><a href="index.html">首页</a></li>';
            //遍历数组,拼接字符串(<li>)
            for (var i = 0; i < data.length; i++) {
                var li = '<li><a href="route_list.html?cid=' + data[i].cid + '">' + data[i].cname + '</a></li>';
                lis += li;
            }
            //拼接收藏排行榜的li,<li><a href="favoriterank.html">收藏排行榜</a></li>
            lis += '<li><a href="favoriterank.html">收藏排行榜</a></li>';
            //将lis字符串,设置到ul的html内容中
            $("#category").html(lis);
        });
    });
</script>
<header id="header">
    <div class="top_banner">
        <img src="images/top_banner.jpg" alt="">
    </div>
    <div class="shortcut">
        <!-- 未登录状态  -->
        <div class="login_out">
            <a href="login.html">登录</a>
            <a href="register.html">注册</a>
        </div>
        <!-- 登录状态  -->
        <div class="login">
            <span id="span_username"></span>
            <a href="myfavorite.html" class="collection">我的收藏</a>
            <a href="javascript:location.href='exitServlet';">退出</a>
        </div>
    </div>
    <div class="header_wrap">
        <div class="topbar">
            <div class="logo">
                <a href="/"><img src="images/logo.jpg" alt=""></a>
            </div>
            <div class="search">
                <input name="" type="text" placeholder="请输入路线名称" class="search_input" autocomplete="off">
                <a href="javascript:;" class="search-button">搜索</a>
            </div>
            <div class="hottel">
                <div class="hot_pic">
                    <img src="images/hot_tel.jpg" alt="">
                </div>
                <div class="hot_tel">
                    <p class="hot_time">客服热线(9:00-6:00)</p>
                    <p class="hot_num">400-618-9090</p>
                </div>
            </div>
        </div>
    </div>
</header>
<!-- 头部 end -->
<!-- 首页导航 -->
<div class="navitem">
    <ul id="category" class="nav">
        <!-- <li class="nav-active"><a href="index.html">首页</a></li>
         <li><a href="route_list.html">门票</a></li>
         <li><a href="route_list.html">酒店</a></li>
         <li><a href="route_list.html">香港车票</a></li>
         <li><a href="route_list.html">出境游</a></li>
         <li><a href="route_list.html">国内游</a></li>
         <li><a href="route_list.html">港澳游</a></li>
         <li><a href="route_list.html">抱团定制</a></li>
         <li><a href="route_list.html">全球自由行</a></li>
         <li><a href="favoriterank.html">收藏排行榜</a></li>-->
    </ul>
</div>

ExitServlet.java

package cn.itcast.travel.web.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/exitServlet")
public class ExitServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.销毁session
        request.getSession().invalidate();
        //2.跳转登录页面
        response.sendRedirect(request.getContextPath() + "/login.html");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

什么是真正的快乐?就是从你内心深处散发出来的你本来就有的东西。就像颜回穿着破烂的衣服,一箪食,一瓢饮,住在简陋的房子里,别人不能忍受这种贫困,颜回却自得其乐。

猜你喜欢

转载自blog.csdn.net/weixin_44949135/article/details/114229387