URI (uniform resource identifier)统一资源标志符;
URL(uniform resource location )统一资源定位符(或统一资源定位器);
URI是一个相对来说更广泛的概念,URL是URI的一种,是URI命名机制的一个子集,可以说URI是抽象的,而具体要使用URL来定位资源。
URI指向的一般不是物理资源路径,而是整个系统中的映射后的资源标识符。
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
一.先来序言一段
我们习惯了http
URL url=new URL("http://www.apptest.com:8080/test/ios.php");
我们也要习惯
"https", "ftp", "mailto", "telnet", "file", "ldap", "gopher", "jdbc", "rmi", "jndi", "jar", "doc", "netdoc", "nfs", "verbatim", "finger", "daytime",
"systemresource"
当然,我们还要让URL习惯我们
URL url=new URL("oschina://www.apptest.com:8080/test/ios.php");
如果不习惯,总会出现如下异常
java.net.MalformedURLException: unknown protocol
在Android浏览器使用Ajax时也会不支持没有定义的过的协议。
二.协议的自定义的理解
协议:在编程的世界里,协议本身就是一套Input/ouput约束规则,因此,我们确切的协议应该围绕I/O展开的,所以,这里的协议可以称为I/O协议。
协议发起方:request
协议响应方:response
协议成立的条件是:request和reponse认可同一套协议,并按照协议约束进行通信。
三.自定义协议与URL的关系
在java中,自定义协议一定需要用URL吗?
答案是否定的。
事实上,围绕I/O,我们的规则定义完全有我们本身掌握,并没有说离开URL地球不转了,Java要毁灭了。
为什么使用URL类来自定义协议?
答案是因为URL是一套成熟的协议通信处理框架。
这里说的自定义URL协议,实质上更多的是通过已有的规则进行扩充协议。
四.URL自定义私有协议实战
我们知道,自定义协议需要Response 和Request,双方需要充理解对方的协议。这里为了方便起见,我们使用Http协议服务器来作为Response。
这里我们使用了Ngnix服务器+PHP+FastCGI来构建Reponse,部署代码如下
1.定义Response
<?php
$raw_post_data = file_get_contents('php://input', 'r');
echo "-------\$_POST------------------\n<br/>";
echo var_dump($_POST) . "\n";
echo "-------php://input-------------\n<br/>