范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Java开发之创建URL的常见问题分享

  有不少的人在参加Java培训或者是自学Java的过程中会遇到这样那样的问题,有的问题大家见过一次转头就忘,下次遇到类似的问题又不会了,本篇文章扣丁学堂小编给大家整理了一些Java中创建URL的常见问题,希望对同学们有所帮助。
  URL无处不在,不过似乎开发人员并没有真正地理解它们,因为我在StackOverflow上经常看到有人在问如何正确的创建一个URL。想知道URL语法是如何工作的,可以看下Lunatech的这篇文章,非常不错。
  本文不会深入介绍URL的全部语法,这里我想讲的是常见的一些库在操作URL方面存在的错误,以及如何通过URL-builder来正确的使用它,这是我们发布的一个用于正确地创建URL的Java库。
  问题1:Java的URLEncoder
  这个类不仅名字取的很差,而且它的文档上来第一句话就不太对头。
  UtilityclassforHTMLformencoding.
  你可能正纳闷为什么叫URLEncoder呢,看到这行就彻底无语了。
  如果你读过Lunatech的那篇博文,现在你应该明白了,你没法通过这个类将一个URL串奇迹般地转化成一个安全,正确编码的URL对象,当然如果你没做足功课的话,这里有个小例子可以帮助你理解下。
  假设你有个HTTP的服务端点http://foo.com/search,它接受一个查询参数p,p的值就是要查找的字符串。如果你搜索"You&I"这个串的话,你第一次创建的搜索的URL可能是这样:http://foo.com/search?q=You&I。这个当然没法工作,因为&是分隔查询参数name/value对的分隔符。如果你拿到这个错乱的URL串的话,你对它简直束手无策,因为首先你就没法正确的解析它。
  那好,我们来使用下URLEncoder。URLEncoder.encode("You&I","UTF-8")是结果是You+%26+I。这个%26解码之后就是&,而+号在查询串中代表的就是空格,因此这个URL是能正常工作的。
  现在假设你想使用你的查询串来拼接URL路径,而不是放到URL参数里面。很明显,http://foo.com/search/You&I是错误的。不幸的是,URLEncoder.encode()的结果也是错的。http://foo.com/search/You+%26+I解码后会得到/search/You+&+I,因为+号在URL路径中是不会解析成空格的。
  URLEncoder或许能满足你的一些场景。但不幸的是,它这个过于通用的名字使得开发人员很容易误用它。因此最好的方法就是不要使用它,免得后面别的开发人员在你的基础上又使用了别的功能时犯错(除非,你真的是在进行"HTML表单编码")。
  问题2:GroovyHttpBuilder以及Java的URI
  HTTPBuilder是Groovy的一个HTTP客户端库。
  创建一个普通的GET请求非常简单:
  newHTTPBuilder("http://localhost:18080").request(Method.GET){
  uri.path="/foo"
  }
  这段代码会发送GET/fooHTTP/1.1到服务端(你可以运行nc-l-p18080之后再执行这段代码验证下)。
  我们来试一下包含空格的URL。
  newHTTPBuilder("http://localhost:18080").request(Method.GET){
  uri.path="/foobar"
  }
  这个发送的是GET/foo%20barHTTP/1.1,看起来还不错。
  现在假设我们的路径中有一段就叫做foo/bar。这可不能简单地发送foo/bar就完了,因为这会被认为成路径中包含两段,foo和bar,那我们试下foo%2Fbar吧(把/替换成对应的编码)。
  newHTTPBuilder("http://localhost:18080").request(Method.GET){
  uri.path="/foo%2Fbar"
  }
  这个发送的则是GET/foo%252FbarHTTP/1.1。这可不太妙,%2F中的%被重复编码了,这样解码后拿到的路径是foo%2Fbar而不是foo/bar。这里其实真正要怪的是java.net.URI,因为这个HTTPBuilder里的URIBuilder类用的就是它。
  上述代码中的配置闭包中暴露的uri属性的类型是URIBuilder。如果你通过uri.path=...来更新uri的path属性的话,它最终会调用URI的一个构造方法,这个方法对于传入的path属性是这么描述的:
  如果提供了path参数,则将它追加到URL后面。path里面的字符,只要不是非保留,标点,转义及其它分类(译注:这几个分类在RFC2396中有详细说明)的字符,同时又不是/或者@号的,都会进行编码。
  这个做法意义不大,因为如果未编码前的文本包含特殊字符的话,它就无法生成一个正确编码的路径分段。换句话说,"我会对这个字符串进行编码,而编码之后它就是正确的",这当然是个谬论,而URI正好是这个谬论的牺牲品。如果字符串已经正确编码了,那就没什么问题,如果不是的话,那就完蛋了,因为这个串没法解析。事实上,文档里说的不会对/号转义的意思是,它假设path串已经正确地编码了(就是说正确地使用/来分隔路径),同时又还没有正确地编码(除了/外的其它部分仍然需要进行编码)。
  如果HTTPBuilder不使用URI类的这个存在缺陷的功能就好了,当然了,如果URI自己本身没问题的话就更好了。
  正确的做法
  我们写了这个url-builder,它能帮助开发人员方便的拼接各种类型的URL。它遵循了篇首那几个参考资料中的编码规范,同时它还提供了流式的API。下面这个使用示例几乎可以涵盖所有的使用场景了:
  UrlBuilder.forHost("http","foo.com")
  .pathSegment("withspaces")
  .pathSegments("path","with","varArgs")
  .pathSegment("&=?/")
  .queryParam("fancy+name","fancy?=value")
  .matrixParam("matrix","param?")
  .fragment("#?=")
  .toUrlString()
  结果是:http://foo.com/with%20spaces/path/with/varArgs/&=%3F%2F;matrix=param%3F?fancy%20%2B%20name=fancy?%3Dvalue#%23?=
  这个例子演示了URL各个部分的不同的编码规则,比如说在路径中未编码的&=是允许的,而?/则是需要编码的,但在查询参数中=是需要编码的,但?号则不需要,因为这里已经是查询串的部分了(译注:查询串是从一个?号开始的,因此后面可以包含?号)。
  好了,关于Java中创建URL的常见问题就先给大家说到这里,想要了解更多Java信息的同学可以前往扣丁学堂官网咨询,扣丁学堂Java培训深受学员的喜爱。扣丁学堂不仅有专业的老师和与时俱进的课程体系,还有大量的Java视频教程供学员观看学习哦。扣丁学堂Java技术交流群:850353792。

