关于URL 和URI的关系,在本系列的第二篇:java网络---基本web概念 中已经简述了。

这里重复一点,就是URI包含URL,或者说URI是父类,URL就是子类的概念。

本篇再来详述这2个概念。

一:URL

java/net/URL.java

public final class URL implements Serializable {
private static final long serialVersionUID = -7627629688361524110L; private static URLStreamHandlerFactory streamHandlerFactory; /** Cache of protocols to their handlers */
private static final Hashtable<String, URLStreamHandler> streamHandlers
= new Hashtable<String, URLStreamHandler>(); private String protocol;
private String authority;
private String host;
private int port = -1;
private String file;
private String ref;

一个URL就是长的这样样子:http://home.cnblogs.com/u/deman/

所以我们可以使用String简单的描述一个URL。

但考虑URL为一个类可能更有用一些。

这个对象包括,模式,主机名,端口,路径,标识符(ref)。看看上面的源码,就是这些东西!

看看虚拟机支持那些协议,可以编写如下测试程序:

public class ProtocolTester implements IOperator {
@Override
public void start() {
testProtocol("http://www.adc.org");
testProtocol("https://www.amazon.com");
testProtocol("ftp://metalab.unc.edu");
testProtocol("telent://dibner.poly.edu/");
testProtocol("mailto:joyfulmath@163.com");
testProtocol("file:///etc/passwd");
testProtocol("gopher://gopher.anc.org.za");
testProtocol("ladp://ldap.itd.umich.edu");
testProtocol("jar:http://ldap.itd.umich.edu.jar");
testProtocol("nfs://utopia.poly.edu");
testProtocol("jdbc:mysql:/utopia.poly.edu"); } private void testProtocol(String url) {
try {
URL u = new URL(url);
TraceLog.i(u.getProtocol()+" is supported");
} catch (MalformedURLException e) {
// e.printStackTrace();
// TraceLog.w(e.getMessage());
String protocol = url.substring(0,url.indexOf(':'));
TraceLog.w(protocol+ " is not supported");
}
}

URL组成:

URL有五部分组成,

模式,也称为协议

授权机构

路径

片段标示符,ref

查询字符串

给点URL http://www.ibiblio.org/javafaq/books/jnp/index.html?isbn=1565229#toc

模式     http

授权机构  www.ibiblio.org

路径    javafaq/books/jnp/index.html

片段标示符,ref  toc

查询字符串  isbn=1565229

授权机构可以进一步分为:用户信息,主机,端口。

anmin@www.baidu.com:8080

public class UrlValueTester implements ITestOperator {
@Override
public void startTest() {
try {
URL u = new URL("http://tieba.baidu.com/f/fdir?fd=%E7%A7%91%E5%AD%A6%E6%8A%80%E6%9C%AF&ie=utf-8&sd=%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BD%AF%E4%BB%B6");
method(u);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} public void method(URL u) throws InvocationTargetException, IllegalAccessException {
Class cls = u.getClass();
Method[] methods = cls.getDeclaredMethods();
for(Method m:methods)
{
try{
if(m.getName().contains("get"))
{
TraceLog.i(m.getName());
TraceLog.i(":"+m.invoke(u));
}
}catch (Exception e)
{
TraceLog.w(m.getName());
} }
}

通过反射,获取所有get方法,然后依次获取各个属性。

二:URLEncoder & URLDecoder

URL使用如下字符:

大写字母

小写字母

数字0-9

标点-_.!~*'

字符/ & ? @ # ; $ + = % 用于特殊目的。

其他的内容都需要编码,URL默认不进行编码

public class EncoderTester implements ITestOperator{
public static final String DEFAULT_ENCODE = "UTF-8";
@Override
public void startTest() {
try {
String str = URLEncoder.encode("This is a + base string 我 吃 饭",DEFAULT_ENCODE);
TraceLog.i(str);
str = URLDecoder.decode(str, DEFAULT_ENCODE);
TraceLog.i(str);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} }
}
12-28 16:47:20.915 23343-23433/com.joyfulmath.sample.javanetwork I/EncoderTester: startTest: This+is+a+%2B+base+string+%E6%88%91+%E5%90%83+%E9%A5%AD [at (EncoderTester.java:20)]
12-28 16:47:20.916 23343-23433/com.joyfulmath.sample.javanetwork I/EncoderTester: startTest: This is a + base string 我 吃 饭 [at (EncoderTester.java:22)]

如上,空格会编码成+,所以 非给定的字符,都需要编码!

而特殊符号,则需要看情况,确定是否编码!

三.URI

URI是纯字符串的内容,是URL的相对内容。

URI格式分为三部分:

scheme:sheeme-part:fragment

URI top = new URI("http://www.example.com/");
URI relative = new URI("image/logo.png");
URI resolved = top.resolve(relative);
output:
http://www.example.com/image/logo.png"

URI可以做绝对路径和相对路径的转化,但是URL必须是绝对路径。

java网络---再论URL & URI的更多相关文章

  1. Java网络编程之URL和URI

    Java网络编程之URL与URI 一.URL与URI简介 URI = Universal Resource Identifier 统一资源标志符 URL = Universal Resource Lo ...

  2. java网络编程2-URL和URI

    //创建url可以指定请求的url协议,但不同的jvm支持的协议可能不相同(大部分支持http.file.https) //构造只判断字符串中的协议支不支持,而不判断url的正确性 URL url=n ...

  3. 161125、Java网络编程之统一资源定位符URL

    统一资源定位符URL(Uniform Resource Locator)是www客户机访问Internet时用来标识资源的名字和地址.超文本链路由统一资源定位符URL维持.URL的格式是: <M ...

  4. Java - 网络编程完全总结

    本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一.概述 ...

  5. 【转载】Java 网络编程

      本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一. ...

  6. Java网络和代理

    Java网络和代理 1)简介 在当今的网络环境中,特别是企业网络环境中,应用程序开发人员必须像系统管理员一样频繁地处理代理.在某些情况下,应用程序应该使用系统默认设置,在其他情况下,我们希望能够非常严 ...

