国产精品久久久久9999赢消,欧美国产综合一区二区,欧美一级日韩一级http://www.aygfsteel.com/caizh2009/category/43741.html與大家共同成長zh-cnFri, 09 Apr 2010 19:19:21 GMTFri, 09 Apr 2010 19:19:21 GMT60HttpClient入門http://www.aygfsteel.com/caizh2009/archive/2010/04/09/317846.html小菜毛毛小菜毛毛Fri, 09 Apr 2010 06:38:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/04/09/317846.htmlhttp://www.aygfsteel.com/caizh2009/comments/317846.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/04/09/317846.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/317846.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/317846.htmlHttpClient 是 Apache Jakarta Common 下的子項目,可以用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,并且它支持 HTTP 協議最新的版本和建議。本文首先介紹 HTTPClient,然后根據作者實際工作經驗給出了一些常見問題的解決方法。

HttpClient簡介

HTTP 協議可能是現在 Internet 上使用得最多、最重要的協議了,越來越多的 Java 應用程序需要直接通過 HTTP 協議來訪問網絡資源。雖然在 JDK 的 java.net 包中已經提供了訪問 HTTP 協議的基本功能,但是對于大部分應用程序來說,JDK 庫本身提供的功能還不夠豐富和靈活。HttpClient 是 Apache Jakarta Common 下的子項目,用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,并且它支持 HTTP 協議最新的版本和建議。HttpClient 已經應用在很多的項目中,比如 Apache Jakarta 上很著名的另外兩個開源項目 Cactus 和 HTMLUnit 都使用了 HttpClient,更多使用 HttpClient 的應用可以參見http://wiki.apache.org/jakarta-httpclient/HttpClientPowered。HttpClient 項目非常活躍,使用的人還是非常多的。目前 HttpClient 版本是在 2005.10.11 發布的 3.0 RC4 。





回頁首


HttpClient 功能介紹

以下列出的是 HttpClient 提供的主要的功能,要知道更多詳細的功能可以參見 HttpClient 的主頁。

  • 實現了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
  • 支持自動轉向
  • 支持 HTTPS 協議
  • 支持代理服務器等

下面將逐一介紹怎樣使用這些功能。首先,我們必須安裝好 HttpClient。





回頁首


HttpClient 基本功能的使用

GET 方法

使用 HttpClient 需要以下 6 個步驟:

1. 創建 HttpClient 的實例

2. 創建某種連接方法的實例,在這里是 GetMethod。在 GetMethod 的構造函數中傳入待連接的地址

3. 調用第一步中創建好的實例的 execute 方法來執行第二步中創建好的 method 實例

4. 讀 response

5. 釋放連接。無論執行方法是否成功,都必須釋放連接

6. 對得到后的內容進行處理

根據以上步驟,我們來編寫用GET方法來取得某網頁內容的代碼。

  • 大部分情況下 HttpClient 默認的構造函數已經足夠使用。
    HttpClient httpClient = new HttpClient();


  • 創建GET方法的實例。在GET方法的構造函數中傳入待連接的地址即可。用GetMethod將會自動處理轉發過程,如果想要把自動處理 轉發過程去掉的話,可以調用方法setFollowRedirects(false)。
    GetMethod getMethod = new GetMethod("http://www.ibm.com/");


  • 調用實例httpClient的executeMethod方法來執行getMethod。由于是執行在網絡上的程序,在運行 executeMethod方法的時候,需要處理兩個異常,分別是HttpException和IOException。引起第一種異常的原因主要可能是 在構造getMethod的時候傳入的協議不對,比如不小心將"http"寫成"htp",或者服務器端返回的內容不正常等,并且該異常發生是不可恢復 的;第二種異常一般是由于網絡原因引起的異常,對于這種異常 (IOException),HttpClient會根據你指定的恢復策略自動試著重新執行executeMethod方法。HttpClient的恢復 策略可以自定義(通過實現接口HttpMethodRetryHandler來實現)。通過httpClient的方法setParameter設置你實 現的恢復策略,本文中使用的是系統提供的默認恢復策略,該策略在碰到第二類異常的時候將自動重試3次。executeMethod返回值是一個整數,表示 了執行該方法后服務器返回的狀態碼,該狀態碼能表示出該方法執行是否成功、需要認證或者頁面發生了跳轉(默認狀態下GetMethod的實例是自動處理跳 轉的)等。
    //設置成了默認的恢復策略,在發生異常時候將自動重試3次,在這里你也可以設置成自定義的恢復策略

    getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,

    new DefaultHttpMethodRetryHandler());

    //執行getMethod

    int statusCode = client.executeMethod(getMethod);

    if (statusCode != HttpStatus.SC_OK) {

    System.err.println("Method failed: " + getMethod.getStatusLine());

    }


  • 在返回的狀態碼正確后,即可取得內容。取得目標地址的內容有三種方法:第一種,getResponseBody,該方法返回的是目標的二進制的byte 流;第二種,getResponseBodyAsString,這個方法返回的是String類型,值得注意的是該方法返回的String的編碼是根據系 統默認的編碼方式,所以返回的String值可能編碼類型有誤,在本文的"字符編碼"部分中將對此做詳細介紹;第三 種,getResponseBodyAsStream,這個方法對于目標地址中有大量數據需要傳輸是最佳的。在這里我們使用了最簡單的 getResponseBody方法。
    byte[] responseBody = method.getResponseBody();


  • 釋放連接。無論執行方法是否成功,都必須釋放連接。
    method.releaseConnection();


  • 處理內容。在這一步中根據你的需要處理內容,在例子中只是簡單的將內容打印到控制臺。
    System.out.println(new String(responseBody));


