文章目录

  • 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);}}
}

URLConnection(三)相关推荐

  1. java调用url505_JAVA中三种URL连接方法

    Java的网络类可以让你通过网络或者远程连接来实现应用.而且,这个平台现在已经可以对国际互联网以及URL资源进行访问了.Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷.我们通 ...

  2. URI和URLConnection类的区别

    URI和URLConnection类的区别 (1) URI格式 通用资源标志符(Universal Resource Identifier, 简称"URI") 就Android平台 ...

  3. Jersey框架三:Jersey对HTTPS的支持

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  4. urlconnection java_Java 网络编程:必知必会的 URL 和 URLConnection

    java.net.URL 类将 URL 地址进行了封装,并提供了解析 URL 地址的基本方法,比如获取 URL 的主机名和端口号.java.net.URLConnection 则代表了应用程序和 UR ...

  5. 让 Android WebView 支持文件下载的三种解决方案

    最近在开发的过程中遇到一个需求,那就是让 WebView 支持文件下载,比如说下载 apk.WebView 默认是不支持下载的,需要开发者自己实现.既然 PM 提出了需求,那咱就撸起袖子干呗,于是乎在 ...

  6. android和网络连接相关的类URL,URLConnection,HttpURLConnection,HttpClient

    这几个类都是用于和服务器端的连接,有些功能都能够实现,关系是: 一.URL URL标识着网络上的一个资源:该类包含一些URL自身的方法,如获取URL对应的主机名称,端口号,协议,查询字符串外,还有些方 ...

  7. JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!

    JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...

  8. 三种方式让 Android WebView 支持文件下载

    三种方式让 Android WebView 支持文件下载 最近在开发的过程中遇到一个需求,那就是让 WebView 支持文件下载,比如说下载 apk.WebView 默认是不支持下载的,需要开发者自己 ...

  9. Tomcat学习笔记(三)—— Server组件

    前面已经初步了解了Server组件是什么东西及其作用.在这里进一步对Server组件进行研究学习. Server组件 从Tomcat的层次结构中已经知道Server组件是Tomcat最顶层组件,它可以 ...

最新文章

  1. 西安电子科技大学计算机全国排名第几,全国五所电子类高校排名,北京邮电大学排名第三...
  2. 怎么用python画简单的图-使用Python中的Turtle库绘制简单的图形
  3. linux命令录制,怎样在Linux上录制你的终端操作及回放
  4. 漫说单例模式--宝宝成长记 你真的了解了吗?
  5. 使用ASM 4处理Java类文件–第一部分:世界,您好!
  6. 设置最大值_变频器用远传压力表控制恒压供水参数设置
  7. python库读取cif文件_Pymatgen读/写各种文件,pymatgen,读写
  8. 修改文件中的内容,使用fileinput模块
  9. 9种常见的前端跨域解决方案(详解)
  10. Spring Globle Transaction VS Local Transaction .
  11. 【xinfanqie】美女逢泽莉娜win7主题_8.3
  12. 精益思想如何加速企业的全局价值流动?
  13. PPT插入形状,在里面填写文字,文本框过大
  14. python算24点穷举法_24点游戏7节课–第1节-游戏介绍与基本算法 | 学步园
  15. 金额保留小数点后两位方法
  16. 深入浅出的CSS项目开发总结
  17. 高校实验室预约系统功能简介及解决方案
  18. Autofill安装使用
  19. android设备控制机器人,基于Android手机的六足机器人控制方案的设计与实现
  20. Archive of Our Own_为什么说for...of循环是JS中的宝石?

热门文章

  1. svn使用教程_苹果svn使用教程
  2. [Python]使用折线图统计水果店一周内销售额的变化曲线
  3. 如何实现华硕主板的计算机定时启动(win10/win11)
  4. 深度学习中查看显卡使用情况
  5. 蚂蚁金服ATEC城市峰会上海举行,三大发布迎接金融科技2019...
  6. fastapi+mongo+qlib:体系化构建AI量化投研平台
  7. Linux驱动模型核心,第一部分
  8. 【按键】短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动)--- 矩阵键盘
  9. 巅峰战舰服务器维护多久,巅峰战舰更新不断 死斗模式玩法解析
  10. 2021龙小丽高考成绩查询,2021届新生成为重庆高考改革第一批大军