首页 > 其他分享 >综合案例-黑马旅游网_登录功能

综合案例-黑马旅游网_登录功能

时间:2022-08-25 11:12:22浏览次数:47  
标签:info 登录 resp User 旅游网 import servlet 黑马 user

综合案例-黑马旅游网_登录功能

分析

 

 

 实现_Loginservlet

package com.bai.web.servlet;

import com.bai.domain.ResultInfo;
import com.bai.domain.User;
import com.bai.service.UserService;
import com.bai.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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //验证校验
        String check = req.getParameter("check");
        //从session中获取
        HttpSession session = req.getSession();
        String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
        session.removeAttribute("CHECKCODE_SERVER");//保证验证码只能使用一次
        //比较
        if (checkcode_server==null || !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
            resp.setContentType("application/json;charset=utf-8");
            resp.getWriter().write(json);
            return;
        }
        //获取用户名和密码数据
        Map<String,String[]> map=req.getParameterMap();
        //封装User对象
        User user = new User();
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //调用Service查询
        UserServiceImpl service = new UserServiceImpl();
        User u=service.login(user);
        ResultInfo info = new ResultInfo();

        //判断用户对象是否为null
        if (u==null){
            //用户名或密码错误
            info.setFlag(false);
            info.setErrorMsg("用户名或密码错误");
        }
        //判断用户是否激活
        if (u!=null && !"Y".equals(u.getStatus())){
            //用户尚未激活
            info.setFlag(false);
            info.setErrorMsg("您尚未激活 请激活");
        }
        //判断登录成功
        if (u!=null && "Y".equals(u.getStatus())){
            //登录成功
            info.setFlag(true);
        }
        //响应数据
        ObjectMapper mapper = new ObjectMapper();

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

实现service代码

UserService接口

//登录
User login(User user);

UserServiceImpl实现类

 /**
     * 登录方法
     * @param user
     * @return
     */
    @Override
    public User login(User user) {
        return userDao.findByUsernameAndPassword(user.getUsername(),user.getPassword());
    }
}

实现Dao代码

UserDao接口

 //根据用户名和密码查询
    User findByUsernameAndPassword(String username, String password);

UserDaoImpl实现类

 @Override
    public User findByUsernameAndPassword(String username, String password) {
        User user= null;
        try {
            //定义sql
            String sql="select * from tab_user where username=? and password=?";
            //执行sql
            user = template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),username,password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return user;
    }
}

前端代码实现

<!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 () {
            //给登录按钮绑定单击事件
            $("#btn_sub").click(function () {
                //发送ajax请求 提交表单数据
                $.post("loginServlet",$("#loginForm").serialize(),function (data) {
                    if (data.flag){
                        //登录成功
                        location.href="index.html";
                    }else{
                        //登录失败
                        $("#errorMsg").html(data.erroMsg);
                    }
                })
            })
        })
    </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>

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

前端代码

<!-- 头部 start -->
<script>
    $(function () {
       $.get("findUserServlet",{},function (data) {
           //{uid:1,name:'李四'}
           var msg = "欢迎回来,"+data.name;
           $("#span_username").html(msg);

       }); 
    });

</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 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>
    

serlet实现

package com.bai.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 {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //从session中获取登录用户
        Object user = req.getSession().getAttribute("user");
        //将user写回客户端
        ObjectMapper mapper = new ObjectMapper();
        resp.setContentType("application/json;charset=utf-8");
        mapper.writeValue(resp.getOutputStream(),user);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
User findByUsernameAndPassword(String username, String password);

标签:info,登录,resp,User,旅游网,import,servlet,黑马,user
From: https://www.cnblogs.com/aimz01/p/16623584.html

相关文章

  • SMB登录事件排查经验分享
    1.概述1.1案例先来看两张图:  看到这两张图的第一印象应该是这是一个成功的登陆,其类型为3,代表网络登陆,4624表示成功登陆,可能大部分人都是如此认为。那么实际上呢?这里面......
  • 综合案例-黑马旅游网_邮件功能
    综合案例-黑马旅游网_邮件功能为了保证用户填写的邮箱事正确的将来可以推广一些宣传信息到用户邮箱中所有我们才需要邮件功能发送邮件代码packagecom.bai.util;i......
  • 《黑马旅游网》综合案例(四)登录功能
    登录功能分析:  Servlet层:@WebServlet("/loginServlet")publicclassLoginServletextendsHttpServlet{protectedvoiddoPost(HttpServletRequestreques......
  • 综合案例-黑马旅游网_异步提交表单和servlet代码实现
    综合案例-黑马旅游网_异步提交表单在此使用异步提交表单是为了获取服务器响应的数据因为前台使用的是html作为视图层不能够直接从servlet相关的域对象获取值只能通过aj......
  • 综合案例-黑马旅游网注册功能分析和表单校验
    综合案例-黑马旅游网注册功能分析图解  综合案例-黑马旅游网注册功能_表单校验表单校验功能用户名:单词字符长度8到20位密码:单词字符长度8到20位email:邮件格式......
  • 《黑马旅游网》综合案例(三)注册功能后台
    Servlet代码实现UserDao:publicinterfaceUserDao{/***根据用户名查询用户信息*@paramusername*@return*/publicUserfindByU......
  • Python3项目初始化9-->用户登录和用户管理和密码加密
    26、用户登录页面修改使用用户登录现成的模板。鼠标右键查看页面原代码,直接复制粘贴:https://v3.bootcss.com/examples/signin/调整login.html代码,{%loadstatic%}<!docty......
  • STS用Maven写一个登录页面
    上一章我们写了一个HelloWorld,这一章在此基础上写出一个登录页面。 一、当前目录结构为:  之所以运行后出现HelloWord的页面,是因为server启动时会默认执行index.jsp......
  • 《黑马旅游网》综合案例(一)
    项目导入:初始的项目:链接:https://pan.baidu.com/s/1Fd-6zx4KaX-F7M5IhCWlEw提取码:btan把给定的初始项目导入即可项目启动:运行:就出来一个地址,复制到网页进行访问 ......
  • windows配置ssh免密登录
    公司项目分为了好几个线上环境,因为缺电没有空调,进行居家办公,需要配置免密登录。实现步骤一、生成公钥和私钥二、在客户端编辑配置文件三、将公钥拷贝到服务器四、重启......