Cookie学习

本篇博客简单学习Cookie
主要内容:
1.cooike的作用
2.cookie的简介
3.Cookie类的简单使用
4.cookie实例—查看用户上次登录时间
5.cookie实例—查看用户最近图片浏览记录。
6.在前端写cookies

cookie—浏览器的小饼干~用Cookie来传递用于跟踪客户状态的数据。
将信息保存到客户端。
cookie的作用:附带在浏览器上面,服务器可以设置和读取上面的信息。 比如:用来查看最近浏览记录、上次登陆时间等等。
典型的例子:某东通过你在京东商城的浏览商品记录,当你用同一个浏览器的访问新浪首页的时候,他给你推荐商品—恰恰是你最近在京东浏览的同类商品。

Cookie-简介:


 - Cookie,是客户端在访问web服务器时,服务器在客户端的机器上存放的信息。
 - 服务器将Cookie保存在客户机器上的原因是为了跟踪客户的状态。这主要用于特殊的场合如电子商务。
 - JavaServletApiCookie提供了简单实现,javax.servlet.http.Cookie类表示Cookie
 - Cookie保存客户端的硬盘上,通过key和value值来保存信息,类似于MapCookie的key和value不能使用中文。如果要保存中文,必须使进行编码。
 - 切记:
Cookie保存的时间通过设置setMaxAge来设置 (默认值为-1)
    如果大于0,就表示在客户机的硬盘上保存N秒。
    如果小于0,就表示不将Cookie保存到客户机的硬盘上,当浏览器关闭时,Cookie当即消失。
    如果等于0,就表示删除保存在客户机上的Cookie。

Cookie类的简单使用

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        //向用户端写cookie
        Random r = new Random();
        int n = r.nextInt(100);
        String name ="Jack";
        Cookie c = new Cookie("name", name+n);
        c.setMaxAge(60*60);
        c.setPath( request.getContextPath());
        response.addCookie(c);

        // 演示cookie带中文
        String str = "你好,夏天";

        str = URLEncoder.encode(str,"utf-8");// 中文编码

        Cookie cStr = new Cookie("str", str);

        cStr.setPath("/");
        response.addCookie(cStr);

        //读取客户端发过来的cookie
        Cookie cs[] = request.getCookies();
        if(cs!=null){
            for(Cookie cc:cs){
                String name2 = cc.getName();
                String val = cc.getValue();
                val =URLDecoder.decode(val,"utf-8");//---解码
                out.print(name2+"="+val+"<br/>");

            }
            out.print("保存成功!");
        }
    }

演示结果
这里写图片描述

cookie实例—查看用户上次登录时间

实现的主要思路:判断是否为第一次访问:如果是 输出欢迎信息,如果不是第一次访问 拿出上次存在Cookie的登录信息。 再更新这次访问时间到cookie里面去

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");

        //拿Cookie
        Cookie cs[] = request.getCookies();
        boolean boo = false;
        SimpleDateFormat sdf = new SimpleDateFormat(" yyyy--MM--dd HH:mm:ss");
        if(cs!=null){
            for(Cookie c:cs){
                String name = c.getName();
                if("LastTime".equals(name)){
                    boo = true;
                    String val = c.getValue();
                    out.println("上次登录时间为:"+val);
                }
            }
        }
        if(!boo){ // 没拿到上次登录时间。。第一次
            out.println("第一次登录欢迎你!");
        }

        //设置这次的登录时间进去
        // new Cookie 既是新增、也是修改!  底层是Map()
        Cookie c = new Cookie("LastTime", sdf.format( new Date().getTime()));
        c.setMaxAge(60*60);
        c.setPath("/");
        response.addCookie(c);


        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

结果页面
第一次访问:
这里写图片描述
第二次访问:
这里写图片描述
在页面前端写cookie

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>>前端页面中用js来操作cookie技术演示</title>
  </head>

  <body>
    <h2>>前端页面中用js来操作cookie技术演示</h2>
    <br/><br/>
    <div id="div1">
    </div>

    <div id="div2">
    </div>

    <script type="text/javascript">
        //*创建/修改cookie ----如果存在则是修改,否则是新增
        var date = new Date();
        var tm = date.getTime()+ 1000*60*60*24; //以毫秒为单位
        date.setTime(tm);

        var nm ="中国2中4文8666";
        nm = encodeURI(nm); //中文要进行编码
        document.cookie="name2="+nm+";expires=" + date.toString()+";path=/";
       //*/

       //读取(遍历)cookies
       var cs = document.cookie.split(";");//注意返回的是数组
       for(var i=0; i<cs.length;i++){
           div1.innerHTML =div1.innerHTML+ "<br/>"+cs[i];//这是没有解码的整个串

           cs[i]=decodeURI(cs[i]);//解码,能够解决中文乱码
           var str = cs[i].split("="); //每个cookie是一个"name=value"的字符串,要取出value得再解析
           div2.innerHTML =div2.innerHTML+ "<br/>"+str[1];//只显示cookie的value值
       }

       //删除cookie
       /*
       var d = new Date(1970,1,1); //声明过期时间创建cookie即是删除
       document.cookie="name2=aa;expires=" + d.toGMTString()+";path=/";
       */
    </script>

  </body>
