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

在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>

  在代码中 表示商品的图片

<span style="white-space:pre"> </span>

<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方法有这句代码

<span style="white-space:pre"> </span>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;

}

}

以上是 JAVAEE model1模型实现商品浏览记录(去除重复的浏览记录)(一) 的全部内容, 来源链接: utcz.com/p/213530.html

回到顶部