JSP培训(14)——购物车实例(上)

目标:
l 掌握购物车的信息如何存储;
l 掌握购物车常用功能的实现。
主要内容:
l 首先分析用户上网购物的一般过程;
l 介绍采用什么样的数据结构存储购物信息;
l 编写购物界面;
l 完成向购物车添加物品的功能。
1、用户上网购物的一般过程
在浏览物品的过程中如果对某件物品感兴趣,会添加到购物车(购物篮)中,随时可以查看购物车中的信息,如果不想要某件物品的话,可以删除,或者修改某种物品的数量,或者整个清空购物车,可以继续选择物品向购物车中添加。最后用户可以购物这些物品,经过输入个人的送货地址信息和设定交易方式之后,可以生成订单。网站的管理员可以对订单进行管理。
本实例模拟这个过程,但是进行了简化:只能在物品列表中选择物品向购物车中添加。确定购买后,不需要设置交易方式以及付款等。实际处理过程,可以使用我们前面介绍的功能完成。
2、购物车信息组织
因为在用户访问网站的整个过程中都可以访问购物车信息,所以购物车对象应该存放在session中。
因为用户购买的物品的种类和数量都不确定,所以需要使用一个合适的数据结构存储,我们选择ArrayList。
每一种物品都涉及数量,需要进行封装,把物品和数量封装成购物项,使用Item,每个Item对应一种物品以及该种物品的数量。
需要编写物品类表示物品的基本信息。
参考代码如下:
2.1 物品类
该类中包含两个与分页显示相关的方法。其中用到的DBBean是前面介绍的。
package javabean;
import java.util.ArrayList;
import java.sql.*;
public class Goods
{
private String goodsid;
private String goodsname;
private float price;
// 物品编号
public void setGoodsid(String goodsid)
{
this.goodsid = goodsid;
}
public String getGoodsid()
{
return goodsid;
}
// 物品名称
public void setGoodsname(String goodsname)
{
this.goodsname = goodsname;
}
public String getGoodsname()
{
return goodsname;
}
// 物品价格
public void setPrice(float price)
{
this.price = price;
}
public float getPrice()
{
return price;
}
public ArrayList getGoodsByPage(int pageNo) {
int number = 10;
// 每一页显示的记录数
int begin = (pageNo * number) - 9;
int end = pageNo * number;
int index = 1;
DBBean db = new DBBean();
// 要返回的结果对象
ArrayList goods = new ArrayList();
String sql = "select * from goods";
ResultSet rs;
try{
rs = db.executeQuery(sql,null);
while (rs.next()) {
// 在begin之前的记录是不显示的
if (index < begin) {
index++;
continue;
}
// 在end之后的记录也不显示
if (index > end)
break;
index++;
String goodsid = rs.getString(1);
String goodsname = rs.getString(2);
float price = rs.getFloat(3);
Goods g = new Goods();
g.setGoodsid(goodsid);
g.setGoodsname(goodsname);
g.setPrice(price);
goods.add(g);
}
}catch(Exception e){
e.printStackTrace();
}finally{
db.close();
}
return goods;
}
public Goods findGoodsById(String goodsid)
{
try {
// 编写查询数据库信息的SQL语句
String sql = "select * from goods where goodsid=?";
DBBean db = new DBBean();
ArrayList params = new ArrayList();
params.add(goodsid);
ResultSet rs = db.executeQuery(sql,params);
if(rs.next())
{
//String goodsid =rs.getString(1);
String goodsname = rs.getString(2);
float price = rs.getFloat(3);
Goods temp = new Goods();
temp.setGoodsid(goodsid);
temp.setGoodsname(goodsname);
temp.setPrice(price);
db.close();
return temp;
}else{
return null;
}
} catch (Exception e) {
System.out.println(e.toString());
return null;
}
}
public int getPageCount() {
try {
// 编写查询数据库信息的SQL语句
String sql = "select count(*) from goods";
DBBean db = new DBBean();
ResultSet rs=db.executeQuery(sql,null);
int number=0;
if(rs.next())
number = rs.getInt(1);
db.close();
return (number - 1) / 10 + 1;
} catch (Exception e) {
return 0;
}
}
}
2.2 Item类
package javabean;
// 购物项
public class Item
{
private Goods goods;
private int quantity;
public Item(Goods d,int quantity)
{
this.goods = d;
this.quantity = quantity;
}
public void setGoods(Goods goods){
this.goods = goods;
}
public Goods getGoods()
{
return goods;
}
public void setQuantity(int quantity)
{
this.quantity = quantity;
}
public int getQuantity()
{
return quantity;
}
}
3、物品信息显示功能
采用MVC模式,考虑视图部分,不需要输入界面,只需要显示信息的界面。
模型部分,在前面的代码中已经实现。
控制器部分,需要编写GetAllGoods.java。
参考代码分别如下:
3.1 界面代码
文件名:goodslist.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${pageNo!=1}">
<a href="getAllGoods?pageNo=1">第一页</a>
<a href="getAllGoods?pageNo=${pageNo-1}">上一页</a>
</c:if>
<c:if test="${pageNo!=pageCounter}">
<a href="getAllGoods?pageNo=${pageNo+1}">下一页</a>
<a href="getAllGoods?pageNo=${pageCounter}">最后一页</a>
</c:if>
<br>
<table width="200" border="1" height="56">
<tbody>
<tr>
<td>
物品编号
</td>
<td>
物品名称
</td>
<td>
物品价格
</td>
</tr>
<c:forEach var="g" items="${goods}">
<tr>
<td>
${g.goodsid}
</td>
<td>
${g.goodsname}
</td>
<td>
${g.price}
</td>
<td>
<a href="addToCart?goodsid=${g.goodsid}">添加到购物车</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
3.2 控制器代
package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javabean.*;
import java.util.*;
public class GetAllGoods extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
//response.setContentType("text/html;charset=gb2312");
//PrintWriter out = response.getWriter();
// 第一步:获取用户的输入信息
String pageNo=request.getParameter("pageNo");
int iPageNo=1;
if(pageNo!=null)
{
iPageNo = Integer.parseInt(pageNo);
}
// 第二步:调用JavaBean
Goods g = new Goods();
ArrayList goods=null;
goods = g.getGoodsByPage(iPageNo);
int pageCount=g.getPageCount();
// out.println("记录数:"+users.size());
// out.println("当前页码:"+iPageNo);
// out.println("总页码:"+pageCount);
// 第三步:传值
request.setAttribute("goods",goods);
request.setAttribute("pageNo",new Integer(iPageNo));
request.setAttribute("pageCounter",new Integer(pageCount));
// 第四步:选择一个界面对用户进行响应
String forward="goodslist.jsp";
RequestDispatcher rd = request.getRequestDispatcher(forward);
rd.forward(request,response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
doGet(request,response);
}
}
4、显示购物车中信息
该功能直接从session中获取购物车信息,所以不需要控制器和模型部分,只需要编写显示购物车信息的JSP文件即可,文件名为cart.jsp,参考代码如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
购物车中的信息<br>
<table border=1>
<tr>
<td>物品编号</td>
<td>物品名称</td>
<td>价格</td>
<td>数量</td>
</tr>
<c:forEach var="item" items="${cart}">
<tr>
<td>${item.goods.goodsid}</td>
<td>${item.goods.goodsname}</td>
<td>${item.goods.price}</td>
<td>${item.quantity}</td>
</c:forEach>
</table>
5、向购物车中添加物品
采用MVC模式。
首先考虑输入和输出,添加物品的输入就是物品信息列表界面,输出应该是添加后的购物车信息界面(也可以重新回到物品信息界面),这两个界面都不需要编写。
考虑模型部分,需要编写购物车管理JavaBean,完成处理。
考虑控制器部分,需要获取用户选择的物品,然后添加到调用购物车管理Bean,完成添加。
下面是参考代码。
5.1 模型部分
文件名CartManager.java
package javabean;
import java.util.ArrayList;
public class CartManager
{
// 表示购物车
private ArrayList cart;
public void setCart(ArrayList cart)
{
this.cart = cart;
}
public ArrayList getCart()
{
return cart;
}
// 添加的物品&数量
public ArrayList addToCart(Goods g,int quantity)
{
if(cart==null){
// 实例化购物车对象
cart=new ArrayList();
// 添加到购物车
Item item = new Item(g,quantity);
cart.add(item);
}
else
{
// 转换成数组
Object items[] = cart.toArray();
boolean find=false; // 表示是否查找到
for(int i=0;i<items.length;i++)
{
Item temp = (Item)items[i];
// 判断购物车中是否存在要添加的物品
if(temp.getGoods().getGoodsid().equals(g.getGoodsid()))
{
temp.setQuantity(temp.getQuantity()+quantity);
find=true;
break;
}
}
if(!find)
{
// 添加到购物车
Item item = new Item(g,quantity);
cart.add(item);
}
}
return cart;
}
}
5.2 控制器部分
文件名:AddToCart.java
package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javabean.*;
import java.util.*;
public class AddToCart extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
// response.setContentType("text/html;charset=gb2312");
// PrintWriter out = response.getWriter();
try{
// 得到要添加的物品的编号
String goodsid = request.getParameter("goodsid");
// 创建JavaBean对象
CartManager cartManager=new CartManager();
// 得到session对象
HttpSession session = request.getSession(true);
// 得到购物车对象
ArrayList cart = (ArrayList)session.getAttribute("cart");
// 用cart初始化cartManager
cartManager.setCart(cart);
// 构造物品对象
Goods g = new Goods();
g = g.findGoodsById(goodsid);
// out.println(g.getGoodsid());
cartManager.addToCart(g,1);
// 先把购物车重新存到session
session.setAttribute("cart",cartManager.getCart());
}catch(Exception e){
// out.println(e.toString());
}
response.sendRedirect("cart.jsp");
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
doGet(request,response);
}
}
6、Servlet的配置
web.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>getAllGoods</servlet-name>
<servlet-class>servlet.GetAllGoods</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getAllGoods</servlet-name>
<url-pattern>/getAllGoods</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>addToCart</servlet-name>
<servlet-class>servlet.AddToCart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addToCart</servlet-name>
<url-pattern>/addToCart</url-pattern>
</servlet-mapping>
</web-app>
7、运行
编译所有文件,然后先访问getAllGoods Servlet,然后在物品信息界面上选择物品添加到购物车,之后就可以看到购物车中的信息了。