  7. 【Java】 Java网络编程总结

     一.网络编程三要素: IP地址:每个设备在网络中的唯一标识. 端口号:每个程序在设备上的唯一标识. 协议:为计算机网络中进行数据交换而建立的规则或约定的集合. UDP: 面向无连接,数据不安全,速度 ...

  8. java 网络编程基础 1

    关于协议: 应用层网络协议包括:http,ftp,telnet,..... 传送层网络协议:使用socket封装的TCP,或UDP 端口: 用于网络通讯时传输数据时区分当前网络连接是与本机中的哪个应用 ...

  9. 开源的49款Java 网络爬虫软件

    参考地址 搜索引擎 Nutch Nutch 是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. Nutch的创始人是Doug Cutting, ...

随机推荐

  1. 美了美了!22款精美的 iOS 应用程序图标模板

    22款制作精美的 iOS 应用程序图标设计作品,遵循图形设计的现代潮流,所有图标都非常了不起,给人惊喜.通过学习这些移动应用程序图标,设计人员可以提高他们的创作,使移动用户界面看起来更有趣和吸引人. ...

  2. iOS_拨打电话/发送短信

    GitHub address : https://github.com/mancongiOS/makeACallAndSendMessage.git 功能一: 拨打电话 1.可以有提示框.提示该电话号 ...

  3. css中px,em和rem的区别

    css中px,em和rem的区别 今天,突然间发现一个特别有意思的问题,就是无意间看到一个网站中的em并不是16px,下面展开了对于px和em以及rem的探究. 首先,px是绝对长度单位,是相对于显示 ...

  4. js-计时事件

    JavaScript 一个设定的时间间隔之后来执行代码,称之为计时事件. 主要通过两个方法来实现:     1.setInterval() - 间隔指定的毫秒数不停地执行指定的代码.     2.se ...

  5. javascript之IE版本检测

    近年来随着操作系统的升级以及各种新技术的开发普及,抛弃低版本IE已经是大势所趋,这对于前端人员来时是个好消息,可以不用花费太多的时间来做低版本的兼容,很多站点采用给予低版本IE以提示的方式(恩,很友好 ...

  6. Scrum 项目1.0 2.0 3.0 4.0 5.0 6.0 7.0

    1.确定选题. 应用NABCD模型,分析你们初步选定的项目,充分说明你们选题的理由. 录制为演说视频,上传到视频网站,并把链接发到团队博客上. 截止日期:2016.5.6日晚10点 阅读教材第8章,8 ...

  7. JS中 toString() & valueOf()

    数据的转换 所有对象继承了两个转换方法: 第一个是toString(),它的作用是返回一个反映这个对象的字符串 第二个是valueOf(),它的作用是返回它相应的原始值 toString() toSt ...

  8. ASP.NEt MVC5--创建下拉列表

    Adding Search by Genre If you added the HttpPost version of the Index  method, delete it now. Next, ...

  9. 母版页 VS shtml—ASP.NET细枝末节(3)

    这算是html的重用吧? 摘自: http://www.cnblogs.com/mcad/p/4352665.html 网页很多地方长得一样,也有不一样的地方. 把网页中一样的地方,提取出来,形成一个 ...

  10. Mysql –>EF edmx(model first)–> Sql server table

    一.mysql environment When we create an new database,first We need draw er diagram for somebody to sho ...