</html>

cookie实例—查看用户最近图片浏览记录。

实现思路:整个页面分为两部分 浏览记录(3张图片),和图库。每张图片包一个超链接,点击图片后,单独显示大图,后台调用Servlet服务把改图片明存放到cookie里面,当用户返回主要面时,后来再拿到刚刚用户访问图片的cookie 把他显示到浏览记录图片中。
Servlet代码

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

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");

        out.println("<a href='"+request.getContextPath()+"/jsps/show.jsp'>返回</a>");
        out.println("<hr/>");

        //在新窗口中显示出用户当前点击浏览的图片
        String img = request.getParameter("img");
        String html = "<img src='"+request.getContextPath()+"/imgs/"+img+"'></img>";
        out.println(html);

        //把当前浏览的图片信息添加(记录)到 Cookie("images")中
        //先把cookie读出来
        Cookie cs[] = request.getCookies();
        boolean boo = false; //是否存在浏览历史即Cookie("images")
        if(cs!=null){
            for(Cookie c: cs){
                if(c.getName().equals("images")){//存在浏览历史
                    String imgs = c.getValue(); //1.jpg,3.jpg,8.jpg
                    if(imgs.indexOf(img)>=0){//最近浏览历史中存在当前图片
                        //直接把记录中旧的当前图片名去掉
                        imgs = imgs.replace(img, "");//1.jpg

                        //以下处理可能存在的多余","号
                        if(imgs.indexOf(",")==0){//开始处有","号
                            imgs = imgs.substring(1);
                        }else if(imgs.lastIndexOf(",")==imgs.length()-1){//末尾处有","号
                            imgs = imgs.substring(0, imgs.length()-1);
                        }else{// 中间处有","号
                            imgs = imgs.replace(",,", ",");
                        }
                    }

                    //把当前浏览的图片信息加入到imgs 
                    imgs = img + "," + imgs;

                    //控制最多只保存3个图片信息
                    if(imgs.split(",").length>3){
                        imgs = imgs.substring(0, imgs.lastIndexOf(","));
                    }

                    //把更新后的imgs保存到cookie中
                    c.setValue(imgs);
                    c.setMaxAge(60*60*24*30);// 30天
                    c.setPath("/");
                    response.addCookie(c);

                    boo=true;
                    break;
                }
            }
        }

        if(boo==false){//不存在浏览历史即Cookie("images")
            Cookie coo = new Cookie("images",img);
            coo.setMaxAge(60*60*24*30);// 30天
            coo.setPath("/");
            response.addCookie(coo);
        }

        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

