网络编程|基于URL的网络编程

一、URL基础认识

1、定义

URL(Uniform Resource Location),称为统一资源定位符,是指向互联网“资源”的指针。
资源:简单的文件或目录;对更为复杂的对象的引用。 (如:对数据库或搜索引擎的查询结果)

2、URL类

由的java.net包提供。

  • 一个URL对象封装了一个具体资源的引用,有了这个引用就可以访问对应的资源。

3、一个完整的URL格式

协议名://主机地址[:端口号][/资源路径][/资源对象]

  • 协议名:访问该网络资源所采用的协议(如:http,ftp等)
  • 主机地址:网络资源所在的服务器地址,可以使用域名或IP地址(如:www.baidu.com
  • 端口号:连接主机服务的进程端口
    注:①如果省略,则默认相关协议的熟知端口。(如:http协议的熟知端口是80,ftp的熟知端口是25);
    ②如果相关服务协议不使用熟知端口,则一定要给出端口号
  • 资源路径:资源对象所在的路径。(如果省略,则为默认路径)
  • 资源对象: 待访问的资源。(如:文件名。如果省略,则为默认资源对象)

4、创建一个URL对象(两种构造方法)

①public URL(String spec) throws MalformedURLException

spec:待解析的字符串形式的URL

try{
 		URL url = new URL("http://www.163.com:80/index.html")
 }catch(MalformedURLException e){
 		System.out.println("URL error!");
}
②public URL(String protocal,String host,int port,String file) throws MalformedURLException

分别给出了 访问的协议、 主机地址、 端口 和 资源对象 等参数。

③public URL(String protocol, String host, String file) throws MalformedURLException

使用指定的协议、主机名、文件名创建URL,端口使用协议的默认端口。

二、URL类的方法

方法 描述
public String getPath() 返回URL路径部分
public String getQuery() 返回URL查询部分
public int getPort() 返回URL端口部分
public int getDefaultPort() 返回协议的默认端口号。
public String getProtocol() 返回URL的协议
public String getHost() 返回URL的主机
public String getFile() 返回URL文件名部分
public String getRef() 获取此 URL 的锚点(也称为"引用")。
public URLConnection openConnection() throws IOException 打开一个URL连接,并运行客户端访问资源。

实例:

import java.net.*;
import java.io.*;

public class Method {
	public static void main(String[] args) {
		try {
			URL url = new URL("http://www.runoob.com/index.html?language=cn#j2se");
			System.out.println("URL为:" + url.toString());
			System.out.println("协议为:" + url.getProtocol());
			System.out.println("验证信息:" + url.getAuthority());
			System.out.println("文件名及请求参数:" + url.getFile());
			System.out.println("主机名:" + url.getHost());
			System.out.println("路径:" + url.getPath());
			System.out.println("端口:" + url.getPort());
			System.out.println("默认端口:" + url.getDefaultPort());
			System.out.println("请求参数:" + url.getQuery());
			System.out.println("定位位置:" + url.getRef());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

在这里插入图片描述

三、网络资源访问

1、当创建成功一个URL对象后,就可以通过输入流来完成对资源的访问。

方法:
public final InputStream openStream() throws IOException
可以获得输入流,用于客户端从服务器读取

2、实例

  • 从命令窗口读取一个网络资源(网页),并显示该资源的内容。
import java.net.*;
import java.io.*;
import java.util.*;

public class Example1 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);// 创建一个输入对象
		URL url;// 创建一个URL对象
		InputStream in;// 创建一个输入流
		String addr;// URL地址的字符串表示
		String str;// 输入流的字符串表示
		System.out.println("请输入一个URL地址");
		addr = scanner.nextLine();// 从键盘读取一个URL字符串

		try {
			url = new URL(addr);// 创建URL对象
			in = url.openStream();// 根据URL对象创建输入流
			byte[] b = new byte[1024];
			int n = -1;
			while ((n = in.read(b)) != -1) {
				str = new String(b, 0, n, "UTF-8");
				System.out.print(str);
			}
		} catch (Exception e) {
			System.out.println(e);
		}

	}
}

四、URLConnection类

1、openConnection() 返回一个 java.net.URLConnection。

例如:

  • 如果你连接HTTP协议的URL, openConnection() 方法返回 HttpURLConnection 对象。
  • 如果你连接的URL为一个 JAR 文件, openConnection() 方法将返回 JarURLConnection 对象。
  • 等等…

2、常用方法

方法 描述
Object getContent() 检索URL链接内容
Object getContent(Class[] classes) 检索URL链接内容
String getContentEncoding() 返回头部 content-encoding 字段值。
int getContentLength() 返回头部 content-length字段值
String getContentType() 返回头部 content-type 字段值
int getLastModified() 返回头部 last-modified 字段值。
long getExpiration() 返回头部 expires 字段值。
long getIfModifiedSince() 返回对象的 ifModifiedSince 字段值。
public void setDoInput(boolean input) URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。
public void setDoOutput(boolean output) URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。
public InputStream getInputStream() throws IOException 返回URL的输入流,用于读取资源
public OutputStream getOutputStream() throws IOException 返回URL的输出流, 用于写入资源。
public URL getURL() 返回 URLConnection 对象连接的URL

3、实例

在控制台打印指定网页的 HTML 内容。
import java.net.*;
import java.io.*;

public class URLConDemo {
	public static void main(String[] args) {
		try {
			URL url = new URL("http://www.baidu.com");
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();

			BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
			String urlString = "";
			String current;
			while ((current = in.readLine()) != null) {
				urlString += current;
			}
			System.out.println(urlString);

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/Geekst/article/details/89392455
今日推荐