首页 > 其他分享 >day08-功能实现07

day08-功能实现07

时间:2022-12-23 21:34:19浏览次数:74  
标签:功能 day08 07 登录 request member session jsp login

家居网购项目实现07

以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git

16.功能15-会员显示登录名

16.1需求分析/图解

image-20221223173332112 image-20221223173351764 image-20221223173640884
  1. 会员登录成功
  2. login_ok.jsp显示欢迎信息
  3. 返回首页,显示登录相关菜单,如果有登录过,显示如上信息
  4. 如果用户没有登录过,网站首页就显示 登录/注册 超链接

16.2思路分析

16.3代码实现

dao和service层不变,在之前实现的MemberServlet中,修改login方法:

如果用户登录成功,创建session,在session中设置member信息,请求转发到登录成功页面login_ok.jsp,在该页面中显示用户信息。

MemberServlet.login():

/**
 * 处理会员登录业务
 *
 * @param request
 * @param response
 * @throws ServletException
 * @throws IOException
 */
public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //1.接收用户名和密码
    //如果前端输入的是null,后台接收的数据为空串""
    String username = request.getParameter("username");
    String password = request.getParameter("password");

    //构建一个member对象
    Member member = new Member(null, username, password, null);

    //2.调用MemberServiceImpl的login方法
    if (memberService.login(member) == null) {//数据库中没有该用户,返回登录页面
        //登录失败,将错误信息和登录会员名放入request域中
        request.setAttribute("errInfo", "登录失败,用户名或者密码错误");
        request.setAttribute("username", username);
        //注意路径
        request.getRequestDispatcher("/views/member/login.jsp")
                .forward(request, response);
    } else {//登录成功
        //创建session,将jsessionid作为cookie返回给浏览器
        HttpSession session = request.getSession();
        session.setMaxInactiveInterval(1800);//设置生命周期为30分钟
        //将得到的member对象放入session域对象中
        session.setAttribute("member", member);
        //跳转到登录成功页面
        request.getRequestDispatcher("/views/member/login_ok.jsp")
                .forward(request, response);
    }
}

在前端jsp页面中,如果没有在session域对象中获取到member对象,就显示登录注册链接,否则显示登录用户信息(这里先不实现过滤)

views/customer/index.jsp

<!-- Single Wedge Start -->
<%--根据用户登录的状态显示不同菜单--%>
<%--如果未登录--%>
<c:if test="${empty sessionScope.member}">
    <div class="header-bottom-set dropdown">
        <a href="views/member/login.jsp">登录|注册</a>
    </div>
</c:if>
<%--如果已登录--%>
<c:if test="${not empty sessionScope.member}">
    <div class="header-bottom-set dropdown">
        <a> 欢迎:${sessionScope.member.username}</a>
    </div>
    <div class="header-bottom-set dropdown">
        <a href="#">订单管理</a>
    </div>
    <div class="header-bottom-set dropdown">
        <a href="#">安全退出</a>
    </div>
</c:if>
<!-- Single Wedge End -->

login_ok.jsp同理

16.4完成测试

未登录访问首页:

image-20221223194603497

登录后访问首页:

image-20221223194724345 image-20221223194736146 image-20221223194819075

17.功能16-注销登录

17.1需求分析/图解

image-20221223195300743
  1. 顾客登陆成功后
  2. login_ok.jsp中点击安全退出,注销登录
  3. 返回首index.jsp,也可以点击安全退出,注销登录

17.2思路分析

17.3代码实现

dao,service层不变

在MemberServlet中实现logout方法

/**
 * 处理用户注销登录的请求
 *
 * @param req
 * @param resp
 * @throws ServletException
 * @throws IOException
 */
protected void logout(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //销毁当前用户的session
    req.getSession().invalidate();
    //重定向到index.jsp,目的是刷新首页
    //req.getContextPath()=>/项目名  -默认访问index.jsp
    resp.sendRedirect(req.getContextPath());
}