show.jsp代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>图片浏览页面</title>
    <style type="text/css">
       img{
          border: 0px;
          width: 200px;
          height:180px;
       }
       .img{
          border: 0px;
          width: 50px;
          height:45px;
       }

    </style>

  </head>

  <body>
    <h2>图片浏览页面,展示利用cookie记录用户最近访问的图片</h2>
    <br/><br/>

    <h3>您最近看过的图片</h3>
    <%
       String str = null;
       Cookie  cs[] = request.getCookies();
       if(cs!=null){
           for(Cookie c: cs){
               if(c.getName().equals("images")){
                   str = c.getValue();
                   break;
               }
           }
       }

       if(str!=null){
           String strs[] = str.split(","); // str: 1.jpg,3.jpg,8.jpg
           for(String s: strs){
     %>
              <img class="img" src='<%=request.getContextPath()%>/imgs/<%=s%>'></img>
    <% 
           }
       }
    %>

    <hr/>

    <a href="<%=request.getContextPath()%>/ShowServlet?img=1.jpg">
      <img src="<%=request.getContextPath()%>/imgs/1.jpg"></img>
    </a>
    <a href="<%=request.getContextPath()%>/ShowServlet?img=2.jpg">
      <img src="<%=request.getContextPath()%>/imgs/2.jpg"></img>
    </a>
    <a href="<%=request.getContextPath()%>/ShowServlet?img=3.jpg">
      <img src="<%=request.getContextPath()%>/imgs/3.jpg"></img>
    </a>
    <a href="<%=request.getContextPath()%>/ShowServlet?img=4.jpg">
      <img src="<%=request.getContextPath()%>/imgs/4.jpg"></img>
    </a>
    <a href="<%=request.getContextPath()%>/ShowServlet?img=5.jpg">
      <img src="<%=request.getContextPath()%>/imgs/5.jpg"></img>
    </a>
    <a href="<%=request.getContextPath()%>/ShowServlet?img=6.jpg">
      <img src="<%=request.getContextPath()%>/imgs/6.jpg"></img>
    </a>
    <a href="<%=request.getContextPath()%>/ShowServlet?img=7.jpg">
      <img src="<%=request.getContextPath()%>/imgs/7.jpg"></img>
    </a>
    <a href="<%=request.getContextPath()%>/ShowServlet?img=8.jpg">
      <img src="<%=request.getContextPath()%>/imgs/8.jpg"></img>
    </a>
    <a href="<%=request.getContextPath()%>/ShowServlet?img=9.jpg">
      <img src="<%=request.getContextPath()%>/imgs/9.jpg"></img>
    </a>
    <a href="<%=request.getContextPath()%>/ShowServlet?img=10.jpg">
      <img src="<%=request.getContextPath()%>/imgs/10.jpg"></img>
    </a>
    <a href="<%=request.getContextPath()%>/ShowServlet?img=11.jpg">
      <img src="<%=request.getContextPath()%>/imgs/11.jpg"></img>
    </a>
    <a href="<%=request.getContextPath()%>/ShowServlet?img=12.jpg">
      <img src="<%=request.getContextPath()%>/imgs/12.jpg"></img>
    </a>

  </body>
</html>

显示结果(图一是我杰少。。哈哈哈)
这里写图片描述

下面是所有代码:项目截图
这里写图片描述
index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Cookie-Session技术演示</title>
  </head>

  <body>
    <h2>Cookie-Session技术演示</h2>

    <a href="CookieDemo1">Cookie技术演示1</a> <br/>

    <a href="servlet/CookieDemo2">该servlet用于演示Cookie的访问权限</a>
    <br/><br/>

    <a href="LoginServlet">利用Cookie技术显示上次登录的时间</a>
    <br/><br/>

    <a href="TestCookieNumServlet">测试浏览器支持cookie的数量和长度</a>
    <br/><br/>


    <a href="jsps/show.jsp">案例:利用cookie记录用户最近访问的图片信息</a>
    <br/><br/>



  </body>
</html>

cookdemo1.java

package cn.hncu.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookieDemo1 extends HttpServlet {

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

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");

        Random r = new Random();
        int n = r.nextInt(100);

        //创建一个cookie---里面的信息主要是:<key,value>
        //Cookie coo = new Cookie("name", "Jack"+n); //内容为英文

        //如果要往cookie中写中文信息(是value,不是key),那么得进行编码,,读取时要解码
        String vv = "湖南"+n;
        vv = URLEncoder.encode(vv, "UTF-8");//用utf-8编码
        Cookie coo = new Cookie("name", vv);

        //设置cookie的有效时间,生命周期,有效期 : 如果小于0则代表不保存在客户端
        //coo.setMaxAge(60);//有效时间:以秒为单位  ---1分钟之后无效。过期后浏览器再次访问当前网站时不会在request带过来的
        //coo.setMaxAge(60*60*24*7);//有效时间:以秒为单位  ---7天
        coo.setMaxAge(0);  //把有效时间设为0即是通知浏览器删除该cookie---需注意一点的是,path要和原来旧的设成完全一样,否则删不掉!
        System.out.println(n);

        //cookie是通过paht来设置权限的---所设路径及其子路径url的servlet可以访问到该cookie,否则不行(所设path的上级路径或其它无关路径url的servlet无法访问)
        coo.setPath("/"); //因为cookie是写给客户端用的,所为"/"代表的是Tomcat根目录。因此如果某cookie的path设成"/"则Tomcat下的所有项目中的servlet都能访问


        response.addCookie(coo);//写到客户端

        //读取cookie
        Cookie cs[] = request.getCookies();
        if(cs!=null){
            for(Cookie c:cs){
                String nm = c.getName();
                String val = c.getValue();

                //对val进行解码,以防止中文信息无法正确读取
                val = URLDecoder.decode(val, "utf-8");

                out.println("<br/>cookie:"+ nm +"="+val);
            }
        }

        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

}

cookiedemo2

