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

jsp购物车实验报告 主要是对购物车实验报告的总结http://passport.youkuaiyun.com/ActivateUser.aspx?UserName=meimei686998&Code=xmnY6NFnS02IFtFAT7pnl3Eao7onY4FViAh1001diRcsBIfP6xWTnJEHw1WezmY6j7mgBevj7meKtT8NCXmnmWJ%2fjLnJ%2bhSf 立即下载

主要内容:
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(公开的聊天室)
系列培训笔记到此结束。

JSP培训目录:

JSP培训(1)——概述
JSP培训(2)——运行原理、文档结构、简单输入输出
JSP培训(3)——客户端验证、常用输出方式、JSTL基本用法
JSP培训(4)——实例:登录功能、jsp:forward标签、jsp:include标签、include指令、EL、c:if
JSP培训(5)——使用JavaBean完成业务逻辑
JSP培训(6)——使用Servlet作为控制器实现MVC模式
JSP培训(7)——使用JDBC完成动态验证、采用MVC完成数据查询
JSP培训(8)——添加功能和分页显示
JSP培训(9)——使用MVC模式完成删除和修改功能
JSP培训(10)——使用JavaBean封装对数据库的访问、连接池的配置和使用
JSP培训(11)——Java Web中的安全控制
JSP培训(12)——Java Web应用国际化
JSP培训(13)——异常处理
JSP培训(14)——购物车实例(上)
JSP培训(15)——购物车实例(下)及小结


本人联系方式:lixucheng@dl.cn
http://blog.youkuaiyun.com/javaeeteacher
参考教材:《Java Web程序设计基础教程》

javaBean+EL+JSTL制作的购物车 实例——jsp 无脚本技术实现的购物车。利用javaBena EL表达式 和JSTL 标准标签实现jsp无脚本技术实现的购物车,拥有详细的代码和解释! 立即下载

相关推荐

jstl实现购物车

jsp购物车,用jstl代替原来jsp中引入繁琐的java代码巴巴爸爸

jsp购物车思路

<br />两种实现购物车的思路:<br />1.使用List和Map实现购物车。<br />a)购物车的增加功能:<br />在进行购物时先从session中取出list看是否为空?<br />如果为null表示第一次购买物品,需要new一个list对象,然后把购物的商品的信息储存到新new出来的一个map对象中,将这个map对象整体存储到list中,在将list存储到session中即可。<br />如果不为null表示,本次购买商品之前已经购买过商品了,可以取出list中商品进行遍历,在遍历出list

有时间的时候在这里和大家分享活着的快乐! 2338

手把手教你用AirSim和Unreal4在Ubuntu上创建自定义无人机仿真场景

本指南详细介绍了如何在Ubuntu系统上使用AirSim和Unreal Engine 4搭建高精度无人机仿真环境。从硬件配置、驱动安装到Unreal Engine编译和AirSim集成,手把手教你创建自定义场景,适用于算法验证和开发测试。

y7z8a的博客 258

java cart_Cart.java

package shop;import java.util.ArrayList;//201621123086 张韵弢class Commodit{Goods goods;int num;public Commodit(Goods g , int n){this.goods = g;this.num = n;}public double goodsfee(){return this.goods.pr...

weixin_29172201的博客 202

告别过热焦虑:用Ansys Icepak给你的电子设备做个“水冷体检”(附冷板案例全流程)

本文详细介绍了如何利用Ansys Icepak进行电子设备水冷系统的热仿真分析,帮助工程师解决设备过热问题。通过冷板案例全流程演示,展示了从几何处理、材料设定到求解器设置和后处理的关键步骤,提升散热设计效率与准确性。

weixin_29299807的博客 441

TouchGFX在STM32上的移植全过程:超详细版指南

深入讲解将TouchGFX集成到STM32开发环境的每一步,涵盖配置、驱动适配与UI调试。无论是初学者还是进阶开发者,都能快速掌握TouchGFX在嵌入式平台的应用技巧。

weixin_42443533的博客 600

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

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

qq_59477257的博客 1781

图形化界面无限转圈?CentOS 7的SELinux避坑指南(附命令行修复实录)

本文详细解析了CentOS 7图形界面启动时无限转圈或卡在'starting switch root'的故障原因,主要与SELinux安全策略冲突有关。提供了三种修复方案:临时禁用SELinux、重装策略包和精细调整策略,并分享了长期维护建议,帮助用户平衡系统安全性与可用性。

potato的博客 799

AI教育图解生成:技术突破与教学实践

教育图解作为知识可视化的重要工具,在STEM教育中承担着概念传达的关键作用。传统生成式AI在创作艺术图像时表现出色,但在需要严格准确性的教育场景中常出现概念失真、逻辑错误等问题。通过融合知识图谱约束与多阶段验证流程,新一代AI图解生成系统实现了学科知识的准确可视化表达。技术方案中,Latent Diffusion模型负责初始构图生成,CLIP模型进行语义对齐验证,学科专用判别器则确保符合物理/生物等领域的专业规则。实际教学测试表明,这类系统能显著提升学生的概念记忆准确率和知识迁移能力,特别在光学折射、细胞结

weixin_30423977的博客 1125

CSP-J 初赛模拟卷1 题解

只有一棵子树有后继,其他的都是叶结点才能保证树的深度最大,此时还剩(n-5)个结点,最后加上2,得到(n-3),即为答案。题解:先修改p的指针域,让它的左指针域指向q,然后再让q的右指针域赋值给p的右指针域,再然后修改q的右指针域使其指向p,最后需要改变的指针域就是原先q结点的后继节点的左指针域内容。设n个元素的入栈序列是1,2,3,...,n,出栈序列为p1,p2,...,pn,若p1=n,则pi(1≤i≤n)的值为(1)输入的三个数中,第二个数应是[0,11]上的整数,否则会出现数组越界的问题。

Sat77GryHp_Pro的博客 2805

高效计算斐波那契数列的C++实现及源码

斐波那契数列是一个非常经典的数学问题,通常递归方式计算斐波那契数列的时候会有很大的时间复杂度问题。首先,我们需要了解斐波那契数列的定义:斐波那契数列是指前两个数都为1,从第三个开始每个数都等于它前面两个数之和。因此,斐波那契数列的前几项为:1、1、2、3、5、8、13、21……在这个代码中,我们首先判断n是否特殊情况(即n等于0、1、2),然后通过循环计算得出对应的斐波那契数列值。通过这个例子,我们可以发现使用C++语言实现高效斐波那契数列计算的代码简单、易懂,并且时间复杂度相比递归方式有了很大的提升。

TechInk的博客 548

JSP 购物车相关问题

<br />我的web程序中,购物车页面刷新后商品数量会递增,我在网上找了一天都找不到答案,<br />希望这里的大哥,大侠们,给小弟弟解决下,在这里重谢啦.

wadadsdsadad的专栏 377

SCADA|KIO程序导出变量错误处理办法

雷工在使用KingSCADA3.52软件导出KIO变量时,遇到导出Excel格式文件报错的问题,错误提示为“ADODB.Connection未找到提供程序”。经过咨询技术人员,发现该功能需要安装Office软件,并与已安装的WPS软件兼容。雷工随后安装了Office2021版本,并进行了兼容性设置。安装过程中遇到无法启动的问题,通过删除安装目录、清理注册表、使用卸载软件和重启电脑等方法解决。安装完成后,雷工在WPS中设置了与Microsoft Office2003兼容的模式,最终成功解决了导出变量时的问题。

做有价值的事,积累有价值的笔记! 957

培训目录

李绪成的一亩三分地 1595

当启动容器的时候提示:exec format error?如何解决问题

Docker容器出现"exec format error"的主要原因是架构不兼容(如ARM设备运行x86镜像)。解决方案包括:1)匹配镜像与宿主机架构;2)构建时指定平台;3)安装QEMU模拟器;4)修复文件权限和格式;5)验证基础镜像兼容性。排查流程应从检查架构匹配开始,逐步验证权限、解释器和换行符等问题。建议优先使用多架构镜像,构建时明确指定平台,并使用buildx工具生成多平台镜像。调试时可进入容器手动验证文件格式和兼容性。

weixin_39291964的博客 2721

计算机控制技术及应用

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

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

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

l363130002的专栏 256

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

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

李绪成的一亩三分地 2625

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

ck3027的博客 1404

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

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

weixin_27079161的博客 438

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

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

yvonneking1118的博客 1174

《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培训(14)——购物车实例(上)
下一篇: 培训目录
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值