注意修改安全退出超链接的参数action=logout

image-20221223201050749

17.4完成测试

18.功能17-注册验证码

18.1需求分析/图解

表单重复提交情况:

  1. 提交完表单,服务器使用请求转发进行页面跳转。用户刷新(F5),会发起最后一次的请求,造成表单重复提交问题。解决方案是使用重定向
  2. 用户正常提交,由于网络延迟等原因,未收到服务器响应,如果这时用户重复点击提交,也会造成表单重复提交问题。解决方案:使用验证码
  3. 用户正常提交,服务器没有延迟,但是提交完之后,用户回退浏览器重新提交,也会造成表单重复提交。解决方案:验证码
  4. 恶意注册,使用可以批量发送http的工具,比如Postman,Jemeter等,解决方案:仍是使用验证码防护

18.2思路分析

标签:功能,day08,07,登录,request,member,session,jsp,login
From: https://www.cnblogs.com/liyuelian/p/17001672.html

相关文章

  • ts07_ts的编译选项2
    compileOptions编译器配置选项中一些关于语法检查的配置选项  "allowJs":false,//是否对JS文件进行编译,默认false  "checkJs":false,//是否对JS文件进行检查,默......
  • 力扣-105-从前序与中序遍历序列构造二叉树/剑指Offer-07
    基本步骤是这样:先看先序序列,可以确定根节点,然后在中序遍历中就可以将二叉树划成左子树和右子树两拨对左右子树递归上述步骤好像直到怎么遍历二叉树,却对怎么重建二叉树......
  • 国产化EtherCAT主站控制器解决方案,米尔基于全志T507-H核心板
    EtherCAT是由德国BECKHOFF自动化公司于2003年提出的实时工业以太网技术。它具有高速和高数据有效率的特点,支持多种设备连接拓扑结构。其从站节点使用专用的控制芯片,主站使......
  • 国产化EtherCAT主站控制器解决方案,米尔基于全志T507-H核心板
    EtherCAT是由德国BECKHOFF自动化公司于2003年提出的实时工业以太网技术。它具有高速和高数据有效率的特点,支持多种设备连接拓扑结构。其从站节点使用专用的控制芯片,主站使用......
  • 如何实现视频的快进快退功能
    ======================================================最近在研究视频的播放的快进快退功能,先把相关的调研结果整理一下,做个记录。裸的H264码流,如果实现快进快退必须......
  • 07-MSF PAYLOAD模块
    1环境搭建Windowsserver2008R2Datacenter:192.168.5.128kalilinux:192.168.5.1362在kali上使用MSFPayload生成病毒生成1.exe病毒文件。msfvenom-pwindows/met......
  • Day17_08_SpringCloud教程之Eureka开启健康检查功能
    08_SpringCloud教程之Eureka开启健康检查功能一.Eureka健康监测概述默认情况下,Eureka的健康检测并不是通过actuator的health端点来实现的,而是依靠客户端心跳的方式来保持......
  • Day07_02_分布式教程之集中式与分布式全方位优劣对比(转)
    集中式与分布式全方位优劣对比(转)一.应用现状比较由于历史原因,集中式架构多用于传统银行、电信等行业,主机资源集中在大型主机或小型机上.在集中式架构下,包括操作系统、......
  • Day07_05_分布式教程之分布式事务详解
    分布式事务详解一.分布式事务的概念随着分布式计算的发展,事务在分布式计算领域也得到了广泛的应用.在单机数据库中,我们很容易能够实现一套满足 ​​ACID​​ 特性的事......
  • Day08_03_分布式教程之Linux下搭建Zookeeper
    Linux下搭建Zookeeper一.Zookeeper配置说明1.Zookeeper的三种工作模式单机模式: 可能存在单点故障;集群模式: 在多台机器上部署 ​​Zookeeper​​ 集群,适合线上环......