欢迎来到天天文库
浏览记录
ID:16777388
大小:25.31 KB
页数:3页
时间:2018-08-24
《【java】中常见的url问题及解决方案java基础教程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、http://www.lampbrother.net【Java】中常见的URL问题及解决方案Java基础教程URL无处不在,不过似乎开发人员并没有真正地理解它们,因为在StackOverflow上经常看到有人在问如何正确的创建一个URL。想知道URL语法是如何工作的,可以看下总结的这篇文章,非常不错。本文不会深入介绍URL的全部语法,这是我们发布的一个用于正确地创建URL的Java库。问题1:Java的URLEncoder这个类不仅名字取的很差,而且它的文档上来第一句话就不太对头。Utilityc
2、lassforHTMLformencoding.你可能正纳闷为什么叫URLEncoder呢,看到这行就彻底无语了。现在你应该明白了,你没法通过这个类将一个URL串奇迹般地转化成一个安全,正确编码的URL对象,当然如果你没做足功课的话,这里有个小例子可以帮助你理解下。假设你有个HTTP的服务端点http://foo.com/search,它接受一个查询参数p,p的值就是要查找的字符串。如果你搜索"You&I"这个串的话,你第一次创建的搜索的URL可能是这样:http://foo.com/search
3、?q=You&I。这个当然没法工作,因为&是分隔查询参数name/value对的分隔符。如果你拿到这个错乱的URL串的话,你对它简直束手无策,因为首先你就没法正确的解析它。那好,我们来使用下URLEncoder。URLEncoder.encode("You&I","UTF-8")是结果是You+%26+I。这个%26解码之后就是&,而+号在查询串中代表的就是空格,因此这个URL是能正常工作的。现在假设你想使用你的查询串来拼接URL路径,而不是放到URL参数里面。很明显,http://foo.com
4、/search/You&I是错误的。不幸的是,URLEncoder.encode()的结果也是错的。http://foo.com/search/You+%26+I解码后会得到/search/You+&+I,因为+号在URL路径中是不会解析成空格的。URLEncoder或许能满足你的一些场景。但不幸的是,它这个过于通用的名字使得开发人员很容易误用它。因此最好的方法就是不要使用它,免得后面别的开发人员在你的基础上又使用了别的功能时犯错(除非,你真的是在进行"HTML表单编码")。问题2:GroovyH
5、ttpBuilder以及Java的URIHTTPBuilder是Groovy的一个HTTP客户端库。创建一个普通的GET请求非常简单:newHTTPBuilder("http://localhost:18080").request(Method.GET){uri.path="/foo"}这段代码会发送GET/fooHTTP/1.1到服务端(你可以运行nc-l-p18080之后再执行这段代码验证下)。otherstaffoftheCentre.Duringthewar,Zhuwastransferr
6、edbacktoJiangxi,andDirectorofthenewOfficeinJingdezhen,JiangxiCommitteeSecretary.Startingin1939servedasrecorderoftheWestNorthOrganization,SecretaryoftheSpecialCommitteeAfterthevictoryofthelongMarch,hehasbeentheNorthwestOfficeoftheFederationofStateenter
7、prisesMinister,ShenmufuguSARmissions,DirectorofNingxiaCountypartyCommitteeSecretaryandrecorderoftheCountypartyCommitteeSecretary,Ministersandhttp://www.lampbrother.net我们来试一下包含空格的URL。newHTTPBuilder("http://localhost:18080").request(Method.GET){uri.path
8、="/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%252
此文档下载收益归作者所有