URLConnection(三)

news/2024/11/29 20:36:51/

文章目录

    • 1. 配置连接
    • 2. protected URL url
    • 3. protected boolean connected
    • 4. protected boolean allowUserInteraction
    • 5. protected boolean doInput
    • 5. protected boolean doOutput
    • 6. protected boolean isModifiedSince
    • 7. protected boolean useCaches
    • 8. 超时

1. 配置连接

URLConnection类有7个保护的实例字段,定义了客户端如何向服务器做出请求。这些字段包括:

protected URL url;
protected boolean doInput= true;
protected boolean doOutput= true;
protected boolean allowUserInteraction=defaultAllowUserInteraction;
protected long ifModifiedSince=0;
protected boolean connected=false;

如果doOutput为true,那么除了通过这个URLConnection读取数据外,还可以将数据写入到服务器,如果useCaches为false,连接会绕过所有本地缓存,重新从服务器下载文件,由于这些字段都是保护字段,所以他们的值都需要通过相应的设置方法和获取方法来访问和修改(Get和set方法)。注意只能在URLConnection连接之前修改这些字段,如果连接方法已经打开再去设置这些属性会抛出IllegalStateException异常。还有一些方法和设置方法定义了所有URLConnetion实例的默认行为:

public boolean getDefaultUseCaches()
public void setDefaultUseCaches()
public static void setDefaultAllowUserInteraction(boolean defaultAllowUserInteraction)
public static boolean getDefaultAllowUserInteration()
public static FileNameMap getFileNameMap()
public static void setFileNameMap(FileNameMap map) 

这些方法可以在任何时候调用,新的默认值只应用于设置这些新默认值之后构造的URLConnection

2. protected URL url

url字段指定了这个URLConnection连接的URL,构造函数会在创建URLConnection时设置这个字段,此后不再改变,可以通过调用getURL方法获取这个字段的值。

public class Main{public static void main(String[] args) {try{URL u=new URL("http://www.baidu.com");URLConnection uc=u.openConnection();System.out.println(uc.getURL());}catch(IOException e){System.err.print(e);}}
}

在这里插入图片描述

3. protected boolean connected

如果连接已经打开,boolean字段connected为true,如果连接关闭,这个字段则为false,由于在创建一个新的URLConnection对象时连接尚未打开,所以其初始值为false。这个变量只能由URLConnection和其子类访问。当我们实现自己的URLConnection,定义自己的协议处理器时,一定要将connected变量在打开连接时设置为true,断开时设置为false

4. protected boolean allowUserInteraction

有些URLConnection需要与用户交互,例如,Web浏览器可能需要访问用户名和口令。这个字段的作用就是指明是否运行与用户交互。这个变量时保护类型,不过公共方法getAllowUserInteraction()可以读取它的值,公共方法setAllowUserInteraction可以修改它的值。

public class Main{public static void main(String[] args) {try{URL u=new URL("http://www.baidu.com");URLConnection uc=u.openConnection();System.out.println(true);uc.setAllowUserInteraction(false);System.out.println(uc.getAllowUserInteraction());}catch(IOException e){System.err.print(e);}}
}

在这里插入图片描述
静态方法getDefaultAllowUserInteraction()和setDefaultAllowUserInteraction()确定了URLConnection对象在没有显示设置allowUserInteraction时的默认行为。由于是静态变量,所以它归类所有,所以一旦设置了这个值,那么以后该类创建的所有实例都会是我们设置的值。

5. protected boolean doInput

URLConnection可以用于读取服务器,写入服务器,或者同时读/写服务器。如果URLConnection可以用来读取,保护字段boolean字段doInput就为true,否则为false。默认值为true,要访问这个保护类型的字段,可以使用getDoInput和setDoInput公共方法:

public class Main{public static void main(String[] args) {try{URL u=new URL("http://www.baidu.com");URLConnection uc=u.openConnection();System.out.println(uc.getDoInput());uc.setDoInput(false);System.out.println(uc.getDoInput());}catch(IOException e){System.err.print(e);}}
}

在这里插入图片描述

5. protected boolean doOutput

程序可以使用URLConnection将输出发回服务器。例如,如果程序需要使用POST方法向服务器发送数据,可以通过URLConnection获取输入流来完成。如果URLConnection可以用于写入,保护字段diOutput为true,否则为false,默认值为false。

public class Main{public static void main(String[] args) {try{URL u=new URL("http://www.baidu.com");URLConnection uc=u.openConnection();System.out.println(uc.getDoOutput());uc.setDoOutput(true);System.out.println(uc.getDoOutput());}catch(IOException e){System.err.print(e);}}
}

在这里插入图片描述

6. protected boolean isModifiedSince

许多客户端会保留以前获取的文档的缓存,如果用户再次要求相同的文档,可以从缓存中获取。不过在最后一次获取这个文档之后,服务器上的文档可能会改变。要判断是否变化,唯一的办法就是询问服务器,客户端可以在请求的HTTP首部中包括一个If-Modified-since字段。如果文档在这个时期之后有所修改,服务器就会重新发送文档。

public class Main{public static void main(String[] args) {try{URL u=new URL("https://cn.bing.com/images/search?view=detailV2&ccid=NbNA%2b6Dd&id=A8B2DC84897469538E9EA1DD121D729451F327D6&thid=OIP.NbNA-6DdfGdvGbWOOCnsYwHaC9&mediaurl=https%3a%2f%2fcache.yisu.com%2fupload%2finformation%2f20200318%2f105%2f36606.jpg&exph=320&expw=800&q=java%e4%b8%ad%e4%b8%80%e4%b8%aa%e7%b1%bb%e7%9a%84protected%e6%96%b9%e6%b3%95%e6%80%8e%e4%b9%88%e8%ae%bf%e9%97%ae&simid=608026954256625774&FORM=IRPRST&ck=B0545A260FD37C81DCCC61BBEF40FD32&selectedIndex=6&ajaxhist=0&ajaxserp=0");URLConnection uc=u.openConnection();System.out.println("Original if modified since:"+new Date(uc.getIfModifiedSince()));}catch(IOException e){System.err.print(e);}}
}

在这里插入图片描述

7. protected boolean useCaches

有些客户端可以从本地缓存中获取文档,而不是从服务器中获取。applet可以访问浏览器缓存。如果有缓存,useCaches变量确定了是否可以使用缓存,默认值为true,表示将使用缓存,否则为false。

public class Main{public static void main(String[] args) {try{URL u=new URL("https://cn.bing.com/images/search?view=detailV2&ccid=NbNA%2b6Dd&id=A8B2DC84897469538E9EA1DD121D729451F327D6&thid=OIP.NbNA-6DdfGdvGbWOOCnsYwHaC9&mediaurl=https%3a%2f%2fcache.yisu.com%2fupload%2finformation%2f20200318%2f105%2f36606.jpg&exph=320&expw=800&q=java%e4%b8%ad%e4%b8%80%e4%b8%aa%e7%b1%bb%e7%9a%84protected%e6%96%b9%e6%b3%95%e6%80%8e%e4%b9%88%e8%ae%bf%e9%97%ae&simid=608026954256625774&FORM=IRPRST&ck=B0545A260FD37C81DCCC61BBEF40FD32&selectedIndex=6&ajaxhist=0&ajaxserp=0");URLConnection uc=u.openConnection();System.out.println(uc.getUseCaches());uc.setUseCaches(false);System.out.println(uc.getUseCaches());}catch(IOException e){System.err.print(e);}}
}

在这里插入图片描述
getDefaultUseCaches()和setDefaultUseCaches()这两个方法定义了useCached字段的初始值。虽然不是静态方法,但这些方法确实能设置和获得一个静态字段,以后该类的所有URLConnection实例都会设置为我们设置的默认行为。

8. 超时

有四个方法可以查询和修改连接的超时值,也就是说,底层Socket等待远程服务器的响应时间,等待时间超过我们设置的时间就会抛出SocketTimeoutException异常

public void setConnectTimeout(int timeout)
public int getConnectTimeout()
public void setReadTimeout(int timeout)
public int getReadTimeout()

