JSP培训(15)——购物车实例(下)及小结

主要内容:
l 完成购物车的其他基本功能;
l 生成订单;
l 小结
1、购物车的其它功能
对购物车的物品数量修改和物品删除功能是两外两个基本功能。实现过程与添加工程比较类似,这里只给出参考代码:
1.1 模型部分
文件名:CartManager.java(在上一讲的基础上修改,红色部分为添加的内容)
package javabean;
import java.util.ArrayList;
import java.util.Iterator;
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;
}
public void delete(String goodsid)
{
// 转换成 Iterator 对象
Iterator i = cart.iterator();
while(i.hasNext())
{
// 得到一个购物项
Item temp = (Item)i.next();
if(temp.getGoods().getGoodsid().equals(goodsid))
{
cart.remove(temp);
break;
}
}
}
public void update(String goodsid,int quantity)
{
Iterator i = cart.iterator();
while(i.hasNext())
{
// 得到一个购物项
Item temp = (Item)i.next();
if(temp.getGoods().getGoodsid().equals(goodsid))
{
temp.setQuantity(quantity);
break;
}
}
}
}
1.2 修改视图部分
文件名: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>
<form action="processCart">
<input type="hidden" name="goodsid" value="${item.goods.goodsid}">
<td>${item.goods.goodsid}</td>
<td>${item.goods.goodsname}</td>
<td>${item.goods.price}</td>
<td><input type="text" name="quantity" value="${item.quantity}"></td>
<td><input type="submit" name="action" value=" 修改 "></td>
<td><input type="submit" name="action" value=" 删除 "></td>
</form>
</tr>
</c:forEach>
</table>
1.3 控制器
删除和修改功能使用相同的控制器,会根据提交按钮的值确定要完成的功能,参考代码如下:
文件名:ProcessCart.java
package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javabean.*;
import java.util.*;
public class ProcessCart extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
//response.setContentType("text/html;charset=gb2312");
//PrintWriter out = response.getWriter();
try{
// request.setCharacterEncoding("gb2312");
// 得到要添加的物品的编号
String goodsid = request.getParameter("goodsid");
// 得到执行命令:删除还是修改
String action = request.getParameter("action");
action=new String(action.getBytes("8859_1"));
//out.println(action);
String quantity=null;
if(action.equals("修改"))
{
quantity = request.getParameter("quantity");
}
// 创建JavaBean对象
CartManager cartManager=new CartManager();
// 得到session对象
HttpSession session = request.getSession(true);
// 得到购物车对象
ArrayList cart = (ArrayList)session.getAttribute("cart");
// 用cart初始化cartManager
cartManager.setCart(cart);
if(action.equals("修改"))
{
cartManager.update(goodsid,Integer.parseInt(quantity));
}else
{
cartManager.delete(goodsid);
}
// 把购物车重新存到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);
}
}
2、生成订单
如果用户购物完成会下订单,通常需要输入个人的送货信息等,然后把订单信息存储到数据库中。这里这介绍如何组织信息,存储信息的过程不再介绍。
需要两张表:
l 订单表
l 订单明细表
订单表中信息:
l 订单号: 日期+流水号,通常作主键
l 订单的发出者:通常从session中获取信息 或者 让用户输入(没有登录的情况下)
l 订单的日期:
l 订单的状态:
l 付款方式
l 送货地址
l 联系电话
l 接收人
订单明细表(订单号和物品编号作为联合主键):
l 订单号
l 物品的编号
l 该物品的数量
在完成订单添加的时候,最好能进行事务处理。
3、小结
整个JSP培训基本上按照MVC模式进行,自己在完成任何功能的时候都可以按照这个思路来做。
3.1 MVC思路分析
MVC:对于每个功能,都分成3部分考虑。
l 先考虑v:表示试图,与人交户,分别输入和输出。
l M:模型,通常使用JavaBean编写,对于每个功能实际上对应的一个方法(或者多个方法),应该考虑整个方法执行的时候需要的条件(方法的输入),如何反馈(返回值类型和异常类型),具体功能使用Java代码实现。
l C:记住4句话:
n 获取请求信息:request.getParameter方法,getParameterValues方法
n 调用JavaBean:创建对象、实例化、初始化、调用方法
n 传值:request.setAttribute
n 转向: RequestDispatcher或者response.sendRedirect方法
因为控制器的功能非常固定,所以掌握上没有难度。而模型部分属于Java代码,与JSP语法没有太大关系,所以对读者来说,学习JSP的难度主要在视图部分。
3.2 输入和输出
输入:
l 最基本的方式:表单提交,使用表单元素提交信息,通过form的action属性指定处理文件(控制器)。比较典型的隐藏域的使用(修改信息、删除)。
l 超链方法:典型的用法,就是使用“?”传递参数,例如分页显示、删除(超链方式)。
l 通过地址栏。
这些也非常固定。
输出:
l 静态信息的输出:表头,直接输出
l 单个对象:例如user,使用${user.属性名}输出
l 集合对象:<c:forEach>标签输出
l 错误信息,包括提示信息:${error}
l 特定条件下的信息输出:<c:if>标签处理
这些相对比较灵活,主要是JSTL和EL的灵活使用。所以需要把JSTL和EL掌握好。
3.3 文件之间的关系
静态:文件之间的关联关系(多次请求之间):按钮提交、超链、地址栏输入
动态:文件之间的关系(一次请求):<jsp:forward> <jsp:include> response.sendRedirect RequestDispatcher <%@ include file=”” %>。
3.4 信息的存储:
l 持久存储:就是使用数据库存储,主要使用JDBC技术(O/R映射,JPA)。
l 临时存储:内存存储,request(MVC模式传值)、session(登录用户的信息、购物车信息)、appliction(公开的聊天室)
系列培训笔记到此结束。
本人联系方式: lixucheng@dl.cn
JavaScript课程设计实训大作业:购物网站(含源代码+运行截图+实训报告) 基本功能: 网站显示商品分类和商品信息,提供搜索商品、浏览商品的功能; 用户能够注册后购物,查看订单、购物车和个人信息; 管理员有管理商品和用户的功能。 实现效果: 图片放大特效,浮动广告,文字滚动,商品秒杀活动,用户注册验证等。 1.1功能介绍 基本实现了网站显示商品分类和商品信息,提供搜索商品、浏览商品的功能;注册和登录,查看订单、购物车和个人信息注册验证;图片放大特效,浮动广告,弹窗广告,文字滚动,商品秒杀活动等。 1.2开发技术 综合运用HTML+CSS+JavaScript技术。 2.1 系统模块划分 网页的模块主要由主页、栏目页、商品详情页、轮播页、个人信息登录页面、秒杀页、购物车、注册和登录、咨询跳转到微信和QQ页、流动广告、弹窗广告等 立即下载

