实验名称:实验四 JavaBean 应用

一、实验目的:

  1. 掌握在 JSP 页面中创建和使用 JavaBean 对象;
  2. 掌握通过 session 共享 JavaBean 对象;
  3. 掌握将集合类型数据以表格形式显示出来。

二、内容和要求:

1、实现一个简易文字版的购物车,用户可以购买、移除一件商品,也可以 清空购物车。
2、商品列表页面(productInfo.jsp)如图 4-1 所示,显示购物车页面 (showCar.jsp)如图 4-2 所示,doCar.jsp 无界面,用于处理购买、移除和清空 购物车的请求。

3、用户在 productInfo.jsp 页面单击“查看购物车”跳转到 showCar.jsp
页面;在 showCar.jsp 页面单击“继续购物”跳转到 productInfo.jsp 页面。
4、用户在 productInfo.jsp 页面单击“购买”后,保持在原页面不变;在
showCar.jsp 页面分别单击“移除”和“清空购物车”链接,也不跳转,只是更 新购物车信息。
实现要求:
(1) 创建值 JavaBean:商品类 Product.java(如图 4-3),包含商品的属 性:id,name(名称), price(价格), number(数量);

(2) 创建工具 JavaBean:购物车类 Car.java(如图 4-4),以实现购买、 移除和清空购物车等功能。

(3) 将购物车类 Car 对象保存到 session,目的是productInfo.jsp、
showCar.jsp、doCar.jsp 能共享该对象。
(4) 表格中使用的 CSS 代码及使用方法,如下代码所示:

<style type="text/css">
.tb {
border: 1px solid #0000ff;
width: 800px;
margin: 10px auto;
border-collapse: collapse; /*设置表格的边框合并为一个单一的边框*/
}
.tb th, td {
border:1px solid #0000ff;
padding:10px;
}
</style>
<table class="tb">
<tr>
<td>名称</td>
<td>价格(元/斤)</td>
<td>购买</td>
</tr>
</table>

三、实验步骤

Product.java

package shop;public class Product {private int id;private String name;private double price;private int number;public Product(int id, String name, double price, int number) {this.id = id;this.name = name;this.price = price;this.number=number;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}}

Car.java

package shop;import java.util.ArrayList;
import java.util.List;public class Car {private List<Product> list = new ArrayList<Product>();//创建Product类型的集合public List<Product> getList() {//构造list的get方法,方便car,product界面获取listreturn list;}public Car() {//Car方法利用for循环,将数组内的值赋给list集合int[] ids = { 1, 2, 3, 4 };String[] names = { "苹果", "梨子", "橘子", "香蕉" };double[] prices = { 4.1, 2.5, 3, 2.8 };int[] numbers = { 0, 0, 0, 0 };for (int i = 0; i < ids.length; i++) {Product p = new Product(ids[i], names[i], prices[i], numbers[i]);list.add(p);}}public void add(int id){//添加方法for(int i=0;i<list.size();i++){Product p=list.get(i);//for循环,将list集合里的Product类型的p一一取出if(id==p.getId()){//利用getId方法,将取出的p的id与product传入的id对比p.setNumber(p.getNumber()+1);//对比成功,就给p的number属性加1break;}}}public void remove(int id){//移除方法for(int i=0;i<list.size();i++){Product p=list.get(i);if(id==p.getId()&& p.getNumber()>0){p.setNumber(p.getNumber()-1);break;}}        }public void clear(){//清除方法for(int i=0;i<list.size();i++){Product p=list.get(i);         p.setNumber(0);//for循环,将list集合里的p的number全部置为0}       }
}

product.jsp

