2011年8月8日 星期一

Java 網路程式 - HttpClient 實現 Get 請求

以下透過 org.apache.commons.httpclient 來模擬一個 GET 請求


httpclient 提供了一些簡單的 API 讓程式設計師可以使用一些簡單的HTTP溝通


底下透過一個範例來介紹 Get 請求的作法

//.....
String targetUrl = "http://localhost:8080/test/LoginAction.do"  //請求路徑
HttpClient client = new HttpClient();  //建立一個 HttpClient 物件
HttpMethod method = new GetMethod(targetUrl );  //建立一個 Get Http method

NameValuePair param1 = new NameValuePair("account","tester1");  //加入請求參數
NameValuePair param2 = new NameValuePair("password","123456")   //加入請求參數

method.setQueryString(new NameValuePair[]{param1 ,param2});  //設定所有請求參數

int statusCode = client.executeMethod(method);  //發出 Request,並返回 Http 狀態碼

System.out.println("Http status : " + HttpStatus.getStatusText(statusCode));
method.getResponseBodyAsString();  //取得回應內容 為String
// or
method,getResponseBodyAsStream();   // 取得回應的輸入串流
method.releaseConnection();



2011年8月7日 星期日

Java 網路程式 - org.apache.commons.httpclient 傳送檔案給 Servlet

本篇介紹運用 apache commons 中的 httpClient 模擬一個 Http Post 的方法

關於 詳情可以看 RFC1867:

他同樣是運用 Form-based File Upload in HTML

將檔案送到一個 Servlet,在 Servlet 中運用 apache commons 的 fileUpload 執行存檔動作

以下為簡圖說明之











在 Client 端部分不限於 Servlet 裡,已下看看Client程式的sample

2011年8月6日 星期六

【JACOB】Office 轉 HTM、MHT

本篇來介紹一下 MS Office 的轉檔案例,以下會說明要如何將 word、ppt、excel

透過 JACOB 操作 Office 進行轉檔的過程,而最終產出結果為 HTM 檔

接著就以一個 Word 操作的 Sample 來介紹

//.....
String officeFilePath = "C:\\abc.doc";   //word 檔
String HtmFilePath = "C:\\abc.htm";   //轉出檔
//初始化  Wrod 
ActiveXComponent activeX_App = new ActiveXComponent("Word.Application");
try{
    //將操作 office 的過程設定為背景執行
    activeX_App.setProperty("Visible", new Variant(false)); 
    // 取得 該 Word 的Dispatch 物件,透過設置Property 為 "Documents"
    Dispatch prop = activeX_App.getProperty("Documents").toDispatch();  
    
    //載入 word 檔案並開啟  運用 Dispatch.invoke(...).toDispatch() 返回一個 Dispatch 物件
    Dispatch office = Dispatch.invoke(
                 prop,
                 "Open",
                 Dispatch.Method,
                 new Object[] {officeFilePath, new Variant(false),
                                     new Variant(true) }, 
                 new int[1]).toDispatch();

    //將 word 文件另存成 HTM 檔
    Dispatch.invoke(office, 
                            "SaveAs",
                            Dispatch.Method,
                            new Object[] {mhtFilePath, new Variant(8)},   //WORD 轉 HTM 的代碼為 8
                            new int[0]);
	
    Dispatch.call(office, "Close");  //關閉 Word

    }catch(Exception e){
	e.printStackTrace();
    }finally{
        activeX_App.invoke("Quit");   
    }

2011年8月5日 星期五

【JACOB】Java-COM Bridge 介紹

在說到 JACOB 之前先來談談 Java 特性

首先 大家都知道的 Java 優點中 其中一項即是 "跨平台"

Java 將程式設計師與底層的作業系統隔開  讓 Java 程式能夠在不同的平台上開發、運行

說到這個優點,也就因為如此導致 Java 與底層的作業系統變的毫無關係

這樣的情況讓 Java 需要透過底層的作業系統操作或運用某些函式庫是格外困難

例如最近遇到的需求,我們需要將 MS office 的檔案轉檔成 HTM

如果 AP 存在於 Window OS 下,要如何透過 Java 實現?有幾種方法

其中一個的解決方案可以透過 JNI 另外一種可以考慮一下 JACOB

JACOB 是透過 C 語言寫成的,並提供一個 Java bridge 讓你的 Java 程式可以呼叫

執行環境需要在 Window OS 下,在 Linux 是不 work 的

因為在使用 JACOB 時,除了導入相關的 JAR 以外,還需將 jacob.dll