相关推荐

Python pydub实现语音停顿切分

将pcm文件批量处理成wav文件 import wave import os filepath = "data/" # 添加路径 filename = os.listdir(filepath) # 得到文件夹下的所有文件名称 #f = wave.open(filepath + filename[1], 'rb') #print(filename) for i in range(len(fi...

wangqianqianya的博客 1万+

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万+

【Stata双重差分模型】双重差分DID的具体操作步骤

本案例将详细阐述如何使用双重差分法进行实证分析,并展示具体的STATA操作代码。

a519573917的博客 2万+

jsp session简易购物车

用几个jsp制作一个简易的购物车,其中有计算机类图书购买窗口,历史类图书购买窗口,购书车列表窗口。

ximifa的博客 2335

别再乱调栅极电阻了!手把手教你用示波器调试FOC驱动MOS管,避开EMC和震荡坑

本文详细介绍了FOC驱动中MOS管栅极参数的精准调试方法,涵盖示波器配置、波形特征分析及栅极电阻选型策略。通过实战案例和工程经验,帮助工程师有效解决EMC和震荡问题,提升驱动电路稳定性和效率。

weixin_28728495的博客 504

三菱PLC通信库大比拼:手把手教你用C#实现最高效的McProtocol数据读写

本文深入比较了三菱PLC通信库的性能,重点介绍了如何使用C#高效实现McProtocol数据读写。通过实测数据对比HslCommunication、McProtocol-next和自定义方案的优劣,提供优化技巧和代码示例,帮助开发者在工业自动化场景中提升通信效率。