下面是程序的完整代碼,這些代碼也可在附件中的test.GetSample中找到。


package test;

import java.io.IOException;

import org.apache.commons.httpclient.*;

import org.apache.commons.httpclient.methods.GetMethod;

import org.apache.commons.httpclient.params.HttpMethodParams;

public class GetSample{

public static void main(String[] args) {

//構造HttpClient的實例

HttpClient httpClient = new HttpClient();

//創建GET方法的實例

GetMethod getMethod = new GetMethod("http://www.ibm.com");

//使用系統提供的默認的恢復策略

getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,

new DefaultHttpMethodRetryHandler());

try {

//執行getMethod

int statusCode = httpClient.executeMethod(getMethod);

if (statusCode != HttpStatus.SC_OK) {

System.err.println("Method failed: "

+ getMethod.getStatusLine());

}

//讀取內容

byte[] responseBody = getMethod.getResponseBody();

//處理內容

System.out.println(new String(responseBody));

} catch (HttpException e) {

//發生致命的異常,可能是協議不對或者返回的內容有問題

System.out.println("Please check your provided http address!");

e.printStackTrace();

} catch (IOException e) {

//發生網絡異常

e.printStackTrace();

} finally {

//釋放連接

getMethod.releaseConnection();

}

}

}


POST方法

根據RFC2616,對POST的解釋如下:POST方法用來向目的服務器發出請求,要求它接受被附在請求后的實體,并把它當作請求隊列 (Request-Line)中請求URI所指定資源的附加新子項。POST被設計成用統一的方法實現下列功能:

  • 對現有資源的注釋(Annotation of existing resources)
  • 向電子公告欄、新聞組,郵件列表或類似討論組發送消息
  • 提交數據塊,如將表單的結果提交給數據處理過程
  • 通過附加操作來擴展數據庫

調用HttpClient中的PostMethod與GetMethod類似,除了設置PostMethod的實例與GetMethod有些 不同之外,剩下的步驟都差不多。在下面的例子中,省去了與GetMethod相同的步驟,只說明與上面不同的地方,并以登錄清華大學BBS為例子進行說 明。

  • 構造PostMethod之前的步驟都相同,與GetMethod一樣,構造PostMethod也需要一個URI參數,在本例中,登錄 的地址是http://www.newsmth.net/bbslogin2.php。在創建了PostMethod的實例之后,需要給method實例 填充表單的值,在BBS的登錄表單中需要有兩個域,第一個是用戶名(域名叫id),第二個是密碼(域名叫passwd)。表單中的域用類 NameValuePair來表示,該類的構造函數第一個參數是域名,第二參數是該域的值;將表單所有的值設置到PostMethod中用方法 setRequestBody。另外由于BBS登錄成功后會轉向另外一個頁面,但是HttpClient對于要求接受后繼服務的請求,比如POST和 PUT,不支持自動轉發,因此需要自己對頁面轉向做處理。具體的頁面轉向處理請參見下面的"自動轉向"部分。代碼如下:
    String url = "http://www.newsmth.net/bbslogin2.php";

    PostMethod postMethod = new PostMethod(url);

    // 填入各個表單域的值

    NameValuePair[] data = { new NameValuePair("id", "youUserName"),

    new NameValuePair("passwd", "yourPwd") };

    // 將表單的值放入postMethod中

    postMethod.setRequestBody(data);

    // 執行postMethod

    int statusCode = httpClient.executeMethod(postMethod);

    // HttpClient對于要求接受后繼服務的請求,象POST和PUT等不能自動處理轉發

    // 301或者302

    if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY ||

    statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {

    // 從頭中取出轉向的地址

    Header locationHeader = postMethod.getResponseHeader("location");

    String location = null;

    if (locationHeader != null) {

    location = locationHeader.getValue();

    System.out.println("The page was redirected to:" + location);

    } else {

    System.err.println("Location field value is null.");

    }

    return;

    }