参考教材:《Java Web程序设计基础教程》

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装 基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装。 阅读详情

相关推荐

UltraScale+ FPGA中GTY收发器参考时钟的跨Bank共享机制解析

本文深入解析了UltraScale+ FPGA中GTY收发器参考时钟的跨Bank共享机制,详细介绍了时钟布线架构、SLR区域限制及Vivado工程配置要点。通过实际案例和优化建议,帮助工程师解决高速串行通信中的时钟共享问题,提升系统性能。

weixin_29280219的博客 632

Java Web购物车-JSP实现

登录注册功能 login.jsp &amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot; pageEncoding=&quot;UTF-8&quot;%&amp;gt; &amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &a

Co_zy的博客 3万+

量化交易新手入门:从零开始搭建你的第一个Python交易策略(附完整代码)

本文为量化交易新手提供从零开始搭建Python双均线策略的完整指南,涵盖环境配置、数据获取、策略实现及风险管理等关键步骤。通过详细的代码示例和实践建议,帮助读者快速掌握量化交易的核心技术,并避免常见陷阱。文章特别强调Python在量化交易中的技术革新优势,适合希望进入金融科技领域的初学者。

weixin_26905487的博客 444

jsp设计简单的购物车应用案例

接着,使用 `out.print()` 方法将 `str` 变量的值输出到页面上,并在输出的字符串末尾添加一个 `` 标签,以使得输出的内容能够在页面上换行显示。通过 `request.getParameter()` 方法获取表单中名为 `c1`、`c2` 和 `c3` 的参数的值,并将它们保存到会话对象中,分别使用 `session.setAttribute()` 方法将这些值存储到会话中的 `s1`、`s2` 和 `s3` 属性中。接着定义了一个字符串变量 `str`,并初始化为空字符串。

