JavaWeb的Cookie技术显示历史商品( 信息 )浏览记录(学习方立勋老师的教程)
2016-01-12 22:11
686 查看
先上图:
package com.cookie;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 保存商品信息
* @author TS
*
*/
public class Db {
public static Map<String,Book> map = new LinkedHashMap<String,Book>();
static{
map.put("1", new Book("1","JavaWeb开发", "张三", "这是一本好书"));
map.put("2", new Book("2","Spring开发", "李四", "这是一本好书"));
map.put("3", new Book("3","Mybatis开发", "王五", "这是一本好书"));
map.put("4", new Book("4","Android开发", "赵六", "这是一本好书"));
map.put("5", new Book("5","JavaScript权威指南", "淘宝前端团队", "这是一本好书"));
}
/**
* 获取所有的书
* @return map
*/
public static Map<String,Book> getBooks(){
return map;
}
}
一、访问商品首页列表:
package com.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author TS
*
*/
@WebServlet("/productServlet")
public class ProductServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//显示所有商品列表
PrintWriter out = response.getWriter();
out.write("本网站有如下商品:<br/>");
Map<String,Book> books = Db.getBooks();
for (Map.Entry<String, Book> entry : books.entrySet()) {
Book book = entry.getValue();
out.write("<a href='/JavaWeb/productIDServlet?id="+book.getId()+"'target='_blank'>"+book.getName() +"'</a></br/>");
}
out.println("您曾经浏览过:");
//显示曾经浏览过的商品
Cookie[] cookies = request.getCookies();
for (int i = 0; cookies!=null && i < cookies.length; i++) {
if(cookies[i].getName().equals("bookHistory")){
String[] ids = cookies[i].getValue().split("\\,");
for (String id : ids) {
Book book = Db.getBooks().get(id);
out.print(book.getName()+"<br/>");
}
}
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
二、访问商品首页列表:
package com.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author TS
*
*/
@WebServlet("/productIDServlet")
public class ProductIDServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//显示单个商品详细信息
String id = request.getParameter("id");
Book book = Db.getBooks().get(id);
PrintWriter out = response.getWriter();
out.write(book.getId() + "<br/>");
out.write(book.getName()+ "<br/>");
out.write(book.getAuthor() + "<br/>");
out.write(book.getDescription() + "<br/>");
//构建Cookie发送给客户端浏览器
String cookieValue = buildCookie(id,request);
Cookie cookie = new Cookie("bookHistory",cookieValue);
cookie.setMaxAge(30*1*24*3600);
cookie.setPath("/JavaWeb"); //web站点
response.addCookie(cookie);
}
/**
* 构建Cookie发送给客户端浏览器(自多)显示3个信息
* @param id
* @param request
* @return
*/
private String buildCookie(String id,HttpServletRequest request) {
//1.没有带Cookie.bookHistory=null 1 //没有带Cookie
//2.带了Cookie.bookHistory=2,5,1 1,2,5 //带过来了Cookie,包含当前的值, 返回
//3.Cookie.bookHistory=2,5,4 1,2,5 //带来了Cookie,没有包含当前看到的值,清除最后Cookie,加入新的ID
//4.Cookie.bookHistory=2,5 1,2,5 //没有带满Cookie,把新Cookie加入到最前
String bookHistory = null;
Cookie[] cookies = request.getCookies();
for (int i = 0; cookies!=null && i < cookies.length; i++) {
if(cookies[i].getName().equals("bookHistory")){
bookHistory = cookies[i].getValue();
}
}
if(bookHistory == null){ //1.没有带Cookie.bookHistory=null
return id;
}
LinkedList<String> list = new LinkedList<String>( Arrays.asList( bookHistory.split("\\,") ) );
if(list.contains(id)){ //带过来了Cookie,包含当前的值
list.remove(id);
list.addFirst(id);
}else{ //带来了Cookie,没有包含当前看到的值,清除最后Cookie,加入新的ID
if(list.size()>=3){
list.removeLast();
list.addFirst(id);
}else{
list.addFirst(id); //没有带满Cookie,把新Cookie加入到最前
}
}
StringBuffer sb = new StringBuffer();
for (String myid : list) {
sb.append(myid+",");
}
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
package com.cookie;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 保存商品信息
* @author TS
*
*/
public class Db {
public static Map<String,Book> map = new LinkedHashMap<String,Book>();
static{
map.put("1", new Book("1","JavaWeb开发", "张三", "这是一本好书"));
map.put("2", new Book("2","Spring开发", "李四", "这是一本好书"));
map.put("3", new Book("3","Mybatis开发", "王五", "这是一本好书"));
map.put("4", new Book("4","Android开发", "赵六", "这是一本好书"));
map.put("5", new Book("5","JavaScript权威指南", "淘宝前端团队", "这是一本好书"));
}
/**
* 获取所有的书
* @return map
*/
public static Map<String,Book> getBooks(){
return map;
}
}
一、访问商品首页列表:
package com.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author TS
*
*/
@WebServlet("/productServlet")
public class ProductServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//显示所有商品列表
PrintWriter out = response.getWriter();
out.write("本网站有如下商品:<br/>");
Map<String,Book> books = Db.getBooks();
for (Map.Entry<String, Book> entry : books.entrySet()) {
Book book = entry.getValue();
out.write("<a href='/JavaWeb/productIDServlet?id="+book.getId()+"'target='_blank'>"+book.getName() +"'</a></br/>");
}
out.println("您曾经浏览过:");
//显示曾经浏览过的商品
Cookie[] cookies = request.getCookies();
for (int i = 0; cookies!=null && i < cookies.length; i++) {
if(cookies[i].getName().equals("bookHistory")){
String[] ids = cookies[i].getValue().split("\\,");
for (String id : ids) {
Book book = Db.getBooks().get(id);
out.print(book.getName()+"<br/>");
}
}
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
二、访问商品首页列表:
package com.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author TS
*
*/
@WebServlet("/productIDServlet")
public class ProductIDServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//显示单个商品详细信息
String id = request.getParameter("id");
Book book = Db.getBooks().get(id);
PrintWriter out = response.getWriter();
out.write(book.getId() + "<br/>");
out.write(book.getName()+ "<br/>");
out.write(book.getAuthor() + "<br/>");
out.write(book.getDescription() + "<br/>");
//构建Cookie发送给客户端浏览器
String cookieValue = buildCookie(id,request);
Cookie cookie = new Cookie("bookHistory",cookieValue);
cookie.setMaxAge(30*1*24*3600);
cookie.setPath("/JavaWeb"); //web站点
response.addCookie(cookie);
}
/**
* 构建Cookie发送给客户端浏览器(自多)显示3个信息
* @param id
* @param request
* @return
*/
private String buildCookie(String id,HttpServletRequest request) {
//1.没有带Cookie.bookHistory=null 1 //没有带Cookie
//2.带了Cookie.bookHistory=2,5,1 1,2,5 //带过来了Cookie,包含当前的值, 返回
//3.Cookie.bookHistory=2,5,4 1,2,5 //带来了Cookie,没有包含当前看到的值,清除最后Cookie,加入新的ID
//4.Cookie.bookHistory=2,5 1,2,5 //没有带满Cookie,把新Cookie加入到最前
String bookHistory = null;
Cookie[] cookies = request.getCookies();
for (int i = 0; cookies!=null && i < cookies.length; i++) {
if(cookies[i].getName().equals("bookHistory")){
bookHistory = cookies[i].getValue();
}
}
if(bookHistory == null){ //1.没有带Cookie.bookHistory=null
return id;
}
LinkedList<String> list = new LinkedList<String>( Arrays.asList( bookHistory.split("\\,") ) );
if(list.contains(id)){ //带过来了Cookie,包含当前的值
list.remove(id);
list.addFirst(id);
}else{ //带来了Cookie,没有包含当前看到的值,清除最后Cookie,加入新的ID
if(list.size()>=3){
list.removeLast();
list.addFirst(id);
}else{
list.addFirst(id); //没有带满Cookie,把新Cookie加入到最前
}
}
StringBuffer sb = new StringBuffer();
for (String myid : list) {
sb.append(myid+",");
}
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
相关文章推荐
- 从Eclipse里导出Android程序到手机里
- [四]SpringMvc学习-对servlet与json的支持与实现
- java 伪随机数类
- Java类集框架
- Java执行顺序
- 牛客网 --java问答题
- Spring Boot 基础
- 【JAVA Web】mybatis3.3 + struts2.3.24 + mysql5.1.22开发环境搭建及相关说明
- Java I/O系统
- java Graphics2D 画图
- Spring MVC 测试 | 模拟提交表单
- 深入分析JavaWeb Item50 -- Spring开发入门
- javaSE学习博客与笔记
- Java Web项目Server窗口NullPointerException问题
- [三]SpringMvc学习-封装、乱码问题、重定向、转发
- java中This关键字
- spring-mvc.xml报错cvc-complex-type.2.4.c
- Java设计模式——单例设计模式
- 3、Java常用的运算符
- Android中将AS的项目导入到eclipse中,stye中常常报错