完整的程序代碼請參見附件中的test.PostSample





回頁首


使用HttpClient過程中常見的一些問題

下面介紹在使用HttpClient過程中常見的一些問題。

字符編碼

某目標頁的編碼可能出現在兩個地方,第一個地方是服務器返回的http頭中,另外一個地方是得到的html/xml頁面中。

  • 在http頭的Content-Type字段可能會包含字符編碼信息。例如可能返回的頭會包含這樣子的信息:Content-Type: text/html; charset=UTF-8。這個頭信息表明該頁的編碼是UTF-8,但是服務器返回的頭信息未必與內容能匹配上。比如對于一些雙字節語言國家,可能服務 器返回的編碼類型是UTF-8,但真正的內容卻不是UTF-8編碼的,因此需要在另外的地方去得到頁面的編碼信息;但是如果服務器返回的編碼不是UTF- 8,而是具體的一些編碼,比如gb2312等,那服務器返回的可能是正確的編碼信息。通過method對象的getResponseCharSet()方 法就可以得到http頭中的編碼信息。
  • 對于象xml或者html這樣的文件,允許作者在頁面中直接指定編碼類型。比如在html中會有<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>這樣的標簽;或者在xml中會有<?xml version="1.0" encoding="gb2312"?>這樣的標簽,在這些情況下,可能與http頭中返回的編碼信息沖突,需要用戶自己判斷到底那種編碼類型應該 是真正的編碼。

自動轉向

根據RFC2616中對自動轉向的定義,主要有兩種:301和302。301表示永久的移走(Moved Permanently),當返回的是301,則表示請求的資源已經被移到一個固定的新地方,任何向該地址發起請求都會被轉到新的地址上。302表示暫時 的轉向,比如在服務器端的servlet程序調用了sendRedirect方法,則在客戶端就會得到一個302的代碼,這時服務器返回的頭信息中 location的值就是sendRedirect轉向的目標地址。

HttpClient支持自動轉向處理,但是象POST和PUT方式這種要求接受后繼服務的請求方式,暫時不支持自動轉向,因此如果碰到 POST方式提交后返回的是301或者302的話需要自己處理。就像剛才在POSTMethod中舉的例子:如果想進入登錄BBS后的頁面,必須重新發起 登錄的請求,請求的地址可以在頭字段location中得到。不過需要注意的是,有時候location返回的可能是相對路徑,因此需要對 location返回的值做一些處理才可以發起向新地址的請求。

另外除了在頭中包含的信息可能使頁面發生重定向外,在頁面中也有可能會發生頁面的重定向。引起頁面自動轉發的標簽是:<meta http-equiv="refresh" content="5; url=http://www.ibm.com/us">。如果你想在程序中也處理這種情況的話得自己分析頁面來實現轉向。需要注意的是,在上面那 個標簽中url的值也可以是一個相對地址,如果是這樣的話,需要對它做一些處理后才可以轉發。

處理HTTPS協議

HttpClient提供了對SSL的支持,在使用SSL之前必須安裝JSSE。在Sun提供的1.4以后的版本中,JSSE已經集成到 JDK中,如果你使用的是JDK1.4以前的版本則必須安裝JSSE。JSSE不同的廠家有不同的實現。下面介紹怎么使用HttpClient來打開 Https連接。這里有兩種方法可以打開https連接,第一種就是得到服務器頒發的證書,然后導入到本地的keystore中;另外一種辦法就是通過擴 展HttpClient的類來實現自動接受證書。

