package cn.mengmei.COOKIE;import java.io.IOException;
import java.util.Date;import javax.servlet.ServletException;
import javax.servlet.http.COOKIE;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class COOKIEDemo1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获取浏览器带过来的名为lastDate的COOKIECOOKIE[] COOKIEs = request.getCOOKIEs();String lastDate = "";if(COOKIEs != null){for(COOKIE cook : COOKIEs){if(cook.getName().equals("lastDate")){lastDate = cook.getValue();}}}//将时间打印到浏览器显示response.setContentType("text/html;charset=UTF-8");response.getWriter().write("上次访问时间:"+lastDate);//最新时间值String newTime = new Date(System.currentTimeMillis()).toLocaleString();//将当前时间封装到COOKIE,设置有效期为30天。COOKIE COOKIE = new COOKIE("lastDate", newTime);COOKIE.setMaxAge(30*24*3600); //设置为0,可以将该COOKIE从硬盘删掉。//没有设置有效path,默认是本Servlet所在目录: /myday07/servlet//必须在本Servlet所在目录 /myday07/servlet 下的Servlet才能够将此COOKIE删除。//假如你在这里设置了有效目录,那么在你删的时候也必须设置相同的有效目录才能够删除。//将COOKIE打给浏览器response.addCOOKIE(COOKIE);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}
浏览器地址栏输入:http://localhost:8080/myday07/servlet/COOKIEDemo1
第一次访问没有时间值,第二次访问显示第一次访问的时间,浏览器关掉再打开还能显示:
上次访问时间:2015-2-12 23:05:23
实现过程:
显示商品列表的首页Servlet:
package cn.mengmei.COOKIE;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.COOKIE;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MainServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");//联合使用以下三个响应消息头,控制浏览器不要缓存。response.setHeader("Expires", "-1"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); PrintWriter out = response.getWriter();out.write("JSP教程 张孝祥
");out.write("HTML+CSS+JS 雷拓
");out.write("JAVA就业教程 王山海
");out.write("structs框架从入门到精通
");out.write("Windows编程 MFC
");out.write("您最近浏览过的历史记录:
");COOKIE[] COOKIEs = request.getCOOKIEs();if(COOKIEs!=null){for(COOKIE cook : COOKIEs){if(cook.getName().equals("bookHistory")){String history = cook.getValue();String[] ids = history.split(",");for (String id : ids) {switch (id) {case "1":out.write("JSP教程 张孝祥
");break;case "2":out.write("HTML+CSS+JS 雷拓
");break;case "3":out.write("JAVA就业教程 王山海
");break;case "4":out.write("structs框架从入门到精通
");break;case "5":out.write("Windows编程 MFC
");break;default:break;}}}}}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
详细页面:
package cn.mengmei.COOKIE;import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.LinkedList;import javax.servlet.ServletException;
import javax.servlet.http.COOKIE;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class DetailServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");String id = request.getParameter("id");boolean flag = true;COOKIE[] COOKIEs = request.getCOOKIEs();if(COOKIEs!=null){for(COOKIE cook : COOKIEs){if(cook.getName().equals("bookHistory")){flag = false;String history = cook.getValue();if(!history.contains(id)){StringBuilder sb = new StringBuilder(history);sb.insert(0, id+",");history = sb.toString();System.out.println(history);cook.setValue(history);cook.setMaxAge(30*24*3600);response.addCOOKIE(cook);}else{history = history.replaceAll("["+id+"]", "");StringBuilder sb = new StringBuilder(history);sb.insert(0, id+",");history = sb.toString();history = history.replaceAll("\\W*(\\W{1})", "$1");while(history.startsWith(",")){history = history.substring(1);}while(history.endsWith(",")){history = history.substring(0, history.length()-1);}System.out.println(history);cook.setValue(history);cook.setMaxAge(30*24*3600);response.addCOOKIE(cook);}}}if(flag){COOKIE COOKIE = new COOKIE("bookHistory", id);COOKIE.setMaxAge(30*24*3600);response.addCOOKIE(COOKIE);}}else{COOKIE COOKIE = new COOKIE("bookHistory", id);COOKIE.setMaxAge(30*24*3600);response.addCOOKIE(COOKIE);}PrintWriter out = response.getWriter();switch (id) {case "1":out.write("JSP教程 张孝祥---详细信息页面。。。。。。。。。。。");break;case "2":out.write("HTML+CSS+JS 雷拓---详细信息页面。。。。。。。。。。。");break;case "3":out.write("JAVA就业教程 王山海---详细信息页面。。。。。。。。。。。");break;case "4":out.write("structs框架从入门到精通---详细信息页面。。。。。。。。。。。");break;case "5":out.write("Windows编程 MFC---详细信息页面。。。。。。。。。。。");break;default:break;}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
浏览器地址栏输入:http://localhost:8080/myday07/servlet/MainServlet
效果:
老师讲的标准代码:
package cn.mengmei.COOKIE;import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;import javax.servlet.ServletException;
import javax.servlet.http.COOKIE;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MainServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//显示商品列表response.setContentType("text/html;charset=UTF-8");response.setHeader("Expires", "-1"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); PrintWriter out = response.getWriter();out.write("首页图书展示:
");Map
");}out.write("
");//最近浏览out.write("最近浏览:
");COOKIE[] COOKIEs = request.getCOOKIEs();String bookHistory = null;for(int i=0; COOKIEs!=null && i
}class DB{private static Map
}class Book{private String id;private String name;private String author;private String descrip;public Book() {super();}public Book(String id, String name, String author, String descrip) {super();this.id = id;this.name = name;this.author = author;this.descrip = descrip;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getDescrip() {return descrip;}public void setDescrip(String descrip) {this.descrip = descrip;}
}
package cn.mengmei.COOKIE;import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.LinkedList;import javax.servlet.ServletException;
import javax.servlet.http.COOKIE;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class DetailServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//根据id显示商品详细信息response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.write("商品详细:
");String id = request.getParameter("id");Book book = (Book) DB.getAll().get(id);out.write("id:"+book.getId()+"
");out.write("书名:"+book.getName()+"
");out.write("作者:"+book.getAuthor()+"
");out.write("描述:"+book.getDescrip()+"
");//给浏览器端发送COOKIECOOKIE COOKIE = new COOKIE("bookHistory", makeHistory(request,id));COOKIE.setMaxAge(30*24*3600);response.addCOOKIE(COOKIE);}private String makeHistory(HttpServletRequest request, String id) {COOKIE[] COOKIEs = request.getCOOKIEs();String bookHistory = null;for(int i=0; COOKIEs!=null && i