- 浏览: 33621 次
- 性别:
- 来自: 上海
文章分类
最新评论
这两天在写代码的时候,由于涉及到资源的位置,因此,需要在Java Bean中定义一些字段,用来表示资源的位置,比如:imgUrl,logoUri等等。但是,每次定义的时候,心里都很纠结,是该用imgUrl还是imgUri呢?
同样的,另外一个问题:String HttpServletRequest.getRequestURI();和StringBuffer HttpServletRequest.getRequestURL();返回的内容有何不同?为什么会如此?
带着这些问题到网上去搜了下,没发现让自己看了明白的解释,于是,想到了Java类库里有两个对应的类java.net.URI和java.net.URL,终于,在这两个类里的javadoc里找到了答案。
URIs, URLs, and URNs
首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。
在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema必须被指定。
ok,现在回答文章开头提出的问题,到底是imgUrl好呢,还是imgUri好?显然,如果说imgUri是肯定没问题的,因为即使它实际上是url,那它也是uri的一种。那么用imgUrl有没有问题呢?此时则要看它的可能取值,如果是绝对路径,能够定位的,那么用imgUrl是没问题的,而如果是相对路径,那还是不要用ImgUrl的好。总之,用imgUri是肯定没问题的,而用imgUrl则要视实际情况而定。
第二个,从HttpServletRequest的javadoc中可以看出,getRequestURI返回一个String,“the part of this request’s URL from the protocol name up to the query string in the first line of the HTTP request”,比如“POST /some/path.html?a=b HTTP/1.1”,则返回的值为”/some/path.html”。现在可以明白为什么是getRequestURI而不是getRequestURL了,因为此处返回的是相对的路径。而getRequestURL返回一个StringBuffer,“The returned URL contains a protocol, server name, port number, and server path, but it does not include query string parameters.”,完整的请求资源路径,不包括querystring。
总结一下:URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,所以,是绝对的,而通常说的relative URL,则是针对另一个absolute URL,本质上还是绝对的。
注:这里的绝对(absolute)是指包含scheme,而相对(relative)则不包含scheme。
URI抽象结构 [scheme:]scheme-specific-part[#fragment]
[scheme:][//authority][path][?query][#fragment]
authority为[user-info@]host[:port]
参考资料:
http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URI.html
http://en.wikipedia.org/wiki/Uniform_Resource_Identifier
http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html
ps:
java.net.URL类不提供对标准RFC2396规定的特殊字符的转义,因此需要调用者自己对URL各组成部分进行encode。而java.net.URI则会提供转义功能。因此The recommended way to manage the encoding and decoding of URLs is to use java.net.URI. 可以使用URI.toURL()和URL.toURI()方法来对两个类型的对象互相转换。对于HTML FORM的url encode/decode可以使用java.net.URLEncoder和java.net.URLDecoder来完成,但是对URL对象不适用。
发表评论
-
js页面缓存的一个解决办法
2013-12-06 18:02 0CSSOSAnt浏览器JavaScript 由于 ... -
解决js缓存地址问题
2013-12-06 17:56 637解决js缓存地址问题 js实现不缓存 <ME ... -
URL URI URN
2013-12-06 17:51 593总结如下: 1.简写: URI (uniform resour ... -
display标签交替显示不同行颜色
2013-12-06 17:41 598问题 想要一个更加简单的支持列表数据分页和排序的方法。 解决方 ... -
display标签简介
2013-12-06 17:36 418下面是网友总结的displa ... -
jsp转换成html
2013-11-28 16:42 632相信很多人都希望自己的页面越快越好,最好是能静态的,提高 ... -
Java验证码
2013-11-28 15:11 411Java生成验证码图片 1.Servlet生成验证码图片 ... -
JAVA图片验证码
2013-11-28 15:08 508import java.awt.Color; ... -
JSP、Servlet中的相对路径和绝对路径
2013-11-15 13:09 559http://www.webjx.com 更新日期:200 ... -
jsp相对路径绝对路径
2013-11-15 12:57 392jsp相对路径绝对路径 ... -
JSP自定义标签rtexprvalue属性
2013-11-15 11:28 394JSP自定义标签rtexprvalue属性 分类: J2EE ... -
EL表达式 参考手册
2013-11-14 17:29 315一、EL简介 1.语法结构 ${expression ... -
springMVC+JDBC:分页示例
2013-11-13 15:30 860文章来源:http://liuzidong.iteye.c ... -
spring mvc 分页
2013-11-13 15:20 502springmvcstringhibernatesession ... -
get/post时中文乱码问题的解决办法
2013-11-13 14:00 396jspurlservlettomcat浏览器服 ... -
HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
2013-11-05 11:29 765HTML:scrollLeft,scrollWidth,c ...
相关推荐
在探讨“URI和URL区别”这一主题时,我们首先需要明确这两个概念的基本定义与功能,进而深入理解它们之间的差异以及在互联网技术中的具体应用。URI(Uniform Resource Identifier,统一资源标识符)和URL(Uniform ...
### URI与URL的基础概念 #### 一、URI(Uniform ...- **总结**:在日常使用中,人们经常将URL和URI这两个术语互换使用,但在技术上,它们有着明确的区别。理解这些概念对于正确地使用和构建互联网资源至关重要。
Boost.URL库是C++编程语言中的一个开源工具,专门设计用于处理和操作统一资源标识符(URI)和统一资源定位器(URL)。这个库提供了一套全面且强大的API,允许开发者高效、安全地进行URL解析、构建、修改以及验证等...
URI、URL和URN之间的关系是:URI是顶层概念,包括了URL和URN。URL是URI的一种具体形式,用于提供资源的访问途径,而URN则提供了一个永久性的名字,即使资源的物理位置改变,依然可以通过URN找到资源。 在Java中,...
在Java中,URI和URL被分别封装在`java.net.URI`和`java.net.URL`类中。URI 类是一个抽象的概念,主要用于解析和表示URI,但不涉及网络访问。它支持相对URI,并且更加符合相关规范。而URL类则更偏向于实际的网络操作...
有两种形式: URL:目前URI的最普遍形式就是无处不在的URL或统一资源定位器。 URN:URL的一种更新形式,统一资源名称(URN, Uniform Resource Name)不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需...
URI(Uniform Resource Identifier)和URL(Uniform Resource Locator)是互联网上资源定位的两种重要概念。它们虽然在功能上有所重叠,但有着明确的区别。 首先,URI,统一资源标志符,是一个抽象的概念,用于唯一...
### URL和URI使用指南 #### 一、引言 在当今互联网时代,了解如何通过URL(Uniform Resource Locator,统一资源定位符)和URI(Uniform Resource Identifier,统一资源标识符)来获取网络上的数据至关重要。本指南...
- **创建和解析URI**:Uri库允许通过字符串或数组创建URI实例,并能解析出各个部分,如scheme(协议)、authority(授权部分,包括用户信息、主机和端口)、path(路径)、query(查询字符串)和fragment(片段...
URL(统一资源定位符)是URI的一个子类,主要用于定位网络资源。 1. **URI中不应包含动词** 在RESTful设计中,URI应该代表资源,而不是操作。动词通常属于HTTP方法(GET、POST、PUT、DELETE等)。例如,一个错误的...
java
`uriparser` 是一个开源的URI(统一资源标识符)解析库,广泛应用于软件开发,尤其是网络爬虫...同时,由于`uriparser`遵循了标准,所以它在处理不同格式和结构的URL时表现得更加可靠,减少了因URL解析问题引发的错误。
对比两个url是否一致,对比两个URL是否一致,包括端口,方法等,非常好用
System.Uri类也提供了这些功能,如`Uri.EscapeDataString()`和`Uri.UnescapeDataString()`方法用于URL编码和解码,以及`Uri.IsLoopback`、`Uri.HostNameType`等属性用于判断URL的特性。 总的来说,通过System.Uri类...
react-native-svg-uri, 在来自URL或者 static 文件的本地响应中,呈现SVG图像 react-native-svg-uri从URL或者 static 文件中呈现来自React的SVG图像这是用 rn 0.33和 react-native-svg 4.3.1 ( 依赖于此库) react-...
例如,使用`Uri.withAppendedPath()`添加路径,使用`Uri.encode()`和`Uri.decode()`进行URL编码解码。 7. **文件Uri与安全问题**: 文件Uri通常以`file:`开头,直接访问可能导致安全问题,例如文件权限泄露。因此...
4. URL解密:解密过程与加密相反,首先使用Uri.UnescapeDataString解码Base64字符串,然后使用相同的密钥和IV进行解密。 四、安全注意事项 1. 密钥管理:密钥和初始化向量(IV)必须安全存储,避免被泄露。可以...
$temp = urldecode($_SERVER['REQUEST_URI']); if (strexists($temp, ') || strexists($temp, '"')) { $_GET = htmlspecialchars($_GET); // XSS防护 } } ``` 3. **其他相关变量**: - `$_SERVER['DOCUMENT_...