setConnectTimeout(int timeout)和getConnectTimeout()控制socket等待建立连接的时间。setReadTimeout(int timeout)和getReadTimeout()控制输入流等待数据到达的时间,所有的这四个方法都以毫秒为单位,这四个方法都将0解释为用不超时。如果超时值为负数,两个设置方法会抛出IllegalArgumentException异常。

public class Main{public static void main(String[] args) {try{URL u=new URL("https://cn.bing.com/images/search?view=detailV2&ccid=NbNA%2b6Dd&id=A8B2DC84897469538E9EA1DD121D729451F327D6&thid=OIP.NbNA-6DdfGdvGbWOOCnsYwHaC9&mediaurl=https%3a%2f%2fcache.yisu.com%2fupload%2finformation%2f20200318%2f105%2f36606.jpg&exph=320&expw=800&q=java%e4%b8%ad%e4%b8%80%e4%b8%aa%e7%b1%bb%e7%9a%84protected%e6%96%b9%e6%b3%95%e6%80%8e%e4%b9%88%e8%ae%bf%e9%97%ae&simid=608026954256625774&FORM=IRPRST&ck=B0545A260FD37C81DCCC61BBEF40FD32&selectedIndex=6&ajaxhist=0&ajaxserp=0");URLConnection uc=u.openConnection();uc.setConnectTimeout(30000);uc.setReadTimeout(5000);}catch(IOException e){System.err.print(e);}}
}

http://www.ppmy.cn/news/88965.html

相关文章

[PyTorch][chapter 35][经典卷积神经网络-1 ]

前言: ILSVRC(ImageNet Large Scale Visual Recognition Challenge)是近年来机器视觉领域最受追捧也是最具权威的学术竞赛之一,代表了图像领域的最高水平。 ImageNet数据集是ILSVRC竞赛使用的是数据集,由斯坦福大学李…

手机号码在网时长 API 实现广告投放和精准营销案例分析

引言 手机在网时长是指用户在移动网络上的在线时间,包括用户接入网络的时间和断开网络的时间。手机在网时长 API 是一种提供手机在网时长数据的编程接口,为开发者和服务提供商提供了获取和利用这些数据的能力。 本文旨在深入探讨手机在网时长 API 的技…

ElasticSearch 快速上手教程(一)—— ES 的安装

简介 ElasticSearch 是一个开源的搜索引擎,基于 Lucene 开发与构建,是当前流行的企业级搜索引擎,在许多应用场景当中都有使用,如商品全文检索,书籍关键字查询等。在这个系列的文章,会带你从零到一&#xf…

DATAV通过配置nginx代理实现https访问

DATAV通过配置nginx代理实现https访问 首先要确保你的 datav 和 datav_proxy 的界面能用http正常访问 在nginx中添加datav配置 server {listen 8181 ssl;server_name localhost;ssl_certificate server.crt;ssl_certificate_key server.key;ssl_session_cache …

RestCloud荣膺广东省优秀软件产品奖,引领国内数据集成领域!

近日,“2022年广东软件风云榜”名单公布,“谷云ETL数据交换软件”凭借其在助力企业数字化转型升级过程中的卓越表现,荣获由羊城晚报报业集团、广东软件行业协会、广东省大数据协会联合颁发的“优秀软件产品和解决方案”奖。 数字化转型是推动…

04_GC垃圾回收

面试题: JVM内存模型以及分区,需要详细到每个区放什么 堆里面的分区:Eden,survival from to,老年代,各自的特点。 GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分…

如何在华为OD机试中获得满分?Java实现【寻找相似单词】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

jetson nano csi摄像头 tensorrt 运行yolov8检测

jetson nano csi摄像头 tensorrt 运行yolov8检测 1. 在本地电脑训练环境下将onnx模型导出yolov8 导出onnx 模型使用onnxsim优化onnx 模型2. 在jetson nano下 转换到tensorrt模型配置好环境后 使用trtexec 生成engine使用python tensorrt 读取csi摄像头进行预测1. 在本地电脑训练…