URLConnection(三)

news2024/11/30 10:40:38

文章目录

    • 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.coloradmin.cn/o/572066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Springboot + vue的云盘系统

目录 一. 🦁 前言二. 🦁 主要技术栈三. 🦁 架构搭建1. 项目搭建效果2. 各部分作用 四. 🦁 主要功能1.功能图2. 主要功能2.1 分片上传文件2.2 存储分享记录 五. 🦁 效果显示 一. 🦁 前言 本项目是在B站学习的…

SSM 如何使用 RabbitMQ 实现消息队列

SSM 如何使用 RabbitMQ 实现消息队列 简介 在分布式系统中,消息队列是一种常见的通信方式,可以实现不同服务之间的异步通信和解耦。RabbitMQ 是一个开源的消息队列软件,本文将介绍如何在 SSM 框架中使用 RabbitMQ 实现消息队列。 本文将使…

python 自动化学习(三) 句柄获取、模拟按键、opencv安装

一、什么是句柄 句柄是在操作系统中的一种标识符,相当于我们每个人的身份证一样,句柄在电脑中也是有唯一性的,我们启动的每一个程序都有自己的句柄号,表示自己的身份 为什么要说句柄,我们如果想做自动化操作时&#xf…

【数据库复习】第六章 关系数据理论 2

若R∈BCNF 所有非主属性对每一个码都是完全函数依赖 所有的主属性对每一个不包含它的码,也是完全函数依赖 没有任何属性完全函数依赖于非码的任何一组属性 多值依赖 Teaching具有唯一候选码(C,T,B), 即全码, ∈3NF …

JAVA商城源码-B2B2C商城系统-独立部署,一套源码终身可用

在现在电商迅速占领市场的时代里,选择开发商城系统已经成为了一种趋势,现在开发搭建商城系统有很多编程语言可以选择,目前在电商里市面上受到很多商家企业的喜爱的便是Java商城系统,那为什么要选择Java电商系统呢? 1、…

linuxOPS基础_服务器构成

服务器的重要结构组成 家用电脑组成: CPU、主板、内存条、显卡、硬盘、电源、风扇、网卡、显示器、机箱、键盘鼠标等等。 CPU CPU是电脑的大脑, CPU发展史: 32 位CPU:最大的内存寻址地址2^32,大约4G的大小。 CP…

js 常用函数 push()、pop()、shift()、unshift()、slice()、splice() 等

文章目录 1. join() 函数2.push() 函数3. pop() 函数4.shift() 函数5.unshift() 函数6.sort() 函数7. reverse() 函数8. concat() 函数9.slice() 函数10. splice() 函数11. indexOf() & lastIndexOf() 函数 最近对前端一些函数的用法还不是很熟悉,有一些函数容易…

手持式网络性能测试仪应用于哪些领域及可以完成什么工作?

首先明辰智航国产网络一点通有千兆和万兆以手持式网络性能测试仪,两款仪器可以应用于以下领域: 电信运营商:用于测试网络质量、信号强度、带宽、时延、丢包率等参数,以便优化网络性能和提高用户满意度。 企业网络管理&#xff1a…

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

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

STM32F103 USB实现虚拟串口

STM32F103 USB实现虚拟串口 最近买了一个STM32F103C8T6最小核心板,使用CubeIDE无法识别该芯片,发现该芯片的flash是128Kbytes,ST的标准库是64Kbytes,奇怪啊!也许是国产替代的,国产化太先进了,导…

CCIG:智能文档处理「新未来」

文章目录 ⭐️ CCIG大会简介⭐️ 领先世界的智能文档处理技术🌟 智能图像处理:为文字识别 "增质提效" 筑基✨ 切边增强 - 提升文档图像质量✨ 弯曲矫正 - 解决图像畸变问题✨ 去摩尔纹 - 保证图像信息完整 🌟 图像预处理整体效果展…

汇编基础知识

1.汇编工程流程: 汇编指令--->编译器--->机器码--->计算机 2.汇编语言组成: 1.汇编指令 2.伪指令 3.其他符号 3.存储器: 存放指令与数据的容器,也叫内存. 存储器被划分为多个单元,并且从0开始按钮顺序编号,这些编号视为存储器的存储单元的地址. 4.指令与…

《Cocos Creator游戏实战》老虎机抽奖效果实现思路

在线体验地址 Cocos Creator | SlotMachine Cocos Store 购买地址(如果没有显示,那就是还在审核): https://store.cocos.com/app/detail/4958微店购买地址: https://weidian.com/item.html?itemID6338406353运行效果…

平板用什么远程操控电脑

现在的第三方专业远程软件大部分支持跨平台连接,要使用平板电脑远程控制电脑,还是很简单的。一般来说按照以下步骤操作即可。 确保两台设备都连接到互联网 确保您要控制的电脑和平板电脑都通过 Wi-Fi 或移动数据连接到互联网。 安装远程控制应用程序 …

设计事务所项目管理指南

在数字化的浪潮下,各行各业都面临着升级转型的问题。对设计团队而言,传统的管理方式已经无法满足日益前进的团队需求。 设计事务所可能存在的管理问题: 1,项目过程中信息流通慢,成员工作进度无法及时同步; …

结构型设计模式01-装饰模式

✨作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 装饰模式 1、 问题引入 要实现一个简单的个人形象系统,使用控制台输出的形式,简单说明搭配着装 Person pa…

【快应用】响应式布局适配横竖屏或折叠屏

【关键词】 响应式布局、折叠屏、横竖屏 【问题背景】 当前开发者在开发快应用时,往往将designWidth设置为设备屏幕的宽度,这时,应用的内容会随着设备宽度的变大而拉伸显示,导致在大屏、横屏、折叠屏展开时显示效果不好。 在折…

PMP考试应该要如何备考?如何短期通过PMP?

我从新考纲考完下来,3A通过了考试,最开始也被折磨过一段时间,但是后面还是找到了方法,也算有点经验,给大家分享一下吧。 程序猿应该是考PMP里面人最多的,毕竟有一个30大坎,大部分人还是考虑转型…

微信小程序button按钮设置宽度无效

button按钮设置宽度无效 背景: 在开发小程序的过程中,遇到了button按钮设置宽度无效的问题 微信客户端 7.0 开始,UI 界面进行了大改版。小程序也进行了基础组件的样式升级,涉及的组件有 button,icon,radio,checkbox,switch,sli…

手把手教你在昇腾平台上搭建PyTorch训练环境

PyTorch是业界流行的深度学习框架,用于开发深度学习训练脚本,默认运行在CPU/GPU上。在昇腾AI处理器上运行PyTorch业务时,需要搭建异构计算架构CANN(Compute Architecture for Neural Networks)软件开发环境&#xff0c…