方法1,取得證書,并導入本地的keystore:

  • 安裝JSSE (如果你使用的JDK版本是1.4或者1.4以上就可以跳過這一步)。本文以IBM的JSSE為例子說明。先到IBM網站上下載JSSE的安裝包。然后解 壓開之后將ibmjsse.jar包拷貝到<java-home>"lib"ext"目錄下。
  • 取得并且導入證書。證書可以通過IE來獲得:

    1. 用IE打開需要連接的https網址,會彈出如下對話框:



    2. 單擊"View Certificate",在彈出的對話框中選擇"Details",然后再單擊"Copy to File",根據提供的向導生成待訪問網頁的證書文件



    3. 向導第一步,歡迎界面,直接單擊"Next",



    4. 向導第二步,選擇導出的文件格式,默認,單擊"Next",



    5. 向導第三步,輸入導出的文件名,輸入后,單擊"Next",



    6. 向導第四步,單擊"Finish",完成向導



    7. 最后彈出一個對話框,顯示導出成功



  • 用keytool工具把剛才導出的證書倒入本地keystore。Keytool命令在<java-home>"bin "下,打開命令行窗口,并到<java-home>"lib"security"目錄下,運行下面的命令:

    keytool -import -noprompt -keystore cacerts -storepass changeit -alias yourEntry1 -file your.cer


    其中參數alias后跟的值是當前證書在keystore中的唯一標識符,但是大小寫不區分;參數file后跟的是剛才通過IE導出的證 書所在的路徑和文件名;如果你想刪除剛才導入到keystore的證書,可以用命令:

    keytool -delete -keystore cacerts -storepass changeit -alias yourEntry1


  • 寫程序訪問https地址。如果想測試是否能連上https,只需要稍改一下GetSample例子,把請求的目標變成一個https地 址。
    GetMethod getMethod = new GetMethod("https://www.yourdomain.com");


    運行該程序可能出現的問題:

    1. 拋出異常java.net.SocketException: Algorithm SSL not available。出現這個異常可能是因為沒有加JSSEProvider,如果用的是IBM的JSSE Provider,在程序中加入這樣的一行:

     if(Security.getProvider("com.ibm.jsse.IBMJSSEProvider") == null)

    Security.addProvider(new IBMJSSEProvider());


    或者也可以打開<java-home>"lib"security"java.security,在行

    security.provider.1=sun.security.provider.Sun

    security.provider.2=com.ibm.crypto.provider.IBMJCE


    后面加入security.provider.3=com.ibm.jsse.IBMJSSEProvider

    2. 拋出異常java.net.SocketException: SSL implementation not available。出現這個異常可能是你沒有把ibmjsse.jar拷貝到<java-home>"lib"ext"目錄下。

    3. 拋出異常javax.net.ssl.SSLHandshakeException: unknown certificate。出現這個異常表明你的JSSE應該已經安裝正確,但是可能因為你沒有把證書導入到當前運行JRE的keystore中,請按照前 面介紹的步驟來導入你的證書。

方法2,擴展HttpClient類實現自動接受證書

因為這種方法自動接收所有證書,因此存在一定的安全問題,所以在使用這種方法前請仔細考慮您的系統的安全需求。具體的步驟如下:

  • 提供一個自定義的socket factory(test.MySecureProtocolSocketFactory)。這個自定義的類必須實現接口 org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory,在實現接口 的類中調用自定義的X509TrustManager(test.MyX509TrustManager),這兩個類可以在隨本文帶的附件中得到
  • 創建一個org.apache.commons.httpclient.protocol.Protocol的實例,指定協議名稱和默認 的端口號
    Protocol myhttps = new Protocol("https", new MySecureProtocolSocketFactory (), 443);


  • 注冊剛才創建的https協議對象
    Protocol.registerProtocol("https ", myhttps);


  • 然后按照普通編程方式打開https的目標地址,代碼請參見test.NoCertificationHttpsGetSample

處理代理服務器

HttpClient中使用代理服務器非常簡單,調用HttpClient中setProxy方法就可以,方法的第一個參數是代理服務器地 址,第二個參數是端口號。另外HttpClient也支持SOCKS代理。


httpClient.getHostConfiguration().setProxy(hostName,port);






回頁首


結論

從上面的介紹中,可以知道HttpClient對http協議支持非常好,使用起來很簡單,版本更新快,功能也很強大,具有足夠的靈活性和擴 展性。對于想在Java應用中直接訪問http資源的編程人員來說,HttpClient是一個不可多得的好工具。