m0_63064861的博客 2038

达梦数据库与sharding-jdbc的深度适配实践

本文详细介绍了达梦数据库与sharding-jdbc的深度适配实践,包括驱动与依赖管理、核心适配实现、注册与配置等关键步骤。通过扩展shardingSphere的方式,成功实现了达梦数据库的分库分表功能,并提供了常见问题解决方案和性能优化建议,助力企业级应用高效处理海量数据。

weixin_30300225的博客 624

别再折腾虚拟机了!手把手教你用WSL2在Windows 11上安装Kali Linux(含汉化与图形界面)

本文详细介绍了如何在Windows 11上通过WSL2安装和配置Kali Linux,包括汉化与图形界面设置。通过WSL2,用户可以享受接近原生性能的Linux体验,同时保持与Windows系统的无缝集成,特别适合网络安全爱好者和开发者。文章还提供了常见问题解决和性能优化建议,帮助用户高效使用Kali工具集。

weixin_42525369的博客 323

【购物车项目】代码+页面+连接数据库

主界面 个人中心界面 , 数据库表设计 就不多说,直接上代码 他们的顺序是register.jsp→login.jsp→index.jsp→dogwc.jsp→index.jsp register.jsp和doregister.jsp <%@ page language="java" contentType="text/html; charse...

