27-网络编程-23-网络编程(URL&URLConnection)
2015-08-11 17:35
525 查看
/* * 先解释上一视频中出现的现象,即为什么MyBrowser程序接收到应答消息头,而我们平时浏览器访问网页没有应答消息头? * 答:如桌面文件vedio27Internet23所示,左边是客户端(IE),右边是服务端(Tomcat),IE发送请求信息(遵循http协议) * 给Tomcat,Tomcat收到请求信息并用http解析后将反馈信息(包含:应答消息头、应答体)给客户端,IE接收后能解析应答 * 消息头中的内容(如红色字体、字号等等),然后将应答体在页面显示,这就是为什么我们平日浏览器访问网页所看到的,而看 * 不到应答消息头。 * 但是MyBrowser不能解析应答消息头,看不懂,所以索性将收到的反馈信息全部显示,这就是为什么上一视频中显示的内容。 */ /* * 根据以上,考虑给MyBrowse添加一个能解析http协议的东西,所以去API中找。在java.net包中找到如下两个类: * * (1)public final class URI extends Object implements Comparable<URI>, Serializable:表示一个统一资源【标识】符 (URI) 引用。 * * (2)public final class URL extends Object implements Serializable:类 URL 代表一个统一资源【定位】符 * * 对于URI、URL 和 URN说明: * URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是 * 因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。 */ package demo; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; public class URLDemo { public static void main(String[] args) throws MalformedURLException,IOException { //这里抛出MalformedURLException异常,因为如果str_url中瞎写,会导致无法解析 String str_url = "http://192.168.1.100:8080/myweb/1.html?name=lisi"; URL url = new URL(str_url); System.out.println("getProtocol:"+url.getProtocol());//获取协议 System.out.println("getHost:"+url.getHost());//获取主机 System.out.println("getPort:"+url.getPort());//获取端口 System.out.println("getFile:"+url.getFile());//获取文件 System.out.println("getPath:"+url.getPath());//获取路径 System.out.println("getQuery:"+url.getQuery());//获取此URL的查询部分 /* * 运行结果: * getProtocol:http * getHost:192.168.1.100 * getPort:8080 * getFile:/myweb/1.html?name=lisi * getPath:/myweb/1.html * getQuery:name=lisi */ /** * 在URL类中有如下方法: * public final InputStream openStream() throws IOException * 打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。(即获取流对象) */ InputStream in = url.openStream(); byte[] buf = new byte[1024]; int len = 0; len = in.read(buf); String text = new String(buf,0,len); System.out.println(text); //至此,成功去掉MyBrowser的应答消息头,即成功解析了应答消息头,只显示网页 } } /** * URL类的openStream()方法原理: * URLConnection conn = url.openConnection(); * InputStream in = conn.getInputStream(); * 第一句是获取url对象的url连接器对象,即将连接封装成了对象:java中内置的可以解析的具体协议的对象+socket * 第二句利用URLConnection类内的特有方法获取读取流。 * * 即先拿到URL连接器对象,之后通过获取的读取流,读取相关网页。 * * 所以这两句代码的功能等同于InputStream in = url.openStream() * */
相关文章推荐
- 27-网络编程-24-网络编程(常见网络结构)
- 27-网络编程-22-网络编程(模拟一个浏览器获取信息)
- http协议 telnet linux c http client 通讯
- 27-网络编程-20-网络编程(常见客户端和服务端)
- 27-网络编程-21-网络编程(了解客户端和服务器端原理)
- 27-网络编程-19-网络编程(TCP协议-练习-服务端多线程技术)
- 27-网络编程-17-网络编程(TCP协议-练习-上传图片客户端)
- 27-网络编程-18-网络编程(TCP协议-练习-上传图片服务端)
- 26-网络编程-15-网络编程(TCP协议-练习-常见问题)
- 26-网络编程-16-网络编程(TCP协议-练习-上传文本文件)
- 26-网络编程-14-网络编程(TCP协议-练习-文本转换服务端)
- 26-网络编程-13-网络编程(TCP协议-练习-文本转换客户端)
- 26-网络编程-12-网络编程(TCP协议-服务端和客户端交互)
- hdu 4068 福州赛区网络赛H 排列 ***
- 26-网络编程-10-网络编程(TCP协议-客户端)
- 26-网络编程-11-网络编程(TCP协议-服务端)
- 26-网络编程-09-网络编程(UDP协议-聊天程序)
- 26-网络编程-08-网络编程(UDP协议-接收端)
- 网络中的长连接和短链接
- 26-网络编程-07-网络编程(UDP协议-发送端)