項目名稱:/cookieDemo2Record
需求:
模擬用戶在網上商城,瀏覽商品,同時顯示商品的瀏覽記錄
1.查詢所有商品頁面-index.jsp/index.html
a.查詢所有商品的按鈕-----FindAllBooksServlet.java-com.ghsy.servlet
2.顯示商城的商品
a.用bean存儲商品-com.ghsy.domain
b.db包中的方法構造商品數據-com.ghsy.db
c.用jsp頁面顯示商品的信息-show.jsp
1.用表格列表的方式顯示商品的信息。
2.表格的最後一個字段,添加查詢詳情----FindBookByIDServlet.java-com.ghsy.servlet
3.查詢緩存,顯示已經查看過的列表在所有商品信息的下方
3.記錄查詢記錄
a.點擊查詢詳情按鈕,顯示商品的詳細信息--showDetial.jsp
b.保存已經查詢過的商品信息到緩存中
緩存的選擇-cookie
c.在顯示商品的詳情頁,添加返回按鈕,返回所有商品列表頁
d.回到商品列表頁(回到上面的2,所以2中需要添加獲取緩存信息,並顯示)
項目目錄結構:
項目源碼:
index.jsp
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/cookieDemo2Record/FindAllBooksServlet">查詢所有</a>
</body>
</html>
show.jsp
<%@page import="java.util.HashMap"%>
<%@page import="com.ghsy.domain.Book"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>所有商品信息</h3>
<table border="1">
<tr>
<td>編號</td>
<td>書名</td>
<td>作者</td>
<td>價格</td>
<td>詳情</td>
</tr>
<%
Map<String,Book> bookMap=(Map<String,Book>)request.getAttribute("bookMap");
for(Map.Entry<String,Book> entry:bookMap.entrySet()){
Book book=entry.getValue();
%>
<tr>
<td><%=book.getId() %></td>
<td><%=book.getTitle() %></td>
<td><%=book.getAnthor() %></td>
<td><%=book.getPrice() %></td>
<td><a href="/cookieDemo2Record/FindBookByIDServlet?id=<%=book.getId()%>">點擊詳情</a></td>
</tr>
<%
}
%>
</table>
<h3>瀏覽的商品記錄:</h3>
<%
String bookCacheIds=null;
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
if("bookCacheIds".equals(cookie.getName())){
bookCacheIds=cookie.getValue();
System.out.println("已經查詢過的商品的id"+bookCacheIds);
out.print("<br>"+bookCacheIds+"<br>");
}
}
}
%>
</body>
</html>
showdetails.jsp
<%@page import="com.ghsy.domain.Book"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>詳細信息:</h3>
<%
Book book=(Book)request.getAttribute("book");
%>
<table>
<tr>
<td><%=book.getId() %></td>
<td><%=book.getTitle() %></td>
<td><%=book.getAnthor() %></td>
<td><%=book.getPrice()%></td>
<td>是有那麼一堆的描述是不是啊,給力的</td>
</tr>
<a href="/cookieDemo2Record/FindAllBooksServlet">返回</a>
</table>
</body>
</html>
BookDB.java
package com.ghsy.db;
import java.util.HashMap;
import java.util.Map;
import com.ghsy.domain.Book;
//需要提高一個能力---如何選擇數據結構
public class BookDB {
//選擇Map來存儲信息 key,value:id,
public static Map<String, Book> bookMap=new HashMap<String, Book>();
//static 代碼區域模擬商品的數據信息
static{
bookMap.put("p001", new Book("p001", "java", "leon", "98"));
bookMap.put("p002", new Book("p002", "android", "胡玉勉", "98"));
bookMap.put("p003", new Book("p003", "c#", "劉德華", "76"));
bookMap.put("p004", new Book("p004", "object c", "藏學有", "87"));
}
//獲得所有模擬數據的信心
public static Map<String, Book> getData(){
return bookMap;
}
//根據編號查詢book的詳細信息
public static Book findBookByID(String id){
Book book=null;
for(Map.Entry<String, Book> entry:bookMap.entrySet()){
if(id.equals(entry.getValue().getId())){
book=entry.getValue();
}
}
return book;
}
}
Book.java
package com.ghsy.domain;
public class Book {
private String id;
private String title;
private String anthor;
private String price;
public Book() {
super();
// TODO Auto-generated constructor stub
}
public Book(String id, String title, String anthor, String price) {
super();
this.id = id;
this.title = title;
this.anthor = anthor;
this.price = price;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAnthor() {
return anthor;
}
public void setAnthor(String anthor) {
this.anthor = anthor;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
FindAllBookServlet.java
package com.ghsy.servlet;
import java.io.IOException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ghsy.db.BookDB;
import com.ghsy.domain.Book;
public class FindAllBooksServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//test
System.out.println("doGet() FindAllBooksServlet ");
//獲取所有商品信息
Map<String,Book> bookMap=BookDB.getData();
//request 對象存儲book信息,跳轉到另一個servlet(show.jsp頁面)---共享數據操作
//直接將bookMap存儲。
request.setAttribute("bookMap", bookMap);
//跳轉
request.getRequestDispatcher("show.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
FindBookByIdServlet.java
package com.ghsy.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ghsy.db.BookDB;
import com.ghsy.domain.Book;
/**
* Servlet implementation class FindBookByIDServlet
*/
public class FindBookByIDServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet FindBookByIDServlet");
String id=request.getParameter("id");
System.out.println("所查詢商品的詳情id:"+id);
Book book=BookDB.findBookByID(id);
//request 屬性存儲信息
request.setAttribute("book", book);
//對已經查詢過的商品詳情保存到cookie中
//#1.獲取本次請求的對應cookie;有可能是第一次訪問,沒有cookie哦
Cookie[] cookies=request.getCookies();
String bookCacheIds=null;
if(cookies!=null){
for(Cookie cookie:cookies){
if("bookCacheIds".equals(cookie.getName())){
bookCacheIds=cookie.getValue();
break;
}
}
}
//#2指定順序 拼寫所有id
List<String> idsList = new ArrayList<String>();
idsList.add(id);//首先添加當前的id
// #2.1 將cookie緩存數據使用逗號分隔
if(bookCacheIds != null){
String[] cookieIds = bookCacheIds.split(", ");
for(String tempid : cookieIds){
if(!tempid.equals(id)){ //當前商品id已經在第一位
idsList.add(tempid);
}
}
}
//將cookie緩存,併發送了瀏覽器端
String idsStr=idsList.toString();
System.out.println(idsStr);
Cookie cookie=new Cookie("bookCacheIds",idsStr.substring(1, idsStr.length()-1));
cookie.setPath("/");
response.addCookie(cookie);
//跳轉到詳細信息頁面
request.getRequestDispatcher("/showDetails.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}