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.pswp.cn/news/273137.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273137.shtml
英文地址,請注明出處:http://en.pswp.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…