互联网软件开发— 实验四 JavaBean 应用(简易购物车)
实验名称:实验四 JavaBean 应用
一、实验目的:
- 掌握在 JSP 页面中创建和使用 JavaBean 对象;
- 掌握通过 session 共享 JavaBean 对象;
- 掌握将集合类型数据以表格形式显示出来。
二、内容和要求:
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界面获取list
return 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属性加1
break;
}
}
}
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
本文地址:https://blog.csdn.net/qq_45561313/article/details/110250644
上一篇: excel vba 高亮显示当前行代码