JAVAEE model1模型实现商品浏览记录(去除重复的浏览记录)(一)

110 篇文章 6 订阅

在javaee中Model1模型是以jsp页面为中心的,jsp既要对浏览器的request做出逻辑处理(使用javabean),访问数据库也要显示出相关的页面。

在model1模型中 没有servlet。

Model1结果图如下:


Model1的可维护性  可扩展性都是较差的  只适合小项目。


首先运行结果


goods.jsp

<%@page import="entity.Items"%>
<%@page import="dao.ItemsDao"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
<style type="text/css">
div {
	float: left;
	margin: 10px;
}

div dd {
	margin: 0px;
	font-size: 10pt;
}

div dd.dd_name {
	color: blue;
}

div dd.dd_city {
	color: #000;
}
</style>
</head>

<body>
	<center>
		<h1>商品展示</h1>
		<hr>
		<table width="800" height="60" cellpadding="0" cellspacing="0"
			border="0">
			<tr>
				<td>
					<%
						ItemsDao dao = new ItemsDao();
						ArrayList<Items> list = new ArrayList<Items>();
						//从dao中获取所有的商品  并保存到list集合中
						list = dao.getAllItems();
						if (list != null && list.size() > 0) {
							//循环遍历集合  并显示
							for (int i = 0; i < list.size(); i++) {
								Items item = list.get(i);
					%>
					<div>
						<dl>
							<dt>
								<a href="details.jsp?id=<%=item.getId()%>"><img
									src="images/<%=item.getPicture()%>" width="120" height="90"
									border="1" />
								</a>
							</dt>
							<dd class="dd_name"><%=item.getName()%></dd>
							<dd class="dd_city">
								产地:<%=item.getCity()%>  价格:¥
								<%=item.getPrice()%></dd>
						</dl>
					</div> <%
 	}
 	}
 %>
				</td>

			</tr>
		</table>
	</center>
</body>
</html>

在代码中 表示商品的图片

								<a href="details.jsp?id=<%=item.getId()%>"><img
									src="images/<%=item.getPicture()%>" width="120" height="90"
									border="1" />
								</a>

通过点击商品的图片  把当前商品的id传值给details页面
details.jsp通过商品的id来显示详细商品  ,而浏览记录由cookies维护

<%@page import="org.apache.taglibs.standard.tag.common.xml.ForEachTag"%>
<%@page import="entity.Items"%>
<%@page import="dao.ItemsDao"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<style type="text/css">
#historyview {
	border: 1;
	background: #EAEAEE;
}

#historyview td {
	font-size: 10px;
}
</style>
</head>

<body>
	<center>
		<h1>商品详情</h1>
		<hr>
		<table width="750" border="0" cellpadding="0" cellspacing="0">
			<tr>
				<td width="70%">
					<center>
						<table border="0">
							<%
								ItemsDao dao = new ItemsDao();
								//根据request传来的商品id 向dao中获得相对应的商品对象
								Items item = dao.getItemById(Integer.parseInt(request
										.getParameter("id")));
								if (item != null) {
							%>
							<tr>
								<td rowspan="5"><img src="images/<%=item.getPicture()%>"
									width="200" height="150"></td>
							</tr>
							<tr>
								<td><b><%=item.getName()%></b>
								</td>
							</tr>
							<tr>
								<td id="cityname">产地:<%=item.getCity()%></td>
							</tr>
							<tr>
								<td id="pricename">价格:<%=item.getPrice()%> ¥</td>
							</tr>
							<tr>
								<td id="pricename">价格:<%=item.getPrice()%> ¥</td>
							</tr>
							<%
								}
								//将该商品加入cookies
								Cookie[] cookies = request.getCookies();
								String historyStr = "";
								for (Cookie c : cookies) {
									if (c.getName().equals("history")) {
										historyStr = c.getValue();
									}
								}
								historyStr += item.getId() + ",";
								Cookie c = new Cookie("history", historyStr);
								//重新设置cookies
								response.addCookie(c);
							%>
						</table>
					</center></td>

				<td width="30%" valign="top" id="historyview">
					<center>
						<table>
							<tr>
								<td><b>你浏览过的商品</b></td>
							</tr>
							<%
								//根据cookie  从dao获取最后浏览的三次记录 并保存到list集合
								ArrayList<Items> historyItems = dao.getHistoryView(historyStr);
								if (historyItems != null && historyItems.size() > 0) {
									//遍历集合
									for (Items historyItem : historyItems) {
							%>
							<tr>
								<td><a href="details.jsp?id=<%=historyItem.getId()%>"><img
										src="images/<%=historyItem.getPicture()%>" width="100"
										height="80" border="1"> </a></td>
							</tr>
							<tr>
								<td><b><%=historyItem.getName()%></b>
								</td>
							</tr>
							<tr>
								<td>产地:<%=historyItem.getCity()%></td>
							</tr>
							<%
								}
								}
							%>
						</table>
					</center>
				</td>
			</tr>
		</table>

	</center>
