黑马程序员技术交流社区

标题: cookie概述 [打印本页]

作者: 魏先生    时间: 2017-12-27 16:31
标题: cookie概述
### 域对象
       
        * request
                * 一次请求
        * servletContext
                * 整个WEB项目
               
### Cookie
       
        * 会话技术
                * 用户打开一个浏览器访问页面,到将浏览器关闭的整个过程称为会话
        * 常见会话技术
                * Cookie
                        * 将数据保存到客户端浏览器.
                * Session
                        * 将数据保存到服务器端.
        *  Cookie常用的API
                *  想浏览器保存数据
                        *  httpServletResponse对象.addCookie(Cookie cookie)
                * 获取浏览器带过来的是Cookie
                        * Cookie[]  httpServletRequest对象.getCookies();  
                * 创建一个Cookie
                        * Cookie (String name,String value)


### JSP
       
        * 概述
                * JAVA Servlet Pages(java服务器页面)
        * JSP的执行过程
                * JSP会被翻译成Servlet,编译成class进行执行的.
        * JSP中写入java代码
                * <%!  %>---成员部分(为了保证线程安全,尽量少定义成员属性)---加分号
                * <%   %>---service方法的内部内容---加分号
                * <%=  %>---service方法内部的out.print()  ---不能加分号


### 记录用户上次访问时间
       
        * 工具类
                * public static Cookie findCookie(Cookie[] cookies, String name) {
                        if (cookies == null) {
                                return null;
                        } else {
                                for (Cookie cookie : cookies) {
                                        if (cookie.getName().equals(name)) {
                                                return cookie;
                                        }
                                }
                                return null;
                        }
                }
        * // 获得浏览器带过来的所有的Cookie:
                Cookie[] cookies = request.getCookies();
                // 从数组中查找指定名称的Cookie:
                Cookie cookie = CookieUtils.findCookie(cookies, "lastVisit");
                // 判断是否是第一次:
                if(cookie == null){
                        // 第一次访问
                        response.getWriter().println("您是第"+count+"位访客!");
                }else{
                        // 不是第一次
                        Long l = Long.parseLong(cookie.getValue());
                        Date d = new Date(l);
                        response.getWriter().println("您是第"+count+"位访客! 上次访问时间是:"+d.toLocaleString());
                }
                // 创建一个Cookie对象:
                Cookie c = new Cookie("lastVisit",""+System.currentTimeMillis());
                // 保存到浏览器端:
                response.addCookie(c);

### 持久化Cookie
       
        * Cookie的常用API
                * getName()
                * getValue()
                * setDomain(String domain)--设置Cookie的有效域名
                * setPath(String path)---设置有效路径
                * SetMaxAge(int maxAge)---设置Cookie有效时间
        * Cookie的分类
                * 会话级别
                        * 打开到关闭浏览器
                * 持久级别
                        * 设置Cookie的有效时间,关闭浏览器还会在
                                * 可手动销毁Cookie.setMaxAge(0);
                                        * 前提是有效路径一样  

##  session

###  session(原理基于Cookie)
        *  Cookie与 Session的区别
                * Cookie
                        * 本身是有大小和个数的限制.
                        * 数据保存在客户端.
                * Session
                        * 没有限制
                        * 数据保存在服务器端
        * 创建Session
                * request.getSession()
       
### Session域对象
        * 生命周期
                * 创建:第一次去调用getSession()
                * 销毁:三种情况
                        * 过期:默认为30分钟
                        * 非正常关闭服务器,如果正常关闭会序列化保存(文件类型)
                        * 手动调用session.invalidate();
        *  作用范围
                *  多次请求

### 验证码
       
        * // 获取输入框的数据
                String code1 = request.getParameter("code");
                // 获得图片中的验证码信息
                String code2 = (String) request.getSession().getAttribute("code2");
                // 清除Session
                request.getSession().removeAttribute("code2");
                // 判断两个数据是否相同
                if (!code1.equalsIgnoreCase(code2)) {
                        // 将文本数据存到request域中
                        request.setAttribute("msg", "验证码输入错误!");
                        request.getRequestDispatcher("/demo/chekimg.jsp").forward(request, response);
                        return;
                }
                response.getWriter().println("ss");

        * request域中的数据可以由 ${...}取出
        * 点击验证码更换图片
                * document.getElementById("img1").src="/day15/CheckImgServlet?time="+new Date().getTime();
                * 需要添加时间戳,否则图片由于本地缓存的问题不会改变

### 购物车
       
        * // 接收商品名称:
                String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
                // 创建Map集合用于保存购物信息.Map<String,Integer> Map的key是商品的名称 value是购买的数量.
                Map<String,Integer> map = (Map<String, Integer>) request.getSession().getAttribute("cart");
                if(map == null){
                        map = new LinkedHashMap<String,Integer>();
                }
                // 判断购物车中是否已经买了该商品.
                if(map.containsKey(name)){
                        // map中已经有该商品:// * 如果购物车中已经有该商品: 获得到Map中该商品的数量+1。 存回到Map集合中.
                        Integer count = map.get(name);
                        count++;
                        map.put(name, count);
                }else{
                        // map中没有该商品.// * 如果购物车中没有改商品: 将商品添加到Map集合中 数量1.
                        map.put(name, 1);
                }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2