<%@page import="shop.Product"%>
<%@page import="shop.Car" %>
<%@page language="java" import="java.util.*" pageEncoding="utf-8"%><html>
<head>
<style>table {border-collapse: collapse;width:70%;}table, td, th{border:2px solid black;}th{background-color:green;color:white;height:35px;}td{text-align:center;vertical-align:center;height:30px;background-color:#C0C0C0;}</style>
</head><body>
<jsp:useBean id="car" class="shop.Car" scope="session"></jsp:useBean><%List<Product> list=car.getList();%>
<table><tr><th>序号</th><th>名称</th><th>价格(元/斤)</th><th>购买</th></tr><%for(int i=0;i<list.size();i++){Product p = list.get(i);//循环输出list集合里的product对象%><tr>  <td><%=p.getId()%></td><td><%=p.getName()%></td><td><%=p.getPrice()%></td><td><a href="doCar.jsp?action=buy&id=<%=p.getId()%>">加入购物车</a></td><%//<a>超链接,传递action方法,以及操作对象的ID给doCar.jsp %></tr><%}%><tr><td colspan="4"><a href="car.jsp">查看购物车</a></tr>
</table></body></html>

doCar.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@  page import="shop.Product" %>
<%@  page import="shop.Car" %>
<html><body><jsp:useBean id="car" class="shop.Car" scope="session"></jsp:useBean><%String act=request.getParameter("action");String id=request.getParameter("id");if("buy".equals(act)){car.add(Integer.parseInt(id));//把id转换成整数response.sendRedirect("product.jsp");//重定向到products.jsp界面}else if("remove".equals(act)){car.remove(Integer.parseInt(id));response.sendRedirect("car.jsp");}else if("clear".equals(act)){car.clear();response.sendRedirect("car.jsp");}    %></body>
</html>

car.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@  page import="shop.Product" %>
<%@  page import="shop.Car" %>
<html><head><style>table {border-collapse: collapse;width:70%;}table, td, th{border:2px solid black;}th{background-color:green;color:white;height:35px;}td{text-align:center;vertical-align:center;height:30px;background-color:#C0C0C0;}</style></head><body><jsp:useBean id="car" class="shop.Car" scope="session"></jsp:useBean><%List<Product> list=car.getList();%><table><tr><th>序号</th><th>名称</th><th>价格(元/斤)</th><th>数量</th><th>总价(元)</th><th>移除(-1/次)</th></tr><%double sum=0;for (int i=0;i<list.size();i++){Product p = list.get(i);sum+=p.getPrice()*p.getNumber();if(p.getNumber()!=0){%><tr>  <td><%= p.getId()%></td><td><%= p.getName()%></td><td><%= p.getPrice()%></td><td><%= p.getNumber() %></td><td><%= p.getPrice()*p.getNumber()%></td><td><a href="doCar.jsp?action=remove&id=<%=p.getId()%>">移出购物车</a></td></tr> <%} }%><tr><td colspan="6">总价(元):<%=sum %></td></tr><tr><td colspan="3"><a href="product.jsp">继续购物</a><td colspan="3"><a href="doCar.jsp?action=clear">清空购物车</a></tr></table></body>
</html>

运行结果:

添加商品

查看购物车

移除商品

清空购物车

PS:由于java精度丢失问题,实战情况下不能用double类型

四、思考题

如何在两个 JSP 页面之间传递中文数据,不出现乱码?
1、保证 编码为utf-8格式或者GBK等统一的编码支持中文的编码格式,此处是utf-8
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
2、确保server.xml中的编码为utf-8
3、Stringname=newString(request.getParameter(“name”).getBytes(“iso-8859-1”), “utf-8”);如果超链接带传参数,默认是ISO-8859-1,需要单独针对GET编码如果是通过a标签跳转的,则可以设置a标签的编码方式为charset=utf-8

互联网软件开发—— 实验四 JavaBean 应用(简易购物车)相关推荐

  1. 互联网软件开发—— 实验三 JSP 内置对象(留言板)

    实验名称: 实验三 JSP 内置对象 一.实验目的 1.掌握表单提交及页面间参数传递的方法. 2.理解页面转发与重定向之间的区别. 3.掌握 request.session 和 application ...

  2. 互联网软件开发行业的潜规则,你知道嘛?

    互联网软件开发行业的潜在规则,有很多人不明白为什么找别人开发一个程序只有几百块钱,而且还能终身免费维护,而找我们开发要几万甚至几十万. 让我为大家普及一下,你千万不要觉得那些收你几百块钱就能解决问题的 ...

  3. OUC-移动软件开发-实验5

    移动软件开发-实验5 一.实验目标 模仿微信"发现"页创建列表布局 学习使用Textview imageview.LinearLayout 二.实验步骤 1. 搭建 Java 环境 ...

  4. 移动软件开发 实验3

    移动软件开发 实验3 一. 实验目标 1.掌握视频列表的切换方法: 2.掌握视频自动播放方法: 3.掌握视频随机颜色弹幕效果. 二.实验步骤 1.创建项目 ·创建页面文件 ·删除和修改文件 ·创建其他 ...

  5. 软件开发的四个模型优缺点

    一.瀑布模型 优点 1)为项目提供了按阶段划分的检查点. 2)当前一阶段完成后,您只需要去关注后续阶段. 3)可在迭代模型中应用瀑布模型. 瀑布模型有以下缺点: 1)在项目各个阶段之间极少有反馈. 2 ...

  6. OUC-移动软件开发-实验1

    2022年夏季<移动软件开发>实验报告 姓名:陈李焘 学号:20020007003 Untitled (备注:将实验报告发布在博客.代码公开至 github 是 加分项,不是必须做的) 一 ...

  7. 互联网软件开发和企业软件开发

    听到一位朋友说当今的软件开发可以分为两个方向,一个是企业软件开发,通常表现为一个个订制的项目:另外一个是互联网开发,比如那些用户百万,千万,甚至亿万的门户网站,电子商务网站等.两个方向差异很大,几乎是 ...

  8. python入门教程软件-程序员带你十天快速入门Python,玩转电脑软件开发(四)

    本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结.本篇文章主要是基于上一篇的程序员带你十天快速入门Python,玩转电脑软件开发(三)的基础之上, ...

  9. 40岁从零开始学习软件开发,四年后我成了首席研发

    作者 | Ely 翻译 | 王强 策划 | 褚杏娟 来源 | infoQ 有人曾对我说:"如果你 35 岁时还是个程序员,那就应该开始为你的下半生寻找其他出路了.年轻一代正在迎头赶上,很快你 ...

