URLConnection(三)

news/2024/4/29 0:19:07/文章来源:https://blog.csdn.net/qq_43456605/article/details/130885630

文章目录

    • 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.luyixian.cn/news_show_306533.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++实现插入排序、希尔排序、冒泡排序、快速排序、选择排序】

使用C实现来插入排序、希尔排序、冒泡排序、快速排序、选择排序算法。 一、插入排序 插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好…

有哪些pdf转word的免费软件?这个办法值得一试

在日常工作和学习中,我们经常需要将PDF文件转换为Word文档。尤其是在需要编辑PDF文档中的内容时,将其转换为Word文档是非常必要的。但是,很多人不知道该如何快速完成这项任务。在本文中,我们将介绍一些简单的转换方式,…

服务器被勒索病毒攻击怎么办,如何进行勒索病毒解密与预防工作?

在当今社会中服务器已经成为企业关键数据存储和传输的重要载体,同样也成为黑客攻击和勒索病毒的首要目标。一旦服务器被勒索病毒攻击,企业的正常运转与经济利益和核心数据都将受到威胁。下面将为大家介绍一下服务器被勒索病毒攻击后应该采取怎样的措施及…

VanillaNet:深度学习极简主义的力量

摘要 基础模型的核心是“更多不同”的理念,计算机视觉和自然语言处理方面的出色表现就是例证。然而,Transformer模型的优化和固有复杂性的挑战要求范式向简单性转变。在本文中,我们介绍了VanillaNET,这是一种设计优雅的神经网络架…

vite-plugin-pwa配置详解

vite-plugin-pwa配置详解 前提:前端域名和后端服务域名相同时,用window.open新开页面下载或者导出文件,项目中导出和下载功能失效,原因是,域名相同走缓存 实现service worker离线缓存以前需要自己编写sw.js文件内容&…

npm更换成淘宝镜像源及cnpm使用

1.需求由来 由于node安装插件是从国外服务器下载,受网络影响大,速度慢且可能出现异常。所以如果npm的服务器在中国就好了,所以我们乐于分享的淘宝团队(阿里巴巴旗下业务阿里云)干了这事。来自官网:“这是一…

AnsiConsole-能够编写 ANSI 转义序列的控制台

Spectre.Console 是一款 .NET 库,提供了一种简单但强大的方式来创建美观和交互式的控制台应用程序。它允许开发人员轻松构建具有颜色、表格、进度条等功能的富命令行界面 (CLI)。 功能 Spectre.Console 的一些显着功能包括: 颜色:Spectre.C…

单片机GD32F303RCT6 (Macos环境)开发 (二十八)—— 蓝牙透传模块HC-08 Android App开发

蓝牙透传模块HC-08 Android App开发 1、App整体开发思路 a、首先要申请权限,采用动态申请的方式,用户点击确认后方可操作蓝牙。 b、搜索蓝牙,之前的版本用startLeScan函数搜索蓝牙,虽然高版本中依然可用,但是google已…

4.Ansible Inventory介绍及实战 - A list or group of lists nodes

什么是inventory? 官方解释:Ansible automates tasks on managed nodes or “hosts” in your infrastructure, using a list or group of lists known as inventory. Ansible可以同时与您基础设施中的一个或多个系统协同工作。为了与多台服务…

接口测试的请求和响应

接口测试的请求和响应 在软件开发中,接口测试是必不可少的一环节。接口测试主要涉及到测试请求和响应的过程。请求是指客户端向服务器发送的一些指令或数据,而响应则是服务器对这些请求做出的回应。 请求通常包括请求方法、请求头以及请求体。请求方法有…

【什么是iMessage苹果推?】什么是苹果推信?什么是苹果推?

挑选得当的IM推送平台:选择合用于PC真个IM推送平台 开辟或集成API:依照所选平台的开发文档,利用响应的编程语言(如Python、Java等)开发或集成API,以便与平台举行交互和节制。API可用于建立、办理和发送消息…

【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(二)

【写在前面】 之前和大家分享过一下HarmonyOS应用开发相关问题,今天继续和大家分享! 【前提简介】 本文档主要总结HarmonyOS开发过程中可能遇到的一些问题解答,主要围绕HarmonyOS展开,包括但不限于不同API版本HarmonyOS开发、UI…

单体项目偶遇并发漏洞!短短一夜时间竟让老板蒸发197.83元

事先声明:以下故事基于真实事件而改编,如有雷同,纯属巧合~ 眼下这位正襟危坐的男子,名为小竹,他正是本次事件的主人公,也即将成为熊猫集团的被告,嗯?这究竟怎么一回事?欲…

Linux网络编程—Day10

Linux服务器程序规范 Linux服务器程序一般以后台进程形式运行。后台进程又称守护进程。它没有控制终端,因而也不会意外接收到用户输入。 守护进程的父进程通常是init进程(PID为1的进程);Linux服务器程序通常有一套日志系统&#…

设备快线客户端软件V1.0用户手册

1.前言欢迎使用设备快线客户端软件产品。设备快线客户端软件简称DYClient,DYClient客户端是东用科技有限公司推出的一款用于远程维护的控制软件,主要为客户远程访问现场终端设备提供便捷的接入服务,并且通过DYClient客户端软件用户可以非常方便快捷的访问…

基于RetinaNet和TensorFlow Object Detection API实现目标检测(附源码)

文章目录 一、RetinaNet原理二、RetinaNet实现1. tf.train.CheckPoint简介2. RetinaNet的TensorFlow源码 一、RetinaNet原理 待补充 二、RetinaNet实现 1. tf.train.CheckPoint简介 待补充 2. RetinaNet的TensorFlow源码 Step 1:安装Tensorflow 2 Object Detect…

云原生之深入解析Docker容器退出码的含义和产生原因

一、前言 为什么我的容器没有运行?回答这个问题之前,需要知道 Docker 容器为什么退出?退出码会提示容器停止运行的情况?本文列出最常见的退出码,来回答两个重要问题:这些退出码是什么意思?导致该退出码的动作是什么?exit code:代表一个进程的返回码,通过系统调用 exi…

chatgpt赋能python:Python修改密码:一种安全可靠、快速高效的方式

Python 修改密码:一种安全可靠、快速高效的方式 在数字化时代,越来越多的信息被存储在计算机系统中,因此密码的保护变得尤为重要。人们需要保证他们的密码是安全可靠的,并定期更换密码。Python作为一种强大而且通用的编程语言&am…

iOS-最全的App上架教程

App上架教程 在上架App之前想要进行真机测试的同学,请查看《iOS- 最全的真机测试教程》,里面包含如何让多台电脑同时上架App和真机调试。 P12文件的使用详解 注意: 同样可以在Build Setting 的sign中设置证书,但是有点麻烦&…

生态伙伴 | 携手深圳科创学院,持续推动项目落地与成长

01 大赛介绍 中国硬件创新创客大赛始于2015年,由深圳华秋电子有限公司主办,至今已经成功举办八届,赛事范围覆盖华南、华东、华北三大地区,超10个省市区域。 大赛影响了超过45万工程师群体,吸引了35000多名硬创先锋报…