【JavaWeb】JSP使用Session、Cookie实现购物车

2023-11-02

购物界面shop.jsp

初始页面
在这里插入图片描述
添加商品后,在session中设置属性,重定向回到shop.jsp,然后根据session的内容显示结果
Cookie设置setMaxAge可以延长session的寿命
清空购物车就是清除session
在这里插入图片描述

<%@ page import="javax.jms.Session" %>
<%@ page import="java.util.*" %>
<%@ page import="java.net.URLDecoder" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2019/8/12
  Time: 10:37
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>购物</title>
    <style>
        #big{
            margin-left: 200px;
        }
        .pro img,.pro2 img{
            width: 200px;
            height: 200px;
            display: block;
            margin: 20px;
        }
        a{
            border: 2px solid black;
            border-radius: 5px;
            font-weight: bold;
            font-size: 16px;
            color: black;
        }
        a:link{
            text-decoration: none;
        }
        a:visited{
            color: black;
        }
        a:hover{
            color: green;
        }
        a:active{
            text-decoration: underline;
        }
        .pro a{
            margin-left: 20px;
            background-color: pink;
        }
        .pro2 a{
            margin-right: 20px;
            background-color: greenyellow;
        }
        .pro,.pro2{
            float: left;
            text-align: center;
        }
        .rec{
            position: relative;
            top: 20px;
            padding: 20px;
            width: 80%;
            height: 400px;
            border: solid 2px gray;
            clear: both;
        }
        span{
            font-family: "Adobe 黑体 Std R";
            font-weight: bold;
        }
        #empty{
            background-color: red;
        }
    </style>
</head>
<body>
<div id="big">
<div class="pro" name="book"><img src="img/book01.jpg">
    <span></span><a href="addpro?id=1">加入购物车</a></div>
<div class="pro"><img src="img/cloth01.jpg">
    <span>衣服</span><a href="addpro?id=2">加入购物车</a></div>
<div class="pro" name="mod"><img src="img/mod01.jpg">
    <span>口红</span><a href="addpro?id=3">加入购物车</a></div>
<div class="rec">
    <span>我的购物车</span>
    <a href="addpro?id=del" id="empty">清空购物车</a><br>
    <%
        String[] strs={"书","衣服","口红"};
        HttpSession session1 = request.getSession();
        Enumeration<String> names = session1.getAttributeNames();
        while (names.hasMoreElements()){
            String n=names.nextElement();
            Object attribute = session1.getAttribute(n);
            if(n.equals("1")){
                %>
    <div class="pro2" name="book"><img src="img/book01.jpg">
        <a href="addpro?id=1">数量+1</a><span><%=strs[0]+"有"+session1.getAttribute(n)+"件"%></span></div>
                <%
            }else if(n.equals("2")){
                %>
    <div class="pro2" name="book"><img src="img/cloth01.jpg">
        <a href="addpro?id=2">数量+1</a><span><%=strs[1]+"有"+session1.getAttribute(n)+"件"%></span></div>
    <%
            }else if(n.equals("3")){
    %>
    <div class="pro2" name="book"><img src="img/mod01.jpg">
        <a href="addpro?id=3">数量+1</a><span><%=strs[2]+"有"+session1.getAttribute(n)+"件"%></span></div>
    <%
            }
            System.out.println(n+"有"+attribute+"件");
        }
        System.out.println("-----------");
    %>
</div>
</div>
</body>
</html>

Servlet

package com.blb.cookie.shop;

import jdk.nashorn.internal.ir.CallNode;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Enumeration;

