URLConnection

转载(http://www.cnblogs.com/shyang--TechBlogs/archive/2011/03/21/1990525.html)

关于URLConnection,网上很多回答都是对API的翻译,很崩溃,我是看了很多之后,然后看API才发现的。此后我会吸取教训,一遇到问题首先看API,也建议大家这样,英文的最好,不是太相信那些翻译的,呵呵,感觉还是自己斟酌理解的好吧。下面我就解读一下URLConnection的API,虽然也是一种翻译,但是结合我自己的理解,还有一点亲自调试得出的结论。

  URLConnection是所有表示应用程序与URL之间通信连接的类的父类(super class),该类的实例可以用来对由URL引用的资源进行读取和写入操作。

  HttpURLConnection 是支持HTTP特定功能的URLConnection,还有JarConnection是URLConnection的直接子类。

  创建URLConnection对象主要要经历两步:

      第一步是creat:URLConnection conn = url.openConnection();

      第二步是connect:conn.connect();//这两个是不同的,见下面调试

       在created和connected之间可以设置一些变量选项(如setDoInput,超时等),而如果connect之后再设置就会引发异常(网上也有这个问题)

      在需要连接才能执行的操作(如getInputStream等应用层操作),程序会暗中(implicitly)执行连接

      一旦连接可用,就可以访问获取资源,如执行getInputStream()等,对于HttpURLConnection,还有conn.getResponseCode()==200来判定服务器是否返回正确的应答码以表明请求被接受。

  

  在URLConnection中,有一个域boolean connected ,值为true表明已经建立到指定URL的连接;false则没有(华丽的标记)

  connect()    当连接还未被建立时,打开一个communications link,而如果这个链接已经被打开(connected值设置为true)则 ignore it 。

  下面编了一个小程序进行调试:

 

URL url = new URL("http://www.google.cn");
URLConnection conn = url.openConnection();
conn.setConnectTimeout(10000);
conn.connect();
InputStream inStream = conn.getInputStream();

当程序执行完openConnection()之后,域connected值还是false,说明这时候还未连接。等执行到connect()之后,connected才变为true,说明这时候才完成连接。而当我注释掉connect()后,再运行程序,connected值到getInputStream执行完又变为true,这时候知道getInputStream会使连接暗中被执行。

  综上,对于一般需要连接才执行的操作(可能也有不需要连接的操作吧~~),connect()是可以省略的。但是只有在connect()执行完,连接才正式建立,而不是openConnection(只是创建了一个连接对象)

 

 

示列

转载(http://caspers.iteye.com/blog/212876#)

 1 package com.test;  
 2   
 3 import java.io.BufferedReader;  
 4 import java.io.IOException;  
 5 import java.io.InputStream;  
 6 import java.io.InputStreamReader;  
 7 import java.io.OutputStreamWriter;  
 8 import java.net.URL;  
 9 import java.net.URLConnection;  
10   
11 public class TestPost {  
12   
13     public static void testPost() throws IOException {  
14   
15         /** 
16          * 首先要和URL下的URLConnection对话。 URLConnection可以很容易的从URL得到。比如: // Using 
17          *  java.net.URL and //java.net.URLConnection 
18          */  
19         URL url = new URL("http://www.faircanton.com/message/check.asp");  
20         URLConnection connection = url.openConnection();  
21         /** 
22          * 然后把连接设为输出模式。URLConnection通常作为输入来使用,比如下载一个Web页。 
23          * 通过把URLConnection设为输出,你可以把数据向你个Web页传送。下面是如何做: 
24          */  
25         connection.setDoOutput(true);  
26         /** 
27          * 最后,为了得到OutputStream,简单起见,把它约束在Writer并且放入POST信息中,例如: ... 
28          */  
29         OutputStreamWriter out = new OutputStreamWriter(connection  
30                 .getOutputStream(), "8859_1");  
31         out.write("username=kevin&password=*********"); //post的关键所在!  
32         // remember to clean up  
33         out.flush();  
34         out.close();  
35         /** 
36          * 这样就可以发送一个看起来象这样的POST:  
37          * POST /jobsearch/jobsearch.cgi HTTP 1.0 ACCEPT: 
38          * text/plain Content-type: application/x-www-form-urlencoded 
39          * Content-length: 99 username=bob password=someword 
40          */  
41         // 一旦发送成功,用以下方法就可以得到服务器的回应:  
42         String sCurrentLine;  
43         String sTotalString;  
44         sCurrentLine = "";  
45         sTotalString = "";  
46         InputStream l_urlStream;  
47         l_urlStream = connection.getInputStream();  
48         // 传说中的三层包装阿!  
49         BufferedReader l_reader = new BufferedReader(new InputStreamReader(  
50                 l_urlStream));  
51         while ((sCurrentLine = l_reader.readLine()) != null) {  
52             sTotalString += sCurrentLine + "\r\n";  
53   
54         }  
55         System.out.println(sTotalString);  
56     }  
57   
58     public static void main(String[] args) throws IOException {  
59   
60         testPost();  
61   
62     }  
63   
64 }  

 

转载于:https://www.cnblogs.com/haroro/p/URLConnection.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273137.shtml

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

相关文章

java文件拷贝_Java实现文件拷贝的4种方法

第一种方法:古老的方式public static long forJava(File f1,File f2) throws Exception{long timenew Date().getTime();int length2097152;FileInputStream innew FileInputStream(f1);FileOutputStream outnew FileOutputStream(f2);byte[] buffernew byte[length];while(tru…

今夜的硬件之旅

6脚继电器: 汇科继电器HK4100F-DC6V-SHG ①3A触点切换能力 ②具有一组常开,一组转换触点形式 ③超小型,标准印刷制版引出脚 ④有塑封型 Outline(L*W*H)外形尺寸:15.510.511.8 Contact Date触电形式&#…

mp3 pcm java_Java mp3文件转pcm文件

Java mp3文件转pcm文件package cn.zpy.util;import java.io.File;import java.io.IOException;import javax.sound.sampled.AudioFileFormat;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;imp…

有1~5000一组乱序数列,请使用伪代码对该数进行排列

先把1-5000组成一个数组 冒泡排序法 $arrarray(1,2,3,4,5,6,7,8,9.....5000); $totalcount($arr); For($i0;$i<$total;$i){ For($j0;$j<$total-1;$j){ If($arr[$j]>$arr[$j1]){ $tmp$arr[$i]; $arr[$j]$arr[$j1]; $arr[$j1]$tmp; } } } 快速排序法 $arrarray(1,2,3,4,…

java 类型转换方法_java数据类型转换的常见方法

public class Testfun {public static void main(String[] args) {// (一)跨Number父类的类型转换// 1、str转int > Integer.parseInt(s1)String s1 "19";int i2 Integer.parseInt(s1);// 数字str转化为对标的intSystem.out.println("i2" (i2));// 2…

json to java 在线_Json转Java对象 (全网最简版)

Json2Java(全网最简版)json字符串转Java对象,生成对应文件描述&特点简易的Json转Java工具,满足基本日常使用(特殊需求可自行增添,代码就一页)在网上找了好些个这类工具,不是只暴露iead插件就是复杂&没文档,于是自己写了个全网最简版Json2Javaonly one file用法public c…

Material design 色彩

八月已过去&#xff0c;九月刚来到~暑假已过去~九月上学季~~又迎来了一个桂花飘香的季节&#xff0c;你是否有了新的目标和计划~~所以在九月初始给大家带来一个全新的东西&#xff08;ps&#xff1a;对于我来说是全新的东西&#xff09;——Material Design~~九月让我们一起好好…

java logging api_Java Logging API - Tutorial

1.2. 创建一个logger包 java.util.logging提供了日志的功能&#xff0c;可以使用类似于下面的代码来创建一个logger&#xff1a;import java.util.logging.Logger;private final static Logger LOGGER Logger.getLogger(MyClass.class .getName());1.3. LevelLog的等级反映了问…

内存查看工具RAMMAP说明

参考 Technet Process Private: 分配给单一Process专用的内存 Mapped File: 用来储放档案内容快取(Cache)的内存空间 Shared Memory: 标注给多个Process共用的内存分页(Page&#xff0c;内存管理单位) Page Table: 用来描述虚拟内存位址的分页表(裡面是一笔一笔的PTE&…

php接口和java接口_java和php接口的区别是什么

java和php接口的区别是&#xff1a;1、php接口中的抽象方法只能是public的&#xff0c;默认也是public权限&#xff1b;2、java中私有方法使用private修饰&#xff0c;供接口中的默认方法或者静态方法调用。【相关学习推荐&#xff1a;php编程(视频)】php:规范&#xff1a;接口…

成都优步uber司机第四组奖励政策

万能的优步成都团队放出了优步司机第四组&#xff0c;一二三组奖励已经骤降&#xff0c;在月末放出第四组车主档&#xff0c;这是要让一切归于平静的节奏么&#xff01;&#xff01;&#xff01; 滴滴快车单单2.5倍&#xff0c;注册地址&#xff1a;http://www.udache.com/如何…

java hql多条件查询_使用hql语句怎样实现多条件查询

展开全部这里只写了DAO和业务62616964757a686964616fe59b9ee7ad9431333264623331逻辑组件、ACTION的具体实现类&#xff0c;PO和和接口自己应该会写吧&#xff0c;HQL采用的是结合SQL的那种写法&#xff0c;增删改查全在里面了&#xff0c;修改下马上就能跑了&#xff0c;不清楚…

BZOJ 1008 [HNOI2008]越狱

1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5166 Solved: 2242[Submit][Status][Discuss]Description 监狱有连续编号为1...N的N个房间&#xff0c;每个房间关押一个犯人&#xff0c;有M种宗教&#xff0c;每个犯人可能信仰其中一种。如果相邻房间…

android mysql开发工具_Android开发工具--adb的使用

adb(Android Debug Bridge)是Android提供的一个通用的调试工具&#xff0c;借助这个工具&#xff0c;我们可以管理设备或手机模拟器的状态。还可以进行以下的操作&#xff1a;1、快速更新设备或手机模拟器中的代码&#xff0c;如应用或Android系统升级&#xff1b;2、在设备上运…

java headless_使用Chrome Headless 快速实现java版数据的抓取

Java: cdp4j - Java library for CDP,使用这个类库实现。maven引入&#xff1a;io.webfoldercdp4j1.1.0官方例子&#xff1a;import io.webfolder.cdp.Launcher;import io.webfolder.cdp.session.Session;import io.webfolder.cdp.session.SessionFactory;public class HelloWo…

闪回数据库

Flashbacking a database means going back to a previous database state.闪回数据库到之前数据库的状态The Flashback Database feature provides a way to quickly revert entire Oracle database to the state it was in at a past point in time. 闪回数据库特性提供了一种…

Ruby on Rails Tutorial 第六章 用户模型

1、用户模型&#xff08;1&#xff09;数据库迁移Rails默认使用关系数据库存储数据&#xff0c;数据库中的表有数据行组成&#xff0c;每一行都有相应的列&#xff0c;对应数据属性。把列名命名为相应的名字后&#xff0c;ActiveRecord会自动把他们识别为用户对象的属性。 $ ra…

java dcl 失效解决_DCL失效原因和解决方案

Java内存模型 在了解Java的同步秘密之前&#xff0c;先来看看JMM(Java Memory Model)。Java被设计为跨平台的语言&#xff0c;在内存管理上&#xff0c;显然也要有一个统一的模型。而且Java语言最大的特点就是废除了指针&#xff0c;把程序员从痛苦中解脱出来&#xff0c;不…

李宁-2015年7月13日-个人文档

姓名 李宁 日期 2015年7月13日 主要工作及心得 由于我负责服务器端的编写工作&#xff0c;而各部分的客户端的操作都要与服务器端通信&#xff0c;所以在今天的调试中&#xff0c;我贯穿于各部分模块的调试和检测&#xff0c;主要负责在出现问题…

java.net.unknown_android -------- java.net.UnknownServiceException

最近升级了Android的API版本时 &#xff0c;导致我的网络请求失败了&#xff0c;出现了这个错误 java.net.UnknownServiceException&#xff0c;这个错误&#xff0c;我在网上查到这个主要是由于&#xff0c;我们的OkHttp3会默认使用密文传输&#xff0c;而我们的代码中使用Htt…