iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中创建URL的常见问题怎么解决
  • 624
分享到

Java中创建URL的常见问题怎么解决

2023-06-17 05:06:53 624人浏览 独家记忆
摘要

本篇内容介绍了“Java中创建URL的常见问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题1:Java的URLEncoder这

本篇内容介绍了“Java中创建URL的常见问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

问题1:Java的URLEncoder

这个类不仅名字取的很差,而且它的文档上来***句话就不太对头。

Utility class for html fORM encoding.

你可能正纳闷为什么叫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:Groovy HttpBuilder以及Java的URI

HTTP Builder 是Groovy的一个HTTP客户端库。

创建一个普通的GET请求非常简单:

new HTTPBuilder("http://localhost:18080").request(Method.GET) {
uri.path = "/foo"

这段代码会发送GET /foo HTTP/1.1到服务端(你可以运行nc -l -p 18080之后再执行这段代码验证下)。

我们来试一下包含空格的URL。

new HTTPBuilder("http://localhost:18080").request(Method.GET) {
uri.path = "/foo bar"

这个发送的是GET /foo%20bar HTTP/1.1,看起来还不错。

现在假设我们的路径中有一段就叫做foo/bar。这可不能简单地发送foo/bar就完了,因为这会被认为成路径中包含两段,foo和bar,那我们试下foo%2Fbar吧(把/替换成对应的编码)。

new HTTPBuilder('http://localhost:18080').request(Method.GET) {
uri.path = '/foo%2Fbar'

这个发送的则是GET /foo%252Fbar  HTTP/1.1。这可不太妙。%2F中的%被重复编码了,这样解码后拿到的路径是foo%2Fbar而不是foo/bar。这里其实真正要怪的是  java.net.URI,因为这个HTTPBuilder里的URIBuilder类用的就是它。

上述代码中的配置闭包中暴露的uri属性的类型是URIBuilder。如果你通过uri.path =  …来更新uri的path属性的话,它最终会调用URI的一个构造方法,这个方法对于传入的path属性是这么描述的:

如果提供了path参数,则将它追加到URL后面。path里面的字符,只要不是非保留,标点,转义及其它分类(译注:这几个分类在RFC  2396中有详细说明)的字符,同时又不是/或者@号的,都会进行编码。

这个做法意义不大,因为如果未编码前的文本包含特殊字符的话,它就无法生成一个正确编码的路径分段。换句话说,“我会对这个字符串进行编码,而编码之后它就是正确的”,这当然是个谬论,而URI正好是这个谬论的牺牲品。如果字符串已经正确编码了,那就没什么问题,如果不是的话,那就完蛋了,因为这个串没法解析。事实上,文档里说的不会对/号转义的意思是,它假设path串已经正确地编码了(就是说正确地使用/来分隔路径),同时又还没有正确地编码(除了/外的其它部分仍然需要进行编码)。

如果HTTPBuilder不使用URI类的这个存在缺陷的功能就好了,当然了,如果URI自己本身没问题的话就更好了。

正确的做法

UrlBuilder.forHost("http", "foo.com")
.pathSegment("with spaces")
.pathSegments("path", "with", "varArgs")
.pathSegment("&=?/")
.queryParam("fancy + name", "fancy?=value")
.matrixParam("matrix", "param?")
.fragment("#?=")
.toUrlString() 

“Java中创建URL的常见问题怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Java中创建URL的常见问题怎么解决

本文链接: https://www.lsjlt.com/news/287183.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中创建URL的常见问题怎么解决
    本篇内容介绍了“Java中创建URL的常见问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题1:Java的URLEncoder这...
    99+
    2023-06-17
  • sonar常见问题怎么解决
    这篇文章主要讲解了“sonar常见问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“sonar常见问题怎么解决”吧!Equality tests should not be made...
    99+
    2023-06-04
  • Photoshop常见问题怎么解决
    这篇文章主要讲解了“Photoshop常见问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Photoshop常见问题怎么解决”吧!ps是什么意思答:一般来说是指Photoshop这...
    99+
    2023-07-01
  • windows flash中心常见问题怎么解决
    这篇文章主要介绍“windows flash中心常见问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows flash中心常见问题怎么解决”文章能帮助大家解决问题。flash中心是...
    99+
    2023-07-01
  • windows Aboboo常见问题怎么解决
    这篇文章主要介绍“windows Aboboo常见问题怎么解决”,在日常操作中,相信很多人在windows Aboboo常见问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”windows Abobo...
    99+
    2023-07-01
  • windows pcstory常见问题怎么解决
    这篇文章主要讲解了“windows pcstory常见问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“windows pcstory常见问题怎么解决”吧!pcstory是什么答:p...
    99+
    2023-07-01
  • 怎么解决Facebook SDK常见问题
    怎么解决Facebook SDK常见问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 我安装了 Facebook SDK,但在广告管理工具中没有看到安装量报告?首先...
    99+
    2023-06-04
  • windows mydockfinder常见问题怎么解决
    本篇内容介绍了“windows mydockfinder常见问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!mydockfinde...
    99+
    2023-07-01
  • windows spacesniffer常见问题怎么解决
    这篇文章主要介绍了windows spacesniffer常见问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇windows spacesniffer常见问题怎么解决文章都会有所收获,下面我们一起来看...
    99+
    2023-07-01
  • windows translucenttb常见问题怎么解决
    今天小编给大家分享一下windows translucenttb常见问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2023-07-01
  • 终极指南:ASP URL 路由中的常见问题和解决方案
    1. ASP URL 路由的常见问题 在使用 ASP URL 路由时,用户可能会遇到以下常见问题: 问题 1:URL 不匹配 预期路由 原因:URL 路由规则与请求的 URL 不匹配。 解决方案:检查 URL 路由规则,确保其正确配...
    99+
    2024-02-24
    ASP URL 路由 问题 解决方案
  • JAVA常见中文问题的解决方案是怎样的呢
    JAVA常见中文问题的解决方案是怎样的呢,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JAVA常见中文问题的解决方法以下解决方案是笔者在日常生活中遇到的,希望能...
    99+
    2023-06-03
  • 服务器常见的异常问题怎么解决
    服务器常见的异常问题解决方法:1、服务器系统蓝屏、频繁死机、重启、反映速度迟钝问题,检查是否感染了病毒,是则及时进行杀毒;2、服务器远程桌面连接超出最大连接数问题,重启服务器或用mstsc/console指令进行强行登陆;3、无法删除文件问...
    99+
    2024-04-02
  • win10投影常见的问题怎么解决
    以下是一些常见的Win10投影问题以及可能的解决方法:1. 投影无法连接到外部显示器:- 确保连接线插好并且连接稳定。- 按下Win...
    99+
    2023-10-18
    win10
  • win11键盘常见问题怎么解决
    这篇文章主要介绍了win11键盘常见问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win11键盘常见问题怎么解决文章都会有所收获,下面我们一起来看看吧。方法一: 首先确保你的键盘可以使用。可以尝试连...
    99+
    2023-06-30
  • win10兼容常见问题怎么解决
    本篇内容介绍了“win10兼容常见问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!win10兼容模式设置的方法首先右键打开需要设置...
    99+
    2023-07-01
  • Redis常见延迟问题怎么解决
    这篇“Redis常见延迟问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Redis常见延迟问题怎么解决”文章吧。使...
    99+
    2023-07-02
  • windows11系统常见问题怎么解决
    这篇文章主要讲解了“windows11系统常见问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“windows11系统常见问题怎么解决”吧!Windows11安装升级常见问题:升级系...
    99+
    2023-06-30
  • Vue常见报错问题怎么解决
    今天小编给大家分享一下Vue常见报错问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、报错结构报错信息一般会包含...
    99+
    2023-07-02
  • Java Mail常见问题解答:解决邮件编程中的难题
    Java Mail常见问题解答 如何在Java中发送电子邮件? Java Mail提供了一个简单的API来发送电子邮件。以下是一个演示代码,展示如何使用Java Mail发送电子邮件: import javax.mail.*; impor...
    99+
    2024-02-05
    Java Mail, 邮件编程, Java, SMTP, POP3, IMAP
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作