1.会话技术
用户打开一个浏览器访问页面,访问网站的很多页面,访问完成后将浏览器关闭的过程称为是一次会话
cookie:将数据保存到客户端浏览器
session:将数据保存到服务器端
向浏览器保存数据:
response.addCookie(Cookie cookie)
获取浏览器带过来的数据:
request.getCookies();
创建cookie对象:
cookie(String name,String value);
2.JSP的简单概述
jsp:java代码+html的元素+jsp内置的东西
jsp的执行过程:
jsp会被翻译成servlet,编译成class进行执行
jsp的脚本元素:
<%! %>:翻译成类中的成员部分,定义变量,定义方法,定义类,Servlet是线程不安全的,尽量少在类中定义成员变量
<% %>:翻译成类的service方法内部的内容,定义变量,定义类,直接写代码块
<%= %>:翻译成service方法内部的out.print();
3.记录用户的上次登录访问时间
public class ServletDemo1 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取当前时间 String time = new Date().toLocaleString(); //获得所有cookie Cookie[] cookies = request.getCookies(); //遍历cookies判断有没有记录登录时间的cookie if(cookies != null) { for (Cookie cookie : cookies) { //如果匹配到保存时间的cookie,用户不是第一次访问 if(cookie.getName().equals("visitTime")) { String visitTime = cookie.getValue(); response.getWriter().write("欢迎回来,上次访问的时间是:"+cookie.getValue()); } } }else { response.getWriter().write("欢迎访问本网站!"); } //创建cookie对象保存 Cookie c = new Cookie("visitTime", time); //发送cookie response.addCookie(c); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
4.cookie常用的api
getName();获得名字
getValue();获得对应的值
setDomain(String domain);设置cookie的有效域名
setPath(String path);设置cookie的有效路径
setMaxAge(int maxAge);设置cookie的有效时间
5.cookie的分类
会话级别的cookie:默认的cookie,关闭浏览器cookie就会销毁
持久级别的cookie:可以设置cookie的有效时间,那么关闭浏览器cookie还会存在,手动销毁持久性Cookie.setMaxAge(0);
6.商品的浏览历史记录
步骤:
点击某个商品,将商品ID传递给一个Servlet
在Servlet中判断是否是第一次浏览商品
如果是第一次:将商品ID存入到cookie中
如果不是,判断商品是否被浏览过,如果浏览过,就 删除对应的cookie,添加到首尾,没有就判断是否达到浏览商品显示的最大值,
如果没有就直接添加到第一个,如果达到了就删除最后一个,再添加都首位
public class ServletDemo2 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //接收用户点击商品传递过来的id String id = request.getParameter("id"); //获得所有的cookie信息 Cookie[] cookies = request.getCookies(); //判断有没有浏览过这个商品 Cookie cookie = CookieUtils.findCookie(cookies,id); //用户是第一次浏览 if(cookie == null) { //创建cookie对象 Cookie c = new Cookie("history", id); //设置一个小时的销毁 cookie.setMaxAge(60*60); //发送cookie response.addCookie(c); //用户不是第一次浏览 }else { //得打cookie的值 String value = cookie.getValue(); //切掉在拼接cookie时的,号 String[] ids = value.split(","); //将数组转换成集合 List<String> aslist = Arrays.asList(ids); //将list转换成linkedlist LinkedList<String> list = new LinkedList<>(aslist); //如果用户之前浏览过这个商品 if(list.contains(id)) { //删除对应的 list.remove(id); list.addFirst(id); //没有浏览过 }else { //判断是否达到最大值 if(list.size() < 3) { //直接添加到第一个 list.addFirst(id); //达到最大值 }else { //删除最后一个 list.removeLast(); list.addFirst(id); } } //创建拼接的StringBuffer StringBuffer sb = new StringBuffer(); for(String s:list) { sb.append(s).append(","); } //去掉最后一个,号 String idValue = sb.toString().substring(0,sb.length()-1); //保存到cookie中 Cookie c = new Cookie("history", idValue); //发送 response.addCookie(c); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } class CookieUtils { public static Cookie findCookie(Cookie[] cookies,String name){ if(cookies == null){ return null; }else{ for(Cookie cookie:cookies){ if(name.equals(cookie.getName())){ return cookie; } } return null; } } }
7.清空浏览历史记录
点击清空浏览历史记录的超链接,
跳转到servlet
得到指定保存浏览历史记录的cookie,
设置保存时间为0
重定向到商品显示页面
public class Demo3Servlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获得所有的cookie Cookie[] cookies = request.getCookies(); //遍历cookies,拿到保存浏览历史记录的cookie for (Cookie cookie : cookies) { if(cookie.getName().equals("history")) { //设置保存时间为0 cookie.setMaxAge(0); } } //重定向 response.sendRedirect(request.getContextPath()+"/list.jsp"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }