发布时间:2025-12-10 11:44:07 浏览次数:9
这篇文章,主要介绍一下JDK中的URL和URLConnection类及其相关方法。
目录
一、URL和URLConnection
1.1、URL介绍
(1)什么是URL
(2)创建URL对象
(3)openConnection方法
1.2、URLConnection介绍
(1)什么是URLConnection
(2)connect方法
(3)disconnect方法
1.3、建立连接之前调用的方法
(1)setConnectTimeout方法
(2)setReadTimeout方法
(3)setDoOutput方法
(4)setDoInput方法
(5)setUseCaches方法
(6)setRequestMethod方法
(7)setRequestProperty方法
1.4、建立连接之后调用的方法
(1)getOutputStream方法
(2)getInputStream方法
(3)getResponseCode方法
(4)getResponseMessage方法
(5)getHeaderField方法
1.5、HttpUtil工具类
(1)HttpUtil实现代码
URL,它是位于【java.net】包下面的一个类,该类主要是对资源地址的一个抽象表示,URL英文全称是:【Uniform Resource Locator】,中文含义表示【统一资源定位符】。
什么是统一资源定位符呢???
在计算机的世界里面,我们所能够看到的所有的信息,图片,视频等等,它们都是存在不同的计算机上面的,我们把这些信息统称为:【资源】。我们要想通过浏览器就能够找到对应的资源,那就需要根据统一资源定位符找到该资源的具体位置,然后从这个位置下载到浏览器本地,这也是统一资源定位符的主要作用,即:规定某个资源的唯一路径位置。
URL组成结构
一个URL地址,通常由下面几个部分组成:
完整写出来就是这个样子的:【协议://IP地址:PORT端口/uri资源标识?query请求参数】。
而Java中就提供了一个URL类,该类就是对URL地址的一个抽象表示。
URL类中,提供了多个重载的构造方法,我们可以直接通过构造方法来创建一个URL对象,一般情况下,我们直接使用一个参数的构造方法即可。
URL类中提供了一个openConnection()方法,该方法的主要作用就是:创建一个URL地址的连接对象,openConnection方法的返回值类型是URLConnection,该类是JDK中提供的另外一个URL链接的抽象。
通过(2)、(3)两个步骤,这个时候,我们就建立好了客户端和URL之间的链接,如下图所示:
URL类里面,常用的方法就只有openConnection(),其他的方法在URLConnection类里面也有相应的实现,下面我们看下URLConnection类。
URLConnection是位于【java.net】包下的一个抽象类,这个抽象类是对URL链接的一个抽象表示,它具有多种不同的具体子类,其中常见的是HttpURLConnection,这个类可以实现HTTP协议的链接访问(一般HTTP接口的调用就可以使用这个来实现)。
URLConnection,可以简单的理解为是一个建立在客户端机器和服务端机器之间的一个桥梁,客户端和服务端的数据通信(也就是传输数据)就是通过这个URLConnection对象来实现的,该类中定义了一些通信过程中的公用的方法。
下面介绍一下URLConnection类中的常用方法,这里就按照HttpURLConnection类中的方法为案例(HttpURLConnection也是位于java.net包下的一个抽象类)。
URLConnection类中可以大致分为两类方法,分别是:
首先介绍和服务器端建立链接的方法,方法名称是【connect()】。
connect()方法作用就是将客户端和服务器端建立起一个链接,建立链接之后就可以真正的进行数据通信啦。connect()方法是一个没有返回值的。
public class URLDemo {public static void main(String[] args) throws IOException {String path = "https://cn.bing.com/";// 创建 URL 对象URL url = new URL(path);// 创建 URLConnection 对象HttpURLConnection conn = (HttpURLConnection) url.openConnection();// TODO 建立链接之前做一些处理,例如:设置一些链接信息,发送数据到服务器// TODO 和服务器建立链接conn.connect();// TODO 建立链接之后做一些处理,例如:从服务器读取数据}}调用connect()方法之后,可以理解成下图这个样子。
disconnect()方法作用:断开客户端和服务器端的URL链接,这个方法一般都是放在finally语句块里面,这样子可以确保链接一定被断开。
public class URLDemo {public static void main(String[] args) throws IOException {HttpURLConnection conn = null;try {String path = "https://cn.bing.com/";// 创建 URL 对象URL url = new URL(path);URLConnection conn2 = url.openConnection();// 创建 URLConnection 对象conn = (HttpURLConnection) conn2;// TODO 建立链接之前做一些处理,例如:设置一些链接信息,发送数据到服务器// TODO 和服务器建立链接conn.connect();// TODO 建立链接之后做一些处理,例如:从服务器读取数据} finally {if (conn != null) {// 断开链接conn.disconnect();}}}}setConnectTimeout(int timeout)方法作用:设置客户端和服务端建立链接的超时时间,如果建立链接的时间超过指定的timeout时间(单位:毫秒),那么就会抛出异常。
public class URLDemo {public static void main(String[] args) throws IOException {String path = "https://cn.bing.com/";// 创建 URL 对象URL url = new URL(path);// 创建 URLConnection 对象HttpURLConnection conn = (HttpURLConnection) url.openConnection();// TODO 建立链接之前做一些处理,例如:设置一些链接信息,发送数据到服务器// 设置超时时间是 3000 毫秒,即:3秒conn.setConnectTimeout(3000);// TODO 和服务器建立链接conn.connect();// TODO 建立链接之后做一些处理,例如:从服务器读取数据}}setReadTimeout(int timeout)方法作用:设置客户端从服务器端的输入流中,读取数据的超时时间(单位:毫秒),读取数据花费的时间超过指定timeout时间,则会抛出超时异常。
// 设置读取数据超时时间是 3000 毫秒,即:3秒conn.setReadTimeout(3000);// TODO 和服务器建立链接conn.connect();setDoOutput(boolean flag)方法作用:设置客户端链接是否支持向服务器端输出数据,即:是否允许发送数据到服务器端,默认是false。
// 是否允许发送数据到服务器端conn.setDoOutput(true);// TODO 和服务器建立链接conn.connect();setDoInput(boolean flag)方法作用:设置客户端链接是否支持从服务器端读取数据,即:是否允许接收服务器端发送过来的数据,默认是false。
// 是否允许接收服务器端发送过来的数据conn.setDoInput(true);// TODO 和服务器建立链接conn.connect();setUseCaches(boolean flag)方法作用:设置是否开启缓存,默认取值是true,一般情况下,我们都会设置为false。
// 设置是否开启缓存conn.setUseCaches(false);// TODO 和服务器建立链接conn.connect();setRequestMethod(String method)方法作用:设置客户端的HTTP请求方式,HTTP请求方式有七种,分别是:【"GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"】。
注意:setRequestMethod()方法是HttpURLConnection类中的方法,它不属于URLConnection类。
// 设置 HTTP 的请求方式conn.setRequestMethod("POST");// TODO 和服务器建立链接conn.connect();setRequestProperty(String key,String value)方法作用:设置请求的属性,对于HTTP请求来说,就可以设置HTTP请求头相关的信息,例如:Content-Type、Accept等属性。该方法可以多次调用,由于设置多个请求属性。
// 设置请求属性conn.setRequestProperty("Content-Type", "application/json");conn.setRequestProperty("Accept", "application/json");// TODO 和服务器建立链接conn.connect();上面这些是建立链接之前使用的方法,一定要在connect()方法之前使用,一定要在connect()方法之前使用,一定要在connect()方法之前使用。
getOutputStream()方法作用:获取输出流对象,通过该输出流对象可以发送数据到服务器端。
// TODO 和服务器建立链接conn.connect();// TODO 建立链接之后做一些处理,例如:从服务器读取数据// 获取输出流,用于发送数据给服务器端OutputStream out = conn.getOutputStream();// 发送out.write("这是发送的数据内容".getBytes(StandardCharsets.UTF_8));// 刷新缓冲区out.flush();// 关闭流out.close();getInputStream()方法作用:获取输入流对象,用于从服务器端读取数据,一般情况下,为了提高读取数据的效率,都会结合BufferedReader缓冲字符流使用。
// TODO 和服务器建立链接conn.connect();// 获取输入流,用于读取数据InputStream is = conn.getInputStream();InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);BufferedReader br = new BufferedReader(isr);// 保存读取的数据字符串StringBuilder sb = new StringBuilder();String line = null;// 循环读取数据while ((line = br.readLine()) != null) {sb.append(line);}System.out.println("从服务器中读取的数据内容是: ");System.out.println(sb);注意:前面两个方法,必须在connect()方法之后使用,并且下面这些方法必须在上面两个方法之后使用。
getResponseCode()方法作用:返回请求的响应状态码,返回值是一个int类型数字。
// TODO 和服务器建立链接conn.connect();// TODO 建立链接之后做一些处理,例如:从服务器读取数据int code = conn.getResponseCode();getResponseMessage()方法作用:获取请求响应的提示信息。
// TODO 和服务器建立链接conn.connect();// 获取状态信息String msg = conn.getResponseMessage();System.out.println(msg);getHeaderField(String name)方法作用:获取请求响应头中的属性,例如:Content-Type等HTTP响应头属性。
// TODO 和服务器建立链接conn.connect();// 获取响应头属性String field = conn.getHeaderField("Content-Type");System.out.println(field);前面学会了URL和URLConnection类,那么我们就可以自己实现一个请求HTTP接口的工具类,即:HttpUtil。
综上,这篇文章结束了,主要介绍一下JDK中的URL和URLConnection类及其相关方法。