欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVAEE model1模型實(shí)現(xiàn)商品瀏覽記錄(去除重復(fù)的瀏覽記錄)(一)

 更新時(shí)間:2016年11月16日 11:23:22   作者:scx_white  
這篇文章主要為大家詳細(xì)介紹了JAVAEE model1模型實(shí)現(xiàn)商品瀏覽記錄,去除重復(fù)的瀏覽記錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在javaee中Model1模型是以jsp頁(yè)面為中心的,jsp既要對(duì)瀏覽器的request做出邏輯處理(使用javabean),訪問(wèn)數(shù)據(jù)庫(kù)也要顯示出相關(guān)的頁(yè)面。
在model1模型中,沒(méi)有servlet
Model1結(jié)果圖如下:

Model1的可維護(hù)性  可擴(kuò)展性都是較差的  只適合小項(xiàng)目。

首先運(yùn)行結(jié)果

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) { 
              //循環(huán)遍歷集合 并顯示 
              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"> 
                產(chǎn)地:<%=item.getCity()%> 價(jià)格:¥ 
                <%=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> 

通過(guò)點(diǎn)擊商品的圖片  把當(dāng)前商品的id傳值給details頁(yè)面
details.jsp通過(guò)商品的id來(lái)顯示詳細(xì)商品  ,而瀏覽記錄由cookies維護(hù)

<%@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(); 
                //根據(jù)request傳來(lái)的商品id 向dao中獲得相對(duì)應(yīng)的商品對(duì)象 
                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">產(chǎn)地:<%=item.getCity()%></td> 
              </tr> 
              <tr> 
                <td id="pricename">價(jià)格:<%=item.getPrice()%> ¥</td> 
              </tr> 
              <tr> 
                <td id="pricename">價(jià)格:<%=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); 
                //重新設(shè)置cookies 
                response.addCookie(c); 
              %> 
            </table> 
          </center></td> 
 
        <td width="30%" valign="top" id="historyview"> 
          <center> 
            <table> 
              <tr> 
                <td><b>你瀏覽過(guò)的商品</b></td> 
              </tr> 
              <% 
                //根據(jù)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>產(chǎn)地:<%=historyItem.getCity()%></td> 
              </tr> 
              <% 
                } 
                } 
              %> 
            </table> 
          </center> 
        </td> 
      </tr> 
    </table> 
 
  </center> 
</body> 
</html>

dao層  負(fù)責(zé)商品在數(shù)據(jù)庫(kù)中的查詢操作

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; 
 
//商品的業(yè)務(wù)邏輯類 
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 語(yǔ)句 
      ps = conn.prepareStatement(sql); 
      rs = ps.executeQuery(); 
      // 將查詢的結(jié)果依次加入集合 
      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 { 
      // 關(guān)閉資源 
      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; 
  } 
 
  // 根據(jù)商品編號(hào)獲取商品資料 
 
  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對(duì)象初始化 
      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 { 
      // 關(guān)閉資源 
      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; 
  } 
 
  // 根據(jù)cookie 獲得瀏覽的最后三個(gè)商品 
  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])); 
        /* 
         * 首先判斷集合中是否存在當(dāng)前物品 如果存在 counts+1 多讀取一次(保證list集合中有3個(gè)對(duì)象) 不添加此物品 
         */ 
        if (list.contains(item)) { 
          counts++; 
          continue; 
        } 
        list.add(item); 
      } 
    } 
    return list; 
  } 
} 

商品的實(shí)體類 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方法  來(lái)修改比較方式(所有的item都是一個(gè)新的對(duì)象 即使兩個(gè)商品的內(nèi)容全部一樣也不會(huì)相等  。所以要修改比較方式)
因?yàn)閷?duì)于瀏覽記錄而言  我們不能通過(guò)刷新當(dāng)前商品  瀏覽記錄全部都是該商品 我們只要保證該商品在瀏覽記錄中 只有一個(gè)即可
所以在dao層中的getHistoryView方法有這句代碼

<span style="white-space:pre">       </span>if (list.contains(item)) { 
          counts++; 
          continue; 
        } 

然后是工具類
DBHelpher 單例模式獲得connection對(duì)象

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; 
  // 靜態(tài)塊代碼負(fù)責(zé)加載驅(qū)動(dòng) 
  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; 
  } 
} 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java @GlobalLock注解詳細(xì)分析講解

    Java @GlobalLock注解詳細(xì)分析講解

    這篇文章主要介紹了Java @GlobalLock注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-11-11
  • IDEA maven項(xiàng)目中刷新依賴的兩種方法小結(jié)

    IDEA maven項(xiàng)目中刷新依賴的兩種方法小結(jié)

    這篇文章主要介紹了IDEA maven項(xiàng)目中刷新依賴的兩種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java使用JMF實(shí)現(xiàn)音樂(lè)播放功能

    java使用JMF實(shí)現(xiàn)音樂(lè)播放功能

    這篇文章主要為大家詳細(xì)介紹了java使用JMF實(shí)現(xiàn)音樂(lè)播放的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java基礎(chǔ)篇之分布式版本控制工具Git

    Java基礎(chǔ)篇之分布式版本控制工具Git

    Git是一個(gè)開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項(xiàng)目版本管理。 也是Linus Torvalds為了幫助管理Linux內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件
    2021-10-10
  • 教你使用Java獲取當(dāng)前時(shí)間戳的詳細(xì)代碼

    教你使用Java獲取當(dāng)前時(shí)間戳的詳細(xì)代碼

    這篇文章主要介紹了如何使用Java獲取當(dāng)前時(shí)間戳,通過(guò)兩個(gè)java示例,向大家展示如何獲取java中的當(dāng)前時(shí)間戳,文本通過(guò)示例代碼給大家展示了java獲取當(dāng)前時(shí)間戳的方法,需要的朋友可以參考下
    2022-01-01
  • 基于線程、并發(fā)的基本概念(詳解)

    基于線程、并發(fā)的基本概念(詳解)

    下面小編就為大家?guī)?lái)一篇基于線程、并發(fā)的基本概念(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Java @RequestMapping注解功能使用詳解

    Java @RequestMapping注解功能使用詳解

    通過(guò)@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的踩坑記錄

    Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的踩坑記錄

    在某些情況下,需要在執(zhí)行新增后,需要獲取到新增行的id,這篇文章主要給大家介紹了關(guān)于Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • 持久層ORM框架Hibernate框架的使用及搭建方式

    持久層ORM框架Hibernate框架的使用及搭建方式

    Hibernate是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù),本文重點(diǎn)給大家介紹持久層ORM框架Hibernate框架的使用及搭建方式,感興趣的朋友一起看看吧
    2021-11-11
  • Java通過(guò)What、Why、How了解弱引用

    Java通過(guò)What、Why、How了解弱引用

    這篇文章主要介紹了Java通過(guò)What、Why、How了解弱引用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論