參考資料

  • Commons logging包含了各種各樣的日志API的實現,讀者可以通過站點http://jakarta.apache.org/commons /logging/得到詳細的內容

  • Commons codec包含了一些一般的解碼/編碼算法。包含了語音編碼、十六進制、Base64和URL編碼等,通過http: //jakarta.apache.org/commons/codec/可以得到詳細的內容

  • rfc2616是關于 HTTP/1.1的文檔,可以在http://www.faqs.org/rfcs/rfc2616.html上得到詳細的內容,另外rfc1945是關 于HTTP/1.0的文檔,通過http://www.faqs.org/rfcs/rfc1945.html可以得到詳細內容

  • SSL――SSL 是由 Netscape Communications Corporation 于 1994 年開發的,而 TLS V1.0 是由 Internet Engineering Task Force(IETF)定義的標準,它基于 SSL V3.0,并且在使用的加密算法上與其有些許的不同。例如,SSL 使用 Message Authentication Code(MAC)算法來生成完整性校驗值,而 TLS 應用密鑰的 Hashing for Message Authentication Code(HMAC)算法。

  • IBM JSSE提供了SSL(Secure Sockets Layer)和TLS(Transport Layer Security)的java實現,在http://www-03.ibm.com/servers/eserver/zseries/software /java/jsse.html中可以得到詳細的信息

  • Keytool是一個管理密鑰和證書的工具。關于它詳細的使用信 息可以在http://www.doc.ic.ac.uk/csg/java/1.3.1docs/tooldocs/solaris /keytool.html上得到

  • HTTPClient的主頁是http://jakarta.apache.org /commons/httpclient/,你可以在這里得到關于HttpClient更加詳細的信息


小菜毛毛 2010-04-09 14:38 發表評論
]]>
Eclipse 反編譯插件 JadClipsehttp://www.aygfsteel.com/caizh2009/archive/2010/04/01/317143.html小菜毛毛小菜毛毛Thu, 01 Apr 2010 03:13:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/04/01/317143.htmlhttp://www.aygfsteel.com/caizh2009/comments/317143.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/04/01/317143.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/317143.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/317143.html

一、下載:

http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download(jdaclipse插件主頁)

下載插件:

JadClipse 3.3

This release stream is appropriate for Eclipse 3.3.

Filename Size Description
net.sf.jadclipse_3.3.0.jar 45 KB JadClipse for Eclipse >= 3.3M6


JadClipse 3.2

This release stream is appropriate for Eclipse 3.2.

Filename Size Description
net.sf.jadclipse_3.2.4.jar 45 KB JadClipse for Eclipse >= 3.2M5
jadclipse_3.2.0.jar 54 KB JadClipse for Eclipse 3.2M3 and M4


JadClipse 3.1

This release stream is appropriate for Eclipse 3.1.

Filename Size Description
jadclipse_3.1.0.jar 54 KB JadClipse for Eclipse 3.1 (including milestone builds starting from 3.1M6 up to 3.2M2)

myeclipse6.0 就下載JadClipse 3.3


下載Jad反編譯工具:
http://www.varaneckas.com/jad,在該頁中找到適合自己操作系統平臺的jad下載。下載后解壓,然后將解壓后的jad.exe文件復制到%JAVA_HOME%"bin目錄下面(可以將jad.exe放到任意位置,只要記住其存放路徑就好,下面要用到)。

二、安裝:

Eclipse中的插件安裝可以參考:
   
方法1、直接將x.x.x.jarx.x.x.代表版本號)復制到%ECLIPSE_HOME%"plugins目錄下。

方法2、使用link方式安裝,建立D"Myplugins"jadclipse3.2.4"eclipse"plugins的目錄結構,將jadclipse_3.2.4.jar放到plugins目錄下面(注:其中D"Myplugins為你自己定義的一個專門放置插件的目錄)。再在%ECLIPSE_HOME%"links目錄下面建立一個jadclipse3.2.4.link文件(該文件名隨便取)。文件里面內容為:path=D/Myplugins/jadclipse3.2.4.

三、 使用:
啟動eclipse,點擊反編譯的類文件,此時會激活jadclipse插件,在eclipse菜單中會多出一個jadclipse菜單, 如下圖所示:

一般地它會自動 反編譯相應的class文件,如果沒有自動反編譯,請點擊
jadclipse->Decompile
如下圖所示:


常見問題及解決:

(一)啟動eclipse,打開Window->Preferences->Java->JadClipse,如果沒有找到JadClipse,即JadClipse插件沒有激活。

1)檢查插件安裝的版 本是否與你安裝的eclipse版本對應

2)使用 –clean參數來啟動eclipse
  (二)在使用JadClipse插件反編譯class文件時出現如下類似錯誤:
/*jadclipse*/
 