矿视界之老路闲扯比特币2。3万美元,伊朗币价重回巅峰?1hr早上起床看了一眼币价,小编心中对大家只有一句问候天台上的朋友你们好吗?关于这次暴跌,业界众说纷纭。有人说丝绸之路相关钱包抛售了10万枚BTC导致的9月5号消息,CNBC主持人小K测评第五期迪兰RX5808GXSerial战神这期硬件测评,小K将要为大家介绍迪兰家族又一款集颜值与性能于一身的显卡迪兰RX5808GXSerial战神海力士颗粒(下文统称RX588)。在RadeonRXVEGA系列没有推出之科普入门ETH硬分叉,什么是硬分叉软分叉呢?搜索微信公众号矿视界关注我们在区块链领域,网络分叉可以说是一件大事件了,特别是像比特币以太坊等主流数字货币的网络分叉,往往带来数十上百亿的市值变动,惹人注目。8月24日,以太坊的大奇迹摩尔真正的无盘挖矿系统已正式上线还在用Windows有盘系统挖矿?那你就OUT啦!其实矿机不用硬盘也可以挖矿想了解一下吗?显卡超频一键搞定省时又省力要体验一下吗?以前一千台矿机要雇四五个人管理真的有必要吗?一张显你看天上的白云,像不像我借你的1688元中国有句老话叫有借有还,再借不难,但是现在社会,借钱不还现象反而比较常见。这些欠钱不还的人要么确实是记性不好,忘了要么真没钱还再要么就是老赖,不想还你钱了。等待了许久他都不还钱。不无盘挖矿好处多你家矿机喊你换系统啦之前小编给大家解释了Linux在作为矿机系统方面全面碾压Windows的原因(想要了解的朋友们请戳戳)。文中也说到如果矿场里有大量的矿机想要从Windows系统更换成Linux系统老路闲扯矿机神仙打架,矿工池鱼遭殃虽然中秋都过去了,但最近几天这气温才真正有秋天的感觉啊,很多地方未来几天的昼夜温差都要超过10度了。虽然有的时候是有些冷,不过老路建议大家加衣服时还是要注意,不要一下子加的太多。正矿工入门你必须了解矿池的那些事数字货币挖矿行业发展到现在,挖矿的人越来越多,算力也随之不停增加。像是比特币,以太坊这类市值较高的可挖取数字货币,它们所整合的计算机算力已经是一个非常庞大的数值了。基于发行总量的限矿视界之老路闲扯以太坊将拜占庭分叉?今天已经是8月31日了,明天就是许多学校新一学期开始的日子。不知道大家最近睡觉,有没有梦到那些被上课铃声支配的日子?上学的时候觉得天天早起上课,背书写作业好累,总是盼着下课铃声响起老路闲扯徐明星iPhone上了,割点韭菜买苹果搜索微信公众号矿视界关注我们这几天以太坊跌的是真的难受,好多之前挖以太的矿工朋友不知道是转去挖别的币,还是直接关机了,昨天以太坊全网算力较前天又下跌了5。6Ths,按一台矿机240小米新机曝光,外观造型十分新颖,网友天线宝宝上身?不知道从什么时候开始,智能手机产品之间的竞争已经不再局限于性能拍照等方面了,毕竟现在已经是性能过剩的时代,各种旗舰机型的性能基本上都差不多,比不出太大的差距来。因此,很多智能手机厂
华为否认将彻底出售手机业务,此事还有后续吗?最近华为要剥离手机业务的消息传的是沸沸扬扬,网上各种小道消息,各种爆料此起彼伏。华为总算是给出了回应传言都是假的,华为还要继续打造高端手机,继续为手机用户提供卓越的产品体验和服务。魅族18发布,起售价4399元,网友定价太高,超出溢价水准第一观察(文李楠)魅族在3月3日,刚刚发布最新的旗舰机魅族18和魅族18pro两款手机,该手机主要配置搭载行业主流的骁龙888处理器和LPDDR5和UFS3。1,主摄采用5000万浅谈DesignCompilerVerilog语言结构到门级的映射昨天的文章中,我们了解到DesignCompiler(DC)作为Synopsys公司开发的一款用于电路综合的EDA工具,在全球数字电路市场去得了巨大的成功,它的设计初衷是将用Ver行业思考Boss直聘上市带给集成侠的思考(点击上方头像关注集成侠)你用过Boss直聘吗?这个中国目前最大的在线招聘平台,在6月11日正式登录纳斯达克。此次发行价19美元,IPO募资规模为9。12亿美元,按此计算市值为88新消费时代,月饼自动化生产环节的升级选择(点击上方头像关注集成侠)小饼如嚼月,中有酥与饴。这是宋代大诗人苏东坡在一千年前中秋时节品尝月饼(别名小饼)后,由衷赞美而留下的诗句。据史料记载,月饼的起源最早可追溯到距今三千多年双十一必看新机推荐全能型选手vivoT1来袭vivo今年推出了很多让我们印象深刻的新机,比如vivoX70,凭借炸裂的拍照性能获得了业界的一致好评,也成为名副其实的街机,充分证明vivo在技术和研发上的实力。但是X70毕竟属抖音支付来了!补位拼多多谋战春晚支付大战一触即发新晋互联网巨头字节跳动也按捺不住进军金融业务的野心,布局互联网金融的核心环节支付。1月19日,抖音支付已在抖音APP内正式上线,在抖音APP内购物结算时,除了可选支付宝和微信支付外1999元起开关机无广告,荣耀智慧屏X2系列真香预警双11各大厂家都带来了自己的优惠价,想要入手智能电视机的朋友千万不能错过。这些电视产品中,荣耀智慧屏X2系列综合实力非常不错,目前也已经开启了优惠活动,现在参加预售,10月31日首你不是一个人在开车,还有千万个细菌陪着你夏日炎炎,桑拿天,出门都恨不得随身带个冰箱,而户外活动最需要爱车有个给力的空调,时刻给自己一个18摄氏度的凉爽拥抱。在这个需要靠车内空调续命的关键时期,空调能够一时开一时爽,一直开微信封杀拼多多小红书,连QQ系亲兄弟也不放过1月12日,微信安全中心发布公告称,微信已对QQ音乐QQ浏览器知乎好看视频小红书多多直播(拼多多旗下直播产品)等多个产品的违规外部链接进行限制,不再提供微信内直接打开的服务。这一消千元真香机iQOOZ5x即将发布最近很多手机厂商都发布了自己的新旗舰,价格也动辄45千,相对比较高。对于预算在千元左右的小伙伴们,最近可以好好关注一下iQOO即将发布的这款新机IQOOZ5x,不仅价格便宜,最重要