</body>
</html>


dao层  负责商品在数据库中的查询操作

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import util.DBHelper;
import entity.Items;

//商品的业务逻辑类
public class ItemsDao {
	// 获得所有商品信息
	public ArrayList<Items> getAllItems() {
		// 商品集合
		ArrayList<Items> list = new ArrayList<Items>();
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		try {
			conn = DBHelper.getConnection();
			String sql = "select * from items";// sql 语句
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			// 将查询的结果依次加入集合
			while (rs.next()) {
				Items item = new Items();
				item.setId(rs.getInt("id"));
				item.setName(rs.getString("name"));
				item.setCity(rs.getString("city"));
				item.setPrice(rs.getDouble("price"));
				item.setPicture(rs.getString("picture"));
				item.setNumber(rs.getInt("number"));
				list.add(item);
			}
		} catch (SQLException e) {

			e.printStackTrace();
		} finally {
			// 关闭资源
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

		}
		return list;
	}

	// 根据商品编号获取商品资料

	public Items getItemById(int id) {
		Items item = new Items();
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "select * from items where id = ?";
		try {
			con = DBHelper.getConnection();
			ps = con.prepareStatement(sql);
			ps.setInt(1, id);
			rs = ps.executeQuery();
			// 如果找到该id 为item对象初始化
			if (rs.next()) {
				item.setId(rs.getInt("id"));
				item.setName(rs.getString("name"));
				item.setCity(rs.getString("city"));
				item.setPrice(rs.getDouble("price"));
				item.setPicture(rs.getString("picture"));
				item.setNumber(rs.getInt("number"));
			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 关闭资源
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		return item;
	}

	// 根据cookie 获得浏览的最后三个商品
	public ArrayList<Items> getHistoryView(String cookie) {
		ArrayList<Items> list = new ArrayList<Items>();
		String ids[] = cookie.split(",");
		int counts = 3;// 浏览的最后三条记录
		if (ids != null && ids.length > 0) {
			for (int i = ids.length - 1; i >= 0 && i > ids.length - counts - 1; i--) {
				Items item = getItemById(Integer.parseInt(ids[i]));
				/*
				 * 首先判断集合中是否存在当前物品 如果存在 counts+1 多读取一次(保证list集合中有3个对象) 不添加此物品
				 */
				if (list.contains(item)) {
					counts++;
					continue;
				}
				list.add(item);
			}
		}
		return list;
	}
}

商品的实体类 Items

package entity;

public class Items {
	private int id;
	private String name;
	private String city;
	private double price;
	private int number;
	private String picture;

	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 String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	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;
	}

	public String getPicture() {
		return picture;
	}

	public void setPicture(String picture) {
		this.picture = picture;
	}
	
	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		return this.getId()+this.getName().hashCode();
	}
	@Override
	public boolean equals(Object obj) {
		if(this==obj)
		{
			return true;
		}
		else
		{
			if(obj instanceof Items)
			{
				Items item=(Items) obj;
				if(this.getId()==item.getId()&&this.getName().equals(item.getName()))
				{
					return true;
				}
			}
		}
		return false;
	}
}

在这里  重写了hasCode和equals方法  来修改比较方式(所有的item都是一个新的对象 即使两个商品的内容全部一样也不会相等  。所以要修改比较方式)

因为对于浏览记录而言  我们不能通过刷新当前商品  浏览记录全部都是该商品 我们只要保证该商品在浏览记录中 只有一个即可

所以在dao层中的getHistoryView方法有这句代码

				if (list.contains(item)) {
					counts++;
					continue;
				}


然后是工具类

DBHelpher  单例模式获得connection对象

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBHelper {
	private static final String driver = "com.mysql.jdbc.Driver";
	private static final String url = "jdbc:mysql://localhost:3306/shopping?useUnicode=true&charcterEncoding=UTF-8";
	private static final String username = "root";
	private static final String password = "123";
	private static Connection con = null;
	// 静态块代码负责加载驱动
	static {
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static Connection getConnection() {

		if (con == null) {
			try {
				con = DriverManager.getConnection(url, username, password);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return con;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值