码迷,mamicode.com
首页 > Web开发 > 详细

Jsp--Cookie

时间:2020-05-12 20:51:28      阅读:95      评论:0      收藏:0      [点我收藏+]

标签: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.length; 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);
    }
<body>
    <%
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for(int i =0 ; i< cookies.length;i++){
                if(cookies[i].getName().equals("test")){
                    out.print(URLDecoder.decode(cookies[i].getValue(),"UTF-8"));
                }
            }
        }
    %>
</body>

 案例:实现历史记录

jsp页面

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

    <h1>商品列表</h1>
    <a href="<%=path%>/HistoryServlet?name=ThinkPad">ThinkPad</a>
    <br />
    <a href="<%=path%>/HistoryServlet?name=Lenovo">Lenovo</a>
    <br />
    <a href="<%=path%>/HistoryServlet?name=Apple">Apple</a>
    <br />
    <a href="<%=path%>/HistoryServlet?name=HP">HP</a>
    <br />
    <a href="<%=path%>/HistoryServlet?name=SONY">SONY</a>
    <br />
    <a href="<%=path%>/HistoryServlet?name=ACER">ACER</a>
    <br />
    <a href="<%=path%>/HistoryServlet?name=DELL">DELL</a>
    <br />
    <hr/>
    <h1>历史记录</h1>
    <!-- 从cookie中获取数据并显示 -->
    <%
        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 < cookies.length; 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.length; i++) {
                goods[i] = goods[i].trim();
            }
            //Arrays.asList(goods)转成的集合是只读的,创建一个新的list
            List<String> 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!