最新文章

  1. 4514: [Sdoi2016]数字配对
  2. 基于点云的3D深度学习主干网络进展综述
  3. android APP常用的颜色及代码
  4. NameError: name 'url' is not defined django
  5. Android 第十二课 使用LitePal操作数据库(记得阅读最后面的注意事项哦)
  6. Solution 19: Fibonacci数列
  7. 分布式数据库clickhouse、tidb、palo对比
  8. SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.
  9. 刷题记录 kuangbin带你飞专题四:最短路练习
  10. 【离散数学】图论 第七章(8) 运输网络、流和割、Ford-Fulkerson定理
  11. 前端开发【WEUI框架H5网页开发】—— WEUI+Node.js+fis3 项目开发
  12. 深度步态识别综述(二)
  13. 多源数据融合算法综述
  14. Linux系统安全强化指南
  15. 软考高级系统架构设计师你想知道的全在这
  16. 数字人民币专利数激增, “区块链”领域大有可为
  17. 2022-2028全球与中国多通道光纤旋转接头(FORJ)市场现状及未来发展趋势
  18. 【Android】实现生成二维码、条形码和扫描二维码的功能
  19. SD-WAN 的架构是什么?
  20. Web前端——JSP

热门文章

  1. HEVC中的Merge Mode——x265代码getInterMergeCandidates()函数解析
  2. 信息架构和零代码应用搭建
  3. 阿里云对腾讯企业邮箱设置域名解析
  4. 膜拜,阿里内部都在学习的五大深入理解Java虚拟机PDF,简直强无敌
  5. 在Win10系统下使用与安装metis
  6. 谁“偷”走了我的雨伞
  7. 事务是什么?干什么用?
  8. 企业发放的奖金根据利润I提成
  9. 刷机大师乐蛙定制版 v3.4.0 官方版
  10. 数据迁移——技术选型