@WebServlet("/addpro")
public class AddProServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String proid = request.getParameter("id");
        //获取session
        HttpSession session = request.getSession();
        if ("del".equals(proid)) {
            session.invalidate();
        } else {

            String sid = session.getId();
            Cookie cookie1 = new Cookie("JSESSIONID", sid);
            cookie1.setMaxAge(60 * 60);
            response.addCookie(cookie1);
            Enumeration<String> names = session.getAttributeNames();
            Boolean hava = false;
            if (!names.hasMoreElements()) {
                session.setAttribute(proid, 1);
            }
            while (names.hasMoreElements()) {
                String n = names.nextElement();
//                System.out.println("name:" + n);
                if (n.equals(proid)) {
                    hava = true;
                    Object attribute = session.getAttribute(n);
//                    System.out.println("atrr:" + attribute);
                    int a = (Integer) attribute;
                    int b = a + 1;
//                    System.out.println("attr++:" + b);
                    session.removeAttribute(n);
                    session.setAttribute(n, b);
                }
            }
            if (!hava) {
                session.setAttribute(proid, 1);
            }
          /*  System.out.println(proid);
            System.out.println(session);
            System.out.println("addpro*******");*/
        }
        response.sendRedirect("shop.jsp");
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【JavaWeb】JSP使用Session、Cookie实现购物车 的相关文章

  • 通过 html tidy 提供渲染 jsp 页面

    我有一个在 Glassfish 上运行的 Java 项目 它会呈现一些难看的 HTML 这是使用各种内部和外部 JSP 库的副作用 我想设置某种渲染后过滤器 通过 HTMLTidy 提供最终的 HTML 这样源代码就很好且整洁 有助于调试
  • Java中的文字赋值[重复]

    这个问题在这里已经有答案了 定义上有什么区别 double example 23 1d or double example 23 1 为什么long float double可以以l f d结尾 之间没有区别double example 2
  • 帮助我避免 JPA、Hibernate 和 MySQL 的连接超时

    我正在使用 JPA Hibernate 作为提供者 Glassfish 和 MySQL 开发中一切都运行良好 但是当我将应用程序部署到测试服务器并让它运行 大部分空闲 过夜时 我通常会在早上遇到这样的情况 2011 03 09T15 06
  • 我们可以在不使用 main 方法、静态变量和静态方法的情况下在控制台上打印 java 消息吗?

    public class Test param args 1st way public static void main String args TODO Auto generated method stub System out prin
  • Active MQ - HelloWorld 示例异常

    我正在尝试运行 hello world 示例在这里找到 http activemq apache org hello world html I added activemq all 5 5 1 jar已经到图书馆了 它构建成功 但出现以下警
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • EMF Eclipse:带有自定义字段(属性)的枚举

    好吧 在 Java 中这是可能的 import org eclipse emf common util Enumerator public enum MyEnum implements Enumerator LITERAL1 0 Name
  • Java 中的 MP4 容器编写器

    我想找到一个免费的 Java MP4 容器 编写器 我不需要编码器 只需要能够根据预期值写入正确原子的编码器 Bonus对于这样一个库 也可以编写 有效 F4V 我更喜欢纯 Java 解决方案 而不是使用 JNI 或外部可执行文件的解决方案
  • 无法自动装配 org.springframework.mail.javamail.JavaMailSender

    尝试运行我的应用程序时遇到以下问题 所有的东西都调试过了 还是一无所获 IDE 毫无问题地找到了 bean 所以我对这里发生的情况感到非常困惑 SEVERE Exception sending context initialized eve
  • java中日期转换dd-MMM-yyyy到dd-MM-yyyy

    在Java中将23 Mar 2011转换为23 03 2011的最简单方法是什么 感谢大家 这似乎解决了这个问题 try Calendar cal Calendar getInstance cal setTime new SimpleDat
  • Java 不可变对象 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习不变性的概念 据我了解 一旦创建对象 不可变对象就无法更改其值 但我不明白不可变对象的以下用途 They are 自动是线程
  • 如何在Java中模拟引用传递?

    我是一个十足的 Java 菜鸟 我知道 Java 将所有参数视为按值传递 并且还有其他几个线程人们对此进行了解释 例如 在 C 中我可以这样做 void makeAThree int n n 3 int main int myInt 4 m
  • SimpleDateFormat 无法解析的日期 如果语言环境为 ES,则会出现错误。推特“创建时间”

    我正在尝试将 Twitter created at 转换为阿根廷日期时间 如果我这样做 final String TWITTER EEE MMM dd HH mm ss SimpleDateFormat sf new SimpleDateF
  • JSP拒绝未登录用户对URL的直接访问

    我有一个登录名和登录后显示的用户信息页面 如何阻止用户直接访问用户信息页面 我如何通过会话来实现它 登录时 将找到的User会话中的对象 String username request getParameter username Strin
  • Spring Transactional 减慢了整个过程

    我正在尝试分析我有两堂课的情况 其中一个类是 ProcessImpl 它是起点并在内部调用其他子事务 我不知道出了什么问题 processImpl正在导入一些东西并将相关数据写入数据库 Specs Spring orm版本 3 2 18 发
  • 如何列出Resources文件夹中的所有文件(java/scala)

    我正在编写一个函数 需要访问资源中的文件夹 并循环遍历所有文件名 如果这些文件符合条件 则加载这些文件 new File getClass getResource images sprites getPath listFiles 返回空指针
  • 在没有EOF的情况下停止读取java中的输入

    In 问题 如何停止读取输入 我的程序继续运行 要求更多输入 public static void main String args throws Exception BufferedReader br new BufferedReader
  • 获取Java中ResultSet返回的行数

    我用过一个ResultSet返回一定数量的行 我的代码是这样的 ResultSet res getData if res next System out println No Data Found while res next code t
  • 使用 PDFBox 在 Android 中创建 PDF

    我正在尝试通过我的 Android 应用程序创建 PDFPDFBoxapi 但出现以下错误 java lang NoClassDefFoundError org apache pdfbox pdmodel PDDocument 我已经将以下
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • Effective(Modern)C++笔记01

    Effectice C 01 条款01 视C 为一个语言联邦 C 区块 blocks 语句 statements 预处理 preprocessor 内置数据类型 built in data types 数组 arrays 指针 pointe
  • 安装zookeeper集群,开启正常,但status显示./zkServer.sh :line 170:exec :java:not found

    笔者安装过很多次zookeeper集群 但是在一个新的生产环境上遇到了zookeeper的启动异常问题 可以先使用 zkServer sh start foreground 来查看详细报错信息 若发现是 zkServer sh line 1
  • Segment Anything开源项目学习记录

    一 什么是Segment Anything开源项目 Introduction We introduce the Segment Anything SA project a new task model and dataset for ima
  • 滚动页面到指定位置动画展示-Vue自定义命令-IntersectionObserver-animate.css

    最近在做公司官网 web H5 页面滚动显示出来给个小动画 之前了解的浏览器标准解决方案 不向下兼容 是 IntersectionObserver 是一个全局的侦听器 但是每个页面去做一个实例去侦听当前对象也觉得太冗余了吧 并且在vue里面
  • 逻辑分析仪的使用

    目录 逻辑分析仪与示波器的区别 逻辑分析仪 DSView 软件安装与简介 波形采集 波形分析 分析I2S协议 逻辑分析仪与示波器的区别 参考 https www bilibili com video BV1mz4y127jn spm id
  • 详解环境变量

    目录 前言 一 什么是环境变量 二 查看环境变量的方法 三 查看环境变量的内容 四 普通变量VS环境变量 五 导出环境变量 六 常见的环境变量 七 set命令 查看普通变量或环境变量 八 C C 语言中main函数中的参数 1 main函数
  • C#操作Excel总结

    0 导入命名空间 1 2 3 4 using Microsoft Office Core using Microsoft Office Interop Excel
  • 1-8、Lua编译-运行-错误信息

    1 8 Lua编译 运行 错误信息 文章目录 1 8 Lua编译 运行 错误信息 1 require函数 2 C Packages 3 错误 4 异常和错误处理 5 错误信息和回跟踪 Tracebacks 虽然我们把Lua当作解释型语言 但
  • JNDI 和 JDBC 的区别-个人理解

    公众号 BiggerBoy 分享了更多知识干货 欢迎关注 多多支持 网上关于 JNDI 和 JDBC 的定义有很多 但是都很官方不容易理解 下面是我最近查阅资料得出的心得体会 希望对你在理解上有一点点的帮助 说的不对的请指正哦 JDBC 看
  • Sharding-jdbc踩坑记录(一)

    sharding jdbc学习链接 sharding jdbc版本 2 0 3 springboot版本 2 1 5 连接池 druid 1 1 14
  • 解决Bug[Vue warn]Error in mounted hook: “Error: please transfer a valid prop path to form item“

    本文主要讲解el form里嵌套el table的报错和解决 报错 Vue warn Error in mounted hook Error please transfer a valid prop path to form item 报错
  • PyTorch中通过torch.save保存模型和torch.load加载模型介绍

    PyTorch中一般约定是使用 pt或 pth文件扩展名保存模型 通过torch save保存模型 通过torch load加载模型 torch save和torch load函数的实现在torch serialization py文件中
  • Java根据枚举名使用反射获取枚举值

    由于前端需要根据枚举名获取实时获取枚举值 所以通过反射去得到枚举数据 一 首先我们新建一个枚举类接口 用于之后反射使用 package com littlematch enums biz 枚举值接口定义类 public interface
  • Eclipse导入工程文件后出现红叉解决方案:

    Step1 右击工程文件名 然后点击buildPath step2 点击Library 再点击JRE System Librarystep3 双击JRE System Library 选最后一个 Workspace default JRE
  • C++ 多线程:原子操作atomic

    原子操作atomic C 多线程 原子类型 有两个线程 一个要写数据 一个读数据 如果不加锁 可能会造成读写值混乱 使用std mutex程序执行不会导致混乱 但是每一次循环都要加锁解锁是的程序开销很大 为了提高性能 C 11提供了原子类型
  • 四二拍用音符怎么表示_钢琴教学:学会这3个音符!立马解决你节奏的致命问题!...

    在学习节奏之前 我们先来了解节奏是什么 以及节奏的重要性 一切协调 平衡 有次序的进行都可以称为节奏 节奏可以独立存在 而在音乐中具体表现为 用强弱相互交替 将音的长短关系组织起来 称为节奏 许多节奏的组合在音乐进行中已经形成固定的模式 而
  • 1.3编程基础之算术表达式与顺序执行 06:甲流疫情死亡率

    1 3编程基础之算术表达式与顺序执行 06 甲流疫情死亡率 总时间限制 1000ms 内存限制 65536kB 描述 甲流并不可怕 在中国 它的死亡率并不是很高 请根据截止2009年12月22日各省报告的甲流确诊数和死亡数 计算甲流在各省的
  • java web开发一个帐号同一时间只能一个人登录

    一个帐号同一时间只能一个人登录 对于一个帐号在同一时间只能一个人登录 可以通过下面的方法实现 1 在用户登录时 把用户添加到一个ArrayList中 2 再次登录时查看ArrayList中有没有该用户 如果ArrayList中已经存在该用户
  • springboot实现各种参数校验

    springboot实现各种参数校验 简单使用 Java API规范 JSR303 定义了Bean校验的标准validation api 但没有提供实现 hibernate validation是对这个规范的实现 并增加了校验注解如 Ema
  • 【JavaWeb】JSP使用Session、Cookie实现购物车

    购物界面shop jsp 初始页面 添加商品后 在session中设置属性 重定向回到shop jsp 然后根据session的内容显示结果 Cookie设置setMaxAge可以延长session的寿命 清空购物车就是清除session