全栈 8789

N32G003学习——第九章 第三节1 串口 发送

经过第九章前2节的学习,基础打下之后,开始敲代码。

qq_34525008的博客 1034

基于Java、Jsp实现购物车的功能

先看效果图: 实现代码: index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </he..

有没有料,进来看看就知道! 4895

基于FreeRedis实现的.NET Redis客户端缓存缓存键条件优雅过滤

在.NET开发中,使用Redis作为缓存解决方案是很常见的。FreeRedis是一个功能强大的Redis客户端库,它提供了丰富的功能和灵活性,使我们能够轻松地与Redis进行交互。在本文中,我们将探讨如何使用FreeRedis实现缓存键条件的优雅过滤,以提高缓存的效率和准确性。

RzuScala的博客 329

ZYNQ系列PS侧和PL侧DDR3或DDR4在AD(Altium Designer 25)中的layout布线规则约束

DDR3或DDR4的PCB布线规则通常有相对固定的要求,对应的,在PCB设计时有固定的约束设置。

FPGA艺术家的博客 790

培训目录

李绪成的一亩三分地 1595

【unity实战】Cinemachine虚拟相机实战,使用InputSystem+Cinemachine+CharacterController复刻各种主流游戏的相机控制

这里主要是探讨如何使用InputSystem+Cinemachine+CharacterController复刻各种主流游戏的相机控制,我们主要专注Cinemachine实战效果,所以并不会深入讨论Cinemachine和CharacterController比较细节的参数介绍。注意:前面为了测试方便,我还是先用的旧的输入系统代替InputSystem【推荐100个unity插件之10】Unity最全的最详细的Cinemachine(虚拟相机系统)介绍,详细案例讲解,快速上手。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3751

JavaWeb(JSP+Servlet)视频课程-刘英杰-专题视频课程

通过Session实现购物车 EL表达式 JSTL标签 过滤器 监听器

l363130002的专栏 256

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

视频教程-JSP+Servlet实战视频课程-Java

JSP+Servlet实战视频课程 Java讲师,多年培训经验,曾参与开发过...

weixin_27079161的博客 438

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

视频教程-IDEA版JavaWeb从入门到精通之项目第六、七阶段第14天-Java

IDEA版JavaWeb从入门到精通之项目第六、七阶段第14天 张长志技术全...

weixin_34502057的博客 161

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

基于JSP的网上甜品买卖系统的设计与实现

近年来,随着互联网的普及和电子商务的快速发展,越来越多的传统商业活动正在向线上转移。而在线上购买甜品这一传统商业活动也受到了影响。在这种背景下,开发一款基于JSP的网上甜品买卖系统,已经成为了刚需。 本文基于B/S结构的,主要对网上甜品买卖系统的构建流程进行介绍,其主要包括需求分析、详细设计、系统实现等重要部分组成,在此基础上构建的系统可应用到实际的网上甜品买卖系统业务中。本系统的主要特点在于将JSP应用到网上甜品买卖系统中,JSP的引入可提高系统开发效率,最终实现的系统具备运行稳定易用以及实用的特点。论文

yvonneking1118的博客 1174

大本营半年总结(115篇文章)

去年9月21日加入学生大本营,今天3月21日,刚好半年。 快啊! 有太多想说的话,......,下面是这些本年来文章的目录。   1、Java基础系列   Java基础:第四十一讲 this和super Java基础:第四十讲 向上转型和强制类型转换 Java基础:第三十九讲 多态 Java基础:第三十八讲 抽象类与抽象方法 Java基础:第三十七讲 成员方法的继承与覆盖 J...

李绪成的一亩三分地 2625

视频教程-JavaWeb外卖点餐系统典型模块开发-Java

JavaWeb外卖点餐系统典型模块开发 计算机软件理论硕士毕业,有十几年企业...

weixin_34667545的博客 552

【基于Web的网上书城——开题报告 分享(仅供参考呀)

面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】96道前端面试题:常用算法面试题:内容主要包括HTML,CSS,JavaScript,浏览器,性能优化。

2401_84434086的博客 722

java/jsp/ssm果蔬信息管理系统【2024年毕设】

根据以上对系统功能模块的划分和设计,可以得到系统功能模块图如图4-4所示,该图给出了详尽的模块划分和模块组织结构,能够直观展现系统的功能结构关系。springboot基于JEE平台springboot技术的订餐系统。springboot基于微信小程序的古诗词在线学习系统的设计与实现。springboot基于springboot的桌游信息管理系统。springboot基于微信小程序的Linda大学生竞赛平台。springboot基于JAVA技术的旅游信息交互系统。

光冯毕设程序 132

java/jsp/ssm疫情时期在线物资订购系统的实现【2024年毕设

管理员模块主要针对整个系统的管理进行设计,提高了管理的效率和标准。springboot基于springBoot+mybits的资源回收。springboot基于spring的物业管理系统的设计与实现。springboot基于数据可视化的云山川景点日推交流平台。springboot微信小程序的治安处罚法条查询系统。ssm基于微信小程序的涉疫人员信息系统的设计与实现。springboot基于MVVM的疫情物资管理系统。springboot基于安卓的校园周边美食汇。springboot学生综合成绩测评系统。

sheji229的博客 914

《Java Web程序设计基础教程》简介

本书是关于Java Web开发的基础教程,共分15章。第1章介绍如何构建Java Web应用;第2、3章介绍如何解决Java Web应用的输入和输出问题;第4~6章对登录功能进行了3次重构,这也是Java Web技术的3个发展阶段,并重点介绍了MVC模式;第7~10章进一步强化MVC模式的运用,并介绍了数据库的常用操作以及分页显示和连接池等内容;第11~13章介绍了Java Web应...

Java Web 开发教程 389
上一篇: JSP培训(13)——异常处理
下一篇: JSP培训(15)——购物车实例(下)及小结
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值