Jsp--Cookie

2021-03-08 00:28

阅读:527

标签:for   sub   content   集合   地址   code   hid   rect   url   

什么是Cookie

   Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点。

其实Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。

然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。

并会标注出Cookie的来源(哪个服务器的Cookie)

当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了

注意: Cookie不能跨浏览器,

IE浏览器有IE浏览器的Cookie,   Chrome浏览器有Chrome的cookie, IE浏览器使用Chrome浏览器的存放cookie

Cookie的覆盖

  如果服务器端发送重复的Cookie那么会覆盖原有的Cookie

例:第一个请求服务器端发送的Cookie是:Set-Cookie: a=A;

第二请求服务器端发送的是:Set-Cookie: a=AA,那么客户端只留下一个Cookie,即:a=AA。

代码实现:

创建cookie

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、创建一个cookice对象
        Cookie a = new Cookie("aaa","123");
        //设置cookie存在时间为7天
        a.setMaxAge(7*24*60*60);
        //更改储存地址setpath、不写默认为项目名
                //request.getContextPath()当前项目名+访问的servlet后加上test
        a.setPath(request.getContextPath()+"/test");
        //将cookie相应的硬盘中
        response.addCookie(a);
    }    

取值

    //将本项目中的所有cookie拿到
        Cookie[] cookie = request.getCookies();
        //遍历
        if(cookie != null){
            for (int i = 0; i ) {
                Cookie c = cookie[i];
                System.out.println(c.getName()+"-->"+c.getValue());
            }
        }

Cookie常用方法

1、Cookie的构造方法

Cookie cookie = new Cookie(String name,String value);

2、获取cookie的value    :getValue()

3、修改cookie的value    :setValue()

4、获取cookie的name    :getName()

5、设置cookie存放时间, 默认单位为妙    setMaxAge(int expiry)  --即cookie的生命

  •    0: 立即删除cookie
  •   -1: 默认值, cookie存在客户端内存, 当浏览器关闭的时候, cookie清除
  •   >0:  存放时间  60  表示cookie存放60秒, 一旦到达60秒, 浏览器自动删除cookie

6、设置cookie访问的路径  : setPath()   

  cookie.setPath(request.getContextPath()+"/servlet");

  •    不写默认为本项目
  •  setPath(/)   :为所有的项目都可以拿到这个cookie

中文传值的编码与解码

  • 编码:URLEncoder.encode(String,"编码格式");
  • 解码:URLDecoder.decode(String,"编码格式");
代码实现:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie c = new Cookie("test",URLEncoder.encode("中国", "UTF-8"));
        response.addCookie(c);
    }

    
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for(int i =0 ; i){
                if(cookies[i].getName().equals("test")){
                    out.print(URLDecoder.decode(cookies[i].getValue(),"UTF-8"));
                }
            }
        }
    %>

 案例:实现历史记录

jsp页面

技术图片技术图片
body>
    
        String path = request.getContextPath();
    %>

    h1>商品列表h1>
    a href="/HistoryServlet?name=ThinkPad">ThinkPada>
    br />
    a href="/HistoryServlet?name=Lenovo">Lenovoa>
    br />
    a href="/HistoryServlet?name=Apple">Applea>
    br />
    a href="/HistoryServlet?name=HP">HPa>
    br />
    a href="/HistoryServlet?name=SONY">SONYa>
    br />
    a href="/HistoryServlet?name=ACER">ACERa>
    br />
    a href="/HistoryServlet?name=DELL">DELLa>
    br />
    hr/>
    h1>历史记录h1>
    
    
        String nameValue = "";
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for (int i = 0; i  cookies.length; i++) {
                cookies[i].equals("goodName");
                nameValue = cookies[i].getValue();
            }
        }
        out.print(nameValue);
    %>
body>
View Code

servlet页面

技术图片技术图片
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、编码处理
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;UTF-8");
        //2、获取请求数据
        String name = request.getParameter("name");
        //3、业务代码
        //获取cookie的数据
        //返回name为goodName的值
        String nameValue = null;
        //
        String listStr = name;
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for (int i = 0; i ) {
                if(cookies[i].getName().equals("goodName")){
                    nameValue = cookies[i].getValue();
                }
            }
        }
        //将cookie转成集合,ArrayList
        if(nameValue != null){
            String[] goods = nameValue.split(",");
            //存在toString中有空格,去除
            for (int i = 0; i ) {
                goods[i] = goods[i].trim();
            }
            //Arrays.asList(goods)转成的集合是只读的,创建一个新的list
            List list = new ArrayList(Arrays.asList(goods));
            //判断是否存在,存在remove后再添加
            if(list.contains(name)){
                list.remove(name);
            }
            //不管是否存在都要加入list中
            list.add(name);
            //将list转为字符串
            listStr = list.toString();
            //去除toString前后的【】
            listStr = listStr.substring(1,listStr.length()-1);
            }
        //创建一个Cookie对象,并设置属性
        Cookie c = new Cookie("goodName",listStr);
        //设置存活时间
        c.setMaxAge(24*60*60);
        //响应cookie到浏览器
        response.addCookie(c);
        
        //4、响应页面
        response.sendRedirect(request.getContextPath()+"/index.jsp");
    }
View Code

 

Jsp--Cookie

标签:for   sub   content   集合   地址   code   hid   rect   url   

原文地址:https://www.cnblogs.com/64Byte/p/12878238.html


评论


亲,登录后才可以留言!