package cn.hncu.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookieDemo2 extends HttpServlet {

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

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");

        //创建一个cookie
        String v = URLEncoder.encode("Java学习", "utf-8");
        Cookie coo = new Cookie("abc",v);
        coo.setMaxAge(60*10);
        coo.setPath( request.getContextPath()+"/servlet" );
        response.addCookie(coo);

        //读取cookie
        Cookie cs[] = request.getCookies();
        if(cs!=null){
            for(Cookie c:cs){
                String nm = c.getName();
                String val = c.getValue();

                //对val进行解码,以防止中文信息无法正确读取
                val = URLDecoder.decode(val, "utf-8");

                out.println("<br/>cookie:"+ nm +"="+val);
            }
        }

        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

}

LoginServlet.java

package cn.hncu.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {

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

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");

        //读取所有cookie,遍历,看是否存在一个叫"loginTime"的cookie,若存在没把信息读取出来显示(上次登录时间),否则输出:第一次登录
        Cookie cs[] = request.getCookies();
        boolean boo=false;
        if(cs!=null){
            for(Cookie c: cs){
                if(c.getName().equals("loginTime")){
                    String strTime = c.getValue();
                    long lg = Long.parseLong(strTime);
                    Date d = new Date(lg);
                    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    out.println( df.format(d) );
                    boo = true;
                    break;
                }
            }
        }

        if(!boo){
            out.println("您是第一次登录.....");
        }

        //不管原来是否已经登录,都要把当前的最新登录时间创建成一个cookie存到客户端
        String dt = new Date().getTime() + "";
        Cookie coo = new Cookie("loginTime", dt);
        coo.setPath( request.getContextPath() );
        coo.setMaxAge(60*60*24*7); //有效期一周
        response.addCookie(coo);//如果同名的cookie已经存在则是修改,否则是新加。


        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

}

showservlet.java

package cn.hncu.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ShowServlet extends HttpServlet {

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

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");

        out.println("<a href='"+request.getContextPath()+"/jsps/show.jsp'>返回</a>");
        out.println("<hr/>");

        //在新窗口中显示出用户当前点击浏览的图片
        String img = request.getParameter("img");
        String html = "<img src='"+request.getContextPath()+"/imgs/"+img+"'></img>";
        out.println(html);

        //把当前浏览的图片信息添加(记录)到 Cookie("images")中
        //先把cookie读出来
        Cookie cs[] = request.getCookies();
        boolean boo = false; //是否存在浏览历史即Cookie("images")
        if(cs!=null){
            for(Cookie c: cs){
                if(c.getName().equals("images")){//存在浏览历史
                    String imgs = c.getValue(); //1.jpg,3.jpg,8.jpg
                    if(imgs.indexOf(img)>=0){//最近浏览历史中存在当前图片
                        //直接把记录中旧的当前图片名去掉
                        imgs = imgs.replace(img, "");//1.jpg

                        //以下处理可能存在的多余","号
                        if(imgs.indexOf(",")==0){//开始处有","号
                            imgs = imgs.substring(1);
                        }else if(imgs.lastIndexOf(",")==imgs.length()-1){//末尾处有","号
                            imgs = imgs.substring(0, imgs.length()-1);
                        }else{// 中间处有","号
                            imgs = imgs.replace(",,", ",");
                        }
                    }

                    //把当前浏览的图片信息加入到imgs 
                    imgs = img + "," + imgs;

                    //控制最多只保存3个图片信息
                    if(imgs.split(",").length>3){
                        imgs = imgs.substring(0, imgs.lastIndexOf(","));
                    }

                    //把更新后的imgs保存到cookie中
                    c.setValue(imgs);
                    c.setMaxAge(60*60*24*30);// 30天
                    c.setPath("/");
                    response.addCookie(c);

                    boo=true;
                    break;
                }
            }
        }

        if(boo==false){//不存在浏览历史即Cookie("images")
            Cookie coo = new Cookie("images",img);
            coo.setMaxAge(60*60*24*30);// 30天
            coo.setPath("/");
            response.addCookie(coo);
        }

        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

}

TextCook…. .java

package cn.hncu.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestCookieNumServlet extends HttpServlet {

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

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //测试浏览器最多支持多少个cookie
        /*
        for(int i=1;i<=105;i++){
            Cookie coo = new Cookie("ccc"+i, "hncu"+i);
            coo.setMaxAge(60);
            response.addCookie(coo);
        }
        */

        String a ="1";//测试一个Cookie最多能放多少字节
        for(int i=0;i<7000;i++){
         a=a+"1";
        }
        System.out.println(">>>:"+a.getBytes().length);

        Cookie c = new Cookie("dd",a);
        c.setMaxAge(60*20);
        response.addCookie(c);

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值