27-网络编程-23-网络编程(URL&URLConnection)

/*
 * 先解释上一视频中出现的现象,即为什么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()
 * 
 */

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值