m0n1o2p的博客 259

jsp实现购物车

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、案例演示二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、案例演示 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import m.

qq_52108058的博客 4630

用迅为RK3588开发板DIY无人机飞控:从电路设计到PID调参全记录

本文详细记录了使用迅为RK3588开发板DIY无人机飞控的全过程,从硬件选型、PCB设计到实时系统构建和PID调参。RK3588核心板凭借其强大的AI算力和丰富接口,成为高性能无人机控制解决方案的理想选择。文章还分享了视觉导航系统集成和实际飞行测试经验,为硬件爱好者提供实用参考。

weixin_29053577的博客 434

基于JSP内置对象的购物车实现

基于JSP内置对象的购物车实现

qq_59477257的博客 1781

基于STM32设计的个人健康检测仪(华为云IOT)(191)

本系统采用华为云物联网平台实现数据云端存储与分析,并通过自研手机APP提供远程监控界面,让用户无论身处何地都能及时掌握自身的健康数据,为用户提供个性化的健康管理方案,同时也为医疗机构提供了便捷的数据获取途径,助力实现智能化、精细化的医疗服务。

1679

YOLOv11改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)

为了弥补现有 IoU 损失在不同检测任务中泛化性弱和收敛速度慢的问题,·Inner-IoU·通过引入比例因子 “ratio” 来控制辅助边界框的尺度大小,利用不同尺度的辅助边界框来计算损失,从而加速边界框回归过程。

Limiiiing的博客 3893

培训目录

李绪成的一亩三分地 1595

手把手教你在openclaw中白嫖英伟达羊毛调用GLM5/Minimax2.1/Kimi K 2.5等模型

本文介绍如何在OpenClaw中免费调用英伟达平台的GLM5、Minimax2.1和Kimi K2.5等模型。通过在openclaw.json配置文件中添加NVIDIA的API信息,设置免费模型参数(如contextWindow和maxTokens),并执行简单命令即可切换默认模型。该方法可节省token消耗成本,最后需重启gateway使配置生效。文中还提供了使用其他API平台时的配置模板。

Science prince的博客 5103

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

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

l363130002的专栏 256

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

李绪成的一亩三分地 2625

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

weixin_27079161的博客 438

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jsp动漫模型商城的设计与实现u5448

jsp动漫模型商城的设计与实现u5本系统(程序源码数据库调试部署开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能开题报告内容。

ck3027的博客 1404

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

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

yvonneking1118的博客 1174

IT培训避坑指南:如何识别“宏软高科”类机构的套路与陷阱

在信息技术领域,职业转型与技能提升是许多开发者关注的焦点,而IT培训机构作为常见的知识服务提供方,其商业模式往往建立在信息不对称之上。从技术原理上看,这类机构常利用认知偏差进行营销包装,例如通过名称联想制造品牌错觉,或使用模糊的“保就业”话术吸引学员。其技术价值在于能否提供符合当前企业需求的、系统化的课程体系与实战项目,而非陈旧技术的简单堆砌。在实际应用场景中,求职者需对培训机构的课程大纲、技术栈版本、讲师背景及往期学员反馈进行深度技术尽调,例如核查Spring Boot、Vue等主流框架的版本是否滞后,评

weixin_34290631的博客 754

《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 开发教程 390

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

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

weixin_34667545的博客 552
上一篇: JSP培训(14)——购物车实例(上)
下一篇: 基于Struts技术的购物车的实现
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值