在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()%>"><imgsrc="data: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()%>"><imgsrc="data: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="data: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><%}//将该商品加入cookiesCookie[] 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);//重新设置cookiesresponse.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()%>"><imgsrc="data: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 blocke.printStackTrace();}}if (ps != null) {try {ps.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();} finally {// 关闭资源if (rs != null) {try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (ps != null) {try {ps.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.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;}@Overridepublic int hashCode() {// TODO Auto-generated method stubreturn this.getId()+this.getName().hashCode();}@Overridepublic 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 blocke.printStackTrace();}}public static Connection getConnection() {if (con == null) {try {con = DriverManager.getConnection(url, username, password);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return con;}
}

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

  1. kettle开发篇-去除重复记录+排序记录-Day11

    前言: 今天刚好第十一天,从今天开始我们讲5节关于EXCEL的操作,昨天讲了EXCEL表的计算,今天将在计算之前,需要EXCEL表去重再去计算,避免重复数据影响我们的决策.在这就需要用到两个组件,分别 ...

  2. 【java毕业设计】基于javaEE+SSH+SqlServer的商品供应管理系统设计与实现(毕业论文+程序源码)——商品供应管理系统

    基于javaEE+SSH+SqlServer的商品供应管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于javaEE+SSH+SqlServer的商品供应管理系统设计与实现,文章末尾 ...

  3. 阿里云ACA 使用时间序列分解模型预测商品销量(三)

    本文接上一篇使用时间序列分解模型预测商品销量---计算回归的差值dQ 发表本博客的目的在于记录笔记,分享经验,无其他任何目的 计算回归的差值dQ 使用线性回归方程预测出来的是与时间无关因素对产品销量的 ...

  4. oracle 输出重复记录,ORACLE 去除重复记录

    ORACLE 去除重复记录 delete from tbl_talbe where (col1,col2,col3) in (select col1,col2,col3 from tbl_table ...

  5. SQL 去除重复、获取最新记录

    应用中常会有需要去除重复的记录,或者获取某些最新记录(如:每个用户可以答题多次,每次答题时间不同,现在要获取所有用户的最新答题记录,即每个用户取最新的一条) 使用group 和max 即可实现上述功能 ...

  6. sql 单表/多表查询去除重复记录

    sql 单表/多表查询去除重复记录 单表distinct 多表group by group by 必须放在 order by 和 limit之前,不然会报错 ********************* ...

  7. mysql查询重复用户名_mysql取出以上用户名(去除重复),score值最高的所有记录,查出重复记录...

    tt 表: 有如下数据: insert into tt values('yy1',35) ; insert into tt values('yy1',36) ; insert into tt valu ...

  8. 使用时间序列分解模型预测商品销量

    阿里云大学课程:使用时间序列分解模型预测商品销量 课程介绍: 商品销量预测是企业制定运营策略的一个重要依据,在激烈的竞争环境中,企业如何预测零售商品的销量并根据销量制定运营策略? 本课程帮助学员了解销 ...

  9. 电商网站商品模型之商品详情页设计方案 - 梦亦晓 - 博客园

    电商网站商品模型之商品详情页设计方案 - 梦亦晓 - 博客园

最新文章

  1. 家用计算机在拔下网线的情况下,为什么只有拔掉网线才可以关掉电脑
  2. 在 JavaScript 中创建 JSON 对象
  3. 3G与4G到底有何区别?
  4. 串口之GetCommState、SetCommState函数详解
  5. LeetCode 139. 单词拆分(DP)
  6. 扫描式SSD用于公式检测,代码已开源
  7. RX异常点检测算法(马氏距离)
  8. php中如何加密,PHP中的加密功能
  9. slickedit快捷键冲突问题
  10. CTCS列控系统原理--详细学习笔记
  11. 计算机第二章测试题及答案,计算机组成原理第二章练习题及答案
  12. html实现点击下载文件
  13. PVID和VID详解
  14. Linux头文件 C/C++头文件
  15. 数据结构(主席树,Bit):XTU 1247/COGS 2344. pair-pair
  16. 计算机网络时代纪录片,中国首部自媒体纪录片《生机》揭秘新世相
  17. 蓝牙BQB 认证流程
  18. Google(谷歌)高级搜索
  19. 模拟抽奖过程的C语言程序设计,C++抽奖程序实现方法
  20. 使用torch.autograd.function解决dist.all_gather不能反向传播问题

热门文章

  1. Photoshop7.0 简体中文迷你版
  2. SPC Control Chart Tools for .Net Crack
  3. 机器人Scribit_飞檐走壁的艺术家 Scribit绘画机器人
  4. ME21N 手工 采购申请转采购订单
  5. 万达金融梦醒:快钱被罚千万,小贷牌照被注销
  6. 计算机开机后报rundll,电脑开机后,显示RUNDLL
  7. 【转】那些我们不再使用的技术 - IT生活 - JavaEye新闻
  8. 基于微信小程序的电影院订票选座系统
  9. Apollo入门教程(Windows)
  10. Android ListView使用Holder优化原理