/*
               DECOMPILATION REPORT
 
               Decompiled from: D:"Program Files"Java"jdk1.5.0_12"jre"lib"rt.jar
               Total time: 16 ms
               Jad reported messages/errors:
               Exit status: 0
               Caught exceptions:
java.io.IOException: CreateProcess: (...)
 

請確保你的Jad路徑在eclipse中正確制定。
   
啟動eclipse,打開:Window->Preferences->Java->JadClipse.
1
Path to decompiler,這里設置反編譯工具jad的全路徑名,比如:%JAVA_HOME%"bin"jad.exe.
2
Directory for temporary files,這里設置臨時 文件路徑。

至于Window->Preferences->Java->JadClipse目錄下的DebugDirectivesFormattingMisc目錄中的參數 設置,就不再羅嗦了。

(三)安裝完成后,eclipse沒有自動將JadClipse Class File Viewer設置成class文件的缺省打開方式。

如果沒有默認,可以在EclipseWindows—> Perference—>General->Editors->File Associations中修改“*.class”默認關聯的編輯器為“JadClipse Class File Viewer”。設置完成后,雙擊*.class文件,eclipse將自動反編譯。



小菜毛毛 2010-04-01 11:13 發表評論
]]>
java反編譯工具Jode Decompiler的Eclipse插件安裝與使用http://www.aygfsteel.com/caizh2009/archive/2010/01/25/310749.html小菜毛毛小菜毛毛Mon, 25 Jan 2010 09:23:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/01/25/310749.htmlhttp://www.aygfsteel.com/caizh2009/comments/310749.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/01/25/310749.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/310749.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/310749.html
  1. Jode Decompiler的安裝:
    安裝非常的簡單,在ECLIPSE上的help => Software Updates => Find and Install... => Search for new features to install,單擊"New Remote Site..." 在URL欄輸入 http://www.technoetic.com/eclipse/update,然后下一步,就可以看到“jode decompiler plugin *.*”了,選上安裝就可以了,由于Jode Decompiler是純Java編寫的所以也不需要其他的什么組件來支持了;
  2. 配置:
    安裝好了可以看到Window => Preferences... => Java => Jode Decompiler選項卡。安裝好了再設置一下文件關聯就可以了,Window => Preferences... => General => Editors => File Associations找到"*.class"在"Associated editors"里面可以看到"Jode class file viewer"選中它再單擊Default按鈕就OK了.
  3. 使用:
    現在就可以開始使用了,建立一個project然后引用你的組件,在組件中找到你所要反編譯的類文件打開就可以看到反編譯后得到的代碼了.
注:現在版本只支持3.0或者3.1的,3.2安裝以后可能會有錯誤。
推薦一款Java反編譯器,也使用了挺久的了,感覺還是很好用,就拿出和大家分享一下。
這款反編譯器叫 "Java Decompiler", 由 Pavel Kouznetsov開發,目前最新版本為0.2.5.
它由 C++開發,并且官方可以下載 windows、linux和蘋果Mac Os三個平臺的可執行程序。

   本人之所以認為它還不錯,是其有下面幾個功能:
  1. 支持對整個Jar文件進行反編譯,并本源代碼可直接點擊進行相關代碼的跳轉
  2. 支持眾多Java編譯器的反編譯(支持泛型, Annotation和enum枚舉類型)
  • jdk1.1.8
  • jdk1.3.1
  • jdk1.4.2
  • jdk1.5.0
  • jdk1.6.0
  • jikes-1.22
  • harmony-jdk-r533500
  • Eclipse Java Compiler v_677_R32x, 3.2.1 release
  • jrockit90_150_06
   圖示:


   3. 快速查找源文件功能(Ctrl+Shift+T)

   4. 安裝方便.只有600K,直接運行即可。
   5. 支持文件的拖放功能,源代碼高亮顯示

  當然對于反編譯的效果,感覺還可以。當然在本人使用過程也出現過,編譯效果不佳的情況。但從總體上來看已經讓我挺滿意了,呵呵。


小菜毛毛 2010-01-25 17:23 發表評論
]]>
主站蜘蛛池模板: 开远市| 长岛县| 彭山县| 石柱| 娄底市| 河南省| 甘孜| 湖州市| 福安市| 理塘县| 灵武市| 安西县| 达拉特旗| 武宁县| 虹口区| 佳木斯市| 冷水江市| 陆河县| 罗田县| 宿迁市| 阜新| 佛坪县| 南召县| 安达市| 苍南县| 二手房| 北川| 永福县| 怀安县| 重庆市| 石首市| 沙雅县| 溧水县| 拉萨市| 黑山县| 上饶县| 漯河市| 邛崃市| 米林县| 建水县| 松潘县|