A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-5-30 15:23 编辑

cookie (域对象)

1.什么是会话:
        用户打开一个浏览器访问页面,访问网站的很多页面,访问完成后将浏览器关闭的过程称为是一次会话.
1.1常见的会话技术:
        * Cookie        :将数据保存到客户端浏览器.
        * Session        :将数据保存到服务器端.
1.2.为什么使用会话技术?
        * 私有的数据,购物信息数据保存在会话技术中.
2.用户数据私有化
        * Cookie : 由于每个人的设备不同,保证了数据的私有  
        * Session: 为每个人创建一个空间,每个空间都有不同的钥匙,保证了数据的私有
3.【Cookie技术的使用】
        * 向浏览器保存数据:(从服务器向浏览器端保存数据)
                **HttpServletResponse有一个方法:
                        void addCookie(Cookie cookie);
                        
        * 获得浏览器带过来的Cookie:
                **HttpServletRequest有一个方法:
                        Cookie[] getCookies();
        *创建一个Cookie对象:
                Cookie(String name,String value);
                   * Cookie中存的也是键值对 name=value
                   * Name : 为cookie的名字
                   * Value : 为cookie的值
                   * 要保证cookie的名字不同
   例:/*
           * 创建Cookie
                   Cookie cookie1 = new Cookie(“a”,”aaa”);
                   Cookie cookie2 = new Cookie(“b”,”aaa”);
                   Cookie cookie3 = new Cookie(“c”,”aaa”);
           * 向浏览器保存数据:
                   Response.addCookie(cookie1)
                   Response.addCookie(cookie2)
                   Response.addCookie(cookie3)
           * 获得从浏览器端带过来的数据:
                   Cookie[] coolis = request.getCookies();
                */
                  
        * getName();获取名字
        
        * getValue();获取值
        
        * setDomain(String domain);
                 设置Cookie的有效域名. //www.baidu.com  music.baidu.com
               
        * setPath(String path);
                 设置Cookie的有效路径.(访问指定的资源是才获取cookie)
                一般是为了删除持久性的cookie
                一般传入工程名就行 "/工程名"
        例:
        /*
        删除持久性cookie:
                Cookie c = new Cookie();         //新建cookie
                C.setPath(“/day10”);                  //通过
                C.setMaxAge(60*60);                  //存活时间为1小时
               
        */
        
        * setMaxAge(int maxAge); -- 设置Cookie的有效时间(默认的时间单位是秒).


4.Cookie的分类有关:
        * 会话级别的Cookie: 默认的Cookie.关闭浏览器Cookie就会销毁.
        * 持久级别的Cookie: 可以设置Cookie的有效时间.那么关闭浏览器Cookie还会存在.
        
        * 手动销毁持久性 Cookie. setMaxAge(0)---前提是有效路径必须一致.


        例:
        /*
                Cookie c = new Cookie();        //新建cookie
                C.setPath(“/day10”);                  //设置有效路径
                C.setMaxAge(60*60);                  //存活时间为1小时
        */




5.cookie存储中文的问题,cookie: 不能存储中文


/*
使用到了两个方法:
URLDecoder.decoder(String s ,charset);
URLEncoder.encoder(String s ,charset);
*/




public class CookieEncodeing extends HttpServlet{
        private static final long serialVerionsUID = 1L;
        protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletExvletException{
                //获得cookie数组
                Cookie[] cookies = request.getCookies();
                Cookie aa = CookieUtils.findCookie(cookie,"aa");
                if(aa != null){
                        String value = aa.getValue();
                        
                        //既然存储的时候进行了编码
                        //因此取出的时候也要进行对应的解码
                        String a = URLDecoder.decoder(value,"utf-8");
                        
                }
               
               
                //往cookie中存储中文时 , 先对其进行编码
                String value = URLEncoder.encode("中文","utf-8");
                Cookie cookie = new Cookie("aa",value);
                response.addCookie(cookie);
               
        }
}


6.记录最后登录时间
* 使用了Cookie 的方法:
        getValue();
        Cookie(String name , String value):的两个参数都是String类型
* ServletRequest 的方法:
        getCookies()
* ServletResponse() 的方法:
        addCookie();
* 获取系统时间: System.currentTimeMillis()
        
* Date的
        构造 new Date(Long Millis);
        toLocaleString();//格式化时间
        
public class CountServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;


        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                response.setContentType("text/html;charset=UTF-8");
                Integer count = (Integer) this.getServletContext().getAttribute("count");
//                response.getWriter().println("<h1>现在网站被访问的次数为:"+count+"</h1>");
               
                /**
                 * 获得浏览器中带过来的所有的Cookie信息,从数组中查找有没有指定名称的Cookie
                 * 判断用户是否是第一次访问:(从数组中没有找到指定名称的Cookie)
                 * * 如果是第一次:显示欢迎,记录当前访问的时间存入到Cookie中.
                 * * 如果不是第一次:显示欢迎,上一次访问时间,同时记录当前访问的时间存入到Cookie中。
                 */
                // 获得浏览器带过来的所有的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());//把时间long装换为字符串
                // 保存到浏览器端:
                response.addCookie(c);
        }


        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                doGet(request, response);
        }


}


7.清空浏览的Cookie记录
* 通过设置一个与要删除的cookie的name值一样的cookie,有效路径相同,存储时间为零,
  然后用respons.addCookie()存入cookie,将之前的cookie覆盖,由于新的cookie存储时间为0,
  因此响应一结束,该cookie就会消毁;
删除持久性的Cookie:
/*
public class ClearServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;


        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                Cookie cookie = new Cookie("history",null);
                cookie.setPath("/day11");
                cookie.setMaxAge(0);
                response.addCookie(cookie);
               
                response.sendRedirect("/day11/demo2/product_list.jsp");
        }


*/


8.        * public void forward(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
                * 将请求从一个 servlet 转发到服务器上的另一个资源(servlet、JSP 文件或 HTML 文件)。
                此方法允许一个 servlet 对请求进行初步处理,并使另一个资源生成响应。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马