Javaweb学习笔记day10、11---项目四阶段

本文详细介绍了JavaWeb项目中购物车功能的实现,包括保持登录状态、注销登录、Kaptcha验证码的配置与刷新、购物车模型如CartItem和Cart的设计以及相关操作。同时讲解了从注册到购物车管理的全过程,如添加商品、显示购物车列表、清空购物车、修改购物车项数量等操作,并涉及到BigDecimal的精度调整问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目四阶段搭建

  • 项目搭建
    • v3 -> v4

保持登录状态

  • 需求
    • 登录成功之后,在login_success.html、index.html页面,显示用户信息。
  • 分析
    • ServeltRequest:登录成功之后,使用的是重定向,而重定向是新的请求
    • ServletContext : 登录成功之后,所有人都可以拿到你的个人的用户信息
    • Cookie:登录成功之后,将个人信息存储到浏览器的缓存文件,存在一定的安全问题
    • Session:登录成功之后,将个人信息存储到服务器
  • 代码实现
public void login(HttpServletRequest request, HttpServletResponse response) {
    //处理请求
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    UserService userService = new UserServiceImpl();
    try {
        User user = userService.login(username, password);
        //调度页面
        if (null != user) {
            //登录成功 ,将用户信息存储到session, 跳转到login_success.html (重定向)
            request.getSession().setAttribute("existUser", user);
            response.sendRedirect(request.getContextPath() + "/user?method=toLoginSuccessPage");
        } else {
            //登录失败 , 跳转回login.html (请求转发)
            String errorMsg = "账户或密码错误!";
            request.setAttribute("errorMsg", errorMsg);
            toLoginPage(request, response);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
//index.html

<!--          登录前风格-->
<div class="topbar-right" th:if="${null == session.existUser}">
    <a th:href="@{/user(method=toLoginPage)}" class="login">登录</a>

    <a th:href="@{/user(method=toRegistPage)}" class="register">注册</a>
    <a
            href="pages/cart/cart.html"
            class="cart iconfont icon-gouwuche">
        购物车
        <div class="cart-num">3</div>
    </a>
    <a th:href="@{/manager.html}" class="admin">后台管理</a>
</div>
<!--          登录后风格-->
<div class="topbar-right" th:if="${null != session.existUser}">
    <span>欢迎你<b th:text="${session.existUser.userName}">张总</b></span>
    <a href="#" class="register">注销</a>
    <a
            href="pages/cart/cart.jsp"
            class="cart iconfont icon-gouwuche
         ">
        购物车
        <div class="cart-num">3</div>
    </a>
    <a href="pages/manager/book_manager.html" class="admin">后台管理</a>
</div>

注销登录功能

  • 需求
    • 在index.html、login_success.html页面,点击注销按钮,完成注销功能,回到index.html
  • 代码实现
/**
 * 注销登录功能
 * @param request
 * @param response
 */
public void logout(HttpServletRequest request,HttpServletResponse response){
    //将保存在session的用户信息移除
    request.getSession().removeAttribute(BookstoreConstant.SESSION_KEY_USER);
    //移除成功之后
    try {
        response.sendRedirect(request.getContextPath() + "/index.html");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
<a th:href="@{/user(method=logout)}">注销</a>&nbsp;&nbsp;

图片验证码Kaptcha

  • 概述
    • 通过让用户填写验证码并在服务器端检查,防止浏览器端使用程序恶意访问。
  • 开发步骤
    • ①引入Kaptcha的相关jar包
    • ②配置一个KaptchaServlet
      • 用于生成一个图片验证码 , 该图片验证码的内容存储到了Session中(KAPTCHA_SESSION_KEY)
    • ③测试匹配图片验证码
  • ①引入Kaptcha的相关jar包
  • ②配置一个KaptchaServlet
<!--图片验证码-->
<servlet>
    <servlet-name>KaptchaServlet</servlet-name>
    <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>KaptchaServlet</servlet-name>
    <url-pattern>/kaptcha</url-pattern>
</servlet-mapping>

③测试匹配图片验证码

@WebServlet("/demo01")
public class Demo01Servlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取用户输入的验证码
        String inputCode = req.getParameter("code");
        //获取图片验证码的内容
        Object existCode = req.getSession().getAttribute("KAPTCHA_SESSION_KEY");
        //两个验证码匹配
        System.out.println(inputCode.equals(existCode) ? "验证码正确!" :"验证码错误!");
    }

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

Kaptcha相关配置

  • 代码实现
<!--图片验证码-->
<servlet>
    <servlet-name>KaptchaServlet</servlet-name>
    <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>

    <!--设置边框-->
    <init-param>
        <param-name>kaptcha.border</param-name>
        <param-value>yes</param-value>
    </init-param>
    <!--设置边框颜色-->
    <init-param>
        <param-name>kaptcha.border.color</param-name>
        <param-value>red</param-value>
    </init-param>
    <!--设置边框粗细-->
    <init-param>
        <param-name>kaptcha.border.thickness</param-name>
        <param-value>10</param-value>
    </init-param>

    <!--设置内容-->
    <init-param>
        <param-name>kaptcha.textproducer.char.string</param-name>
        <param-value>0123456789</param-value>
    </init-param>

    <!--设置验证码长度-->
    <init-param>
        <param-name>kaptcha.textproducer.char.length</param-name>
        <param-value>4</param-value>
    </init-param>

    <!--设置字体样式-->
    <init-param>
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值