zoukankan      html  css  js  c++  java
  • HttpClient 学习记录---URIBuilder

    来源: httpClient学习记录--URIBuilder   

    构造函数
        URIBuilder()
        URIBuilder(final String string) 内部会创建URI对象
        URIBuilder(final URI uri)
        非空的两个构造实际内部都调用了digestURI(uri) 将URI对象解析并赋值给类的属性

     

    URIBuilder正是采用了至少有7个参数,如果要满足各种需求的组合,恐怕总共要提供∑(C^7^~i~)(i=1~7)种构造函数,显然不现实。然而,URIBuilder既可以造出一个不可变的URI,又可以兼顾N种参数。URIBuilder可以这样用:

    /  http://www.google.com/search?q=编程狗的博客&btnG=Google+Search&aq=f&oq=
    URI uri = new URIBuilder()
        .setScheme("http")
        .setHost("www.google.com")
        .setPath("/search")
        .setParameter("q", "编程狗的博客")
        .setParameter("btnG", "Google Search")
        .setParameter("aq", "f")
        .setParameter("oq", "")
        .build();
    

    uilder Pattern(建造者模式)。等号右边实际上是一行,先创建一个URIBuilder对象实例,调用实例的setScheme方法,此方法顺便返回URIBuilder对象实例,刚刚返回的这个实例调用setHost方法,...,最后一个返回的URIBuilder对象实例调用build方法,返回URI对象。它是如何实现的呢?

    原来的URI类的set方法的基础上,添加一个返回值,返回URIBuilder自己就够了:

    class URIBuilder{
        public URIBuilder setScheme(String scheme){
        ...
            return this;
        }
    
        public URIBuilder setHost(String host){
        ...
            return this;
        }
    
        public URIBuilder setPath(String path){
        ...
            return this;
        }
    
        //built 方法,把参数拼接,然后返回一个URI类
        public URI built(){
        ...
            return uri;
        }
    }
    
     

    由于URIBuilder每次都返回它自己,所以可以连续的执行 set方法,最后通过built方法返回URI类。


        类属性

    
    
    String url = "http://www.google.com/search?hl=en&q=httpclient&btnG=Google+Search&aq=f&oq=";
    URIBuilder uriBuilder = new URIBuilder(url);
    System.out.println(uriBuilder.getScheme());
    System.out.println(uriBuilder.getUserInfo());
    System.out.println(uriBuilder.getHost());
    System.out.println(uriBuilder.getPort());
    System.out.println(uriBuilder.getPath());
    System.out.println(uriBuilder.getQueryParams());
    System.out.println(uriBuilder.getFragment());
    System.out.println(uriBuilder.getCharset());

        输出如下所示:
        scheme:http
        userinfo:null
        host:www.google.com
        prot:-1  端口默认是80,当显示指定端口时,此处便能取到值
        path:/search
        queryParams:[hl=en, q=httpclient, btnG=Google Search, aq=f, oq=]
        fragment:null
        charset:null
        某些属性含义未知手动设置一次
       

    String url = "http://info.sporttery.cn/football/info/fb_match_hhad.php?m=102909";
    URIBuilder uriBuilder = new URIBuilder(url);
    uriBuilder.setFragment("111");
    uriBuilder.setUserInfo("222", "333");
    uriBuilder.setCharset(new GBK());
    System.out.println(uriBuilder.build());
    System.out.println(uriBuilder.getScheme());
    System.out.println(uriBuilder.getUserInfo());
    System.out.println(uriBuilder.getHost());
    System.out.println(uriBuilder.getPath());
    System.out.println(uriBuilder.getQueryParams());
    System.out.println(uriBuilder.getFragment());
    System.out.println(uriBuilder.getCharset());

         输出如下:
        http://222:333@info.sporttery.cn/football/info/fb_match_hhad.php?m=102909#111
        scheme:http
        userInfo:222:333   没见过这东西-。-
        host:info.sporttery.cn
        path:/football/info/fb_match_hhad.php
        queryParams:[m=102909]
        fragment:111   路由
        charset:GBK

      更多,见文章标题下链接

    https://blog.csdn.net/wxy1234556/article/details/79022402?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

    做产品的程序,才是好的程序员!
  • 相关阅读:
    了解自我
    IT技能栈
    客户端的工作不仅仅只是看起来那么简单
    .NET 基础 一步步 一幕幕[XML基础操作]
    .NET 基础 一步步 一幕幕[Winform应用程序]
    .NET 基础 一步步 一幕幕[面向对象之堆、栈、引用类型、值类型]
    .NET 基础 一步步 一幕幕[面向对象之new、this关键字]
    .NET 基础 一步步 一幕幕[面向对象之静态、非静态]
    .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
    .NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]
  • 原文地址:https://www.cnblogs.com/asplover/p/12486755.html
Copyright © 2011-2022 走看看