JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 程式分享區 » Web  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 TinyUrl using Jakarta HttpClient
qrtt1





發文: 1748
積分: 31
於 2006-05-18 08:36 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
颱風天java天Smile
最近常聽到不少人提起了Jakarta HttpClient,所以好奇來玩玩看Smile
想著想著,可以把tinyUrl.com的功能寫成一個java bean來使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import java.io.IOException;
 
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
 
public class TinyUrl {
 
  /***************************************************************************
   * 來做一點javabean的基礎建設
   */
 
  private String longUrl;
 
  private String shortUrl;
 
  public TinyUrl() {
  }
 
  public String getLongUrl() {
    return longUrl;
  }
 
  public void setLongUrl(String longUrl) {
    this.longUrl = longUrl;
  }
 
  public String getShortUrl() {
    return this.shorten(this.getLongUrl());
  }
 
  public void setShortUrl(String shortUrl) {
    this.shortUrl = shortUrl;
  }
 
  /**
   * 這才是我們程式的核心所在
   * 
   * @param url
   * @return shortenUrl
   */
 
  private String shorten(String url) {
    
    /**********************************************************
     *  要這一行動起來, 你要有一些相依的library才行
     *  commons-logging
     *  commons-codec
     */ 
    HttpClient client = new HttpClient();
    
    
    /***********************************************************
     * 設定連線的站臺位置
     * 請別在"站臺位置"加了多餘的protocol
     * ex. setHost("http://tinyurl.com", 80, "http");
     * 不然他就噴UnknownHostException給你:P
     */
    client.getHostConfiguration().setHost("tinyurl.com", 80, "http");
 
    /***********************************************************
     * 觀察了表單內容是用post方法, 而使用的script name為create.php
     */
    PostMethod post = new PostMethod("/create.php");
    post.addParameter(new NameValuePair("url", url));
 
    
    String s = null;
    try {
      /***********************************************************
       * 透過http client來執行post/get方法
       */
      client.executeMethod(post);
      
      /***********************************************************
       * 再用您選用的方法傳回response body
       * 這裡偷懶了一下使用了getResponseBodyAsString()
       * log上會發出警告
       * 
       * 2006/5/18 上午 08:13:22 org.apache.commons.httpclient.HttpMethodBase getResponseBody
       * 警告: Going to buffer response body of large or unknown size. 
       * Using getResponseBodyAsStream instead is recommended.
       */
      s = post.getResponseBodyAsString();
    } catch (HttpException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    
    /***********************************************************
     * 以下是網頁的"解析"
     * 也是懶人法haha
     * 您也可以改成regular expression  
     */
    
    int start = s.indexOf("The following URL:");
    int end = s.indexOf("Open in new window");
    s = s.substring(start, end);
    start = s.indexOf("http://tinyurl.com");
    end = s.indexOf("</b><p>");
    s = s.substring(start, end);
    return s;
  }
 
  public static void main(String[] args) throws HttpException, IOException {
    TinyUrl tbean = new TinyUrl();
    tbean.setLongUrl("http://www.google.com.tw");
    System.out.println(tbean.getShortUrl());
  }
}


心得:
使用上還算蠻直覺得 Big Smile
附帶一提, http://wiki.apache.org/jakarta-httpclient/ForAbsoluteBeginners 真的是好文一篇啊


qrtt1 edited on 2006-05-18 09:15
reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
10852 TinyUrl using Jakarta HttpClient qrtt1 3380 2006-05-18 08:36
6782 Re:TinyUrl using Jakarta HttpClient 幻風影 393 2006-10-26 09:15
6882 Re:TinyUrl using Jakarta HttpClient qrtt1 477 2006-11-06 15:41
5644 Re:TinyUrl using Jakarta HttpClient derekypp 6067 2007-06-21 14:50
5511 Re:TinyUrl using Jakarta HttpClient linexpmail 683 2007-06-21 17:09
8419 Re:TinyUrl using Jakarta HttpClient derekypp 5781 2007-06-22 12:26
» JWorld@TW »  Java 程式分享區 » Web

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8