發表文章

目前顯示的是 2009的文章

Java:呼叫function後更新畫面的問題

本篇還沒有很完整而只是簡單的筆記, 之後如果有比較好的例子再寫出完整的code給大家參考。 先說明一下我遇到的問題: 我寫了 server 和 client 的架構,他們彼此會以 socket 溝通, 而我想把他們互相傳送的內容顯示在視窗上, 但是當我按下「啟動」的按鈕後傳送的內容並不會馬上更新, 而是一直等到所有的傳送都結束了才會顯示。 後來我去查到了這篇: 事件处理中UI的刷新问题(笔记体小品文) 。 大家可以仔細看看,他指出要用另外一個 thread 去執行啟動的 function, 這樣畫面才能同步更新。 關鍵字:更新, 畫面, 同步, 卡住 參考資料: 事件处理中UI的刷新问题(笔记体小品文)

Java:以javamail寄送附件圖檔與html格式email教學

圖片
在看這篇教學前,你應該要先將 javamail 相關設定完成, 下載點在: http://java.sun.com/products/javamail/downloads/index.html API 文件: http://java.sun.com/products/javamail/javadocs/index.html 若你需要 source code 可見: http://kenai.com/projects/javamail/downloads 使用 java 寄信時我們常用 javamail, 然而很多人都只會寄純文字信件或單純的 html郵件, 如果你想先知道要怎麼寄純文字的信件的話, 這個連結有很詳細的 code : Send email with JavaMail 。 學會了寄純文字和html,但是要怎麼把附件的圖顯示在 html中呢? 直接看下面的程式就可以明白了,超簡單的! import java . util . Properties ; import javax . activation . DataHandler ; import javax . activation . FileDataSource ; import javax . mail .*; import javax . mail . internet .*; public class SendMailDemo { /** * Java:以javamail寄送附件圖檔與html格式email教學 * * @author werdna at http://werdna1222coldcodes.blogspot.com/ */ public static void main ( String [] args ) { try { // 初始設定,username 和 password 非必要 Properties props = new Properties (); props . setProperty ( "mail.transport.protocol" , "smtp"

Java:計算 MD5, SHA, WHIRLPOOL等雜湊碼 hash code的程式教學

在開發程式期間我們常需要確認檔案的正確性, 無論是在網路傳送中有沒有被更改,或是檔案是不是同一個等等, 這時我們會需要 hash(雜湊) 或 digest(摘要) 來幫忙。 同樣的內容或檔案經過相同的 hash 演算法後會得到相同的結果, 這樣就可以確認我們得到的是正確的檔案, 上面的用法就是我們常聽到的 HMAC(Hash-based Message Authentication Code)。 在 Java 中已內建有一些 hash 演算法如:MD5 想知道該怎麼用最基本的 hash 可見 Java 官方的教學: Java:HMAC-MD5 Example 然而我們總是會需要用到用更多種的演算法, 因此今天要介紹的就是一個支援多種 hash code 的套件: gnu-crypto 。 這個套件的官網連結為: GNU Crypto - GNU Project - Free Software Foundation (FSF) , 其支援的 hash 有: Whirlpool 、 SHA-160, SHA-256, SHA-384, and SHA-512 、 MD5 等, 更詳細的內容可見: http://www.gnu.org/software/gnu-crypto/algorithms.html 中的Message digest (hash)。 以下就是簡單的程式範例,其 hash 結果已經放在註解中: package demo . digest ; import java . security . MessageDigest ; import java . security . Security ; /** * Java:計算 MD5, SHA, WHIRLPOOL等雜湊碼 hash code的程式教學 * * @author werdna at http://werdna1222coldcodes.blogspot.com/ */ public class DigestDemo { // 本文應用的套件為:gnu-crypto-2.0.1 // GNU Crypto - GNU Project - Free Software Foundation (FSF) // http://www.gnu.org/softwa

HTML Purifier in Java:HTMLInputFilter

在製作 web services 的時候,我們常需要防範不當使用者的惡意攻擊, 而在這些攻擊之中,最著名的就是XSS (Cross Site Scripting), 其運作方式和常用的攻擊手法可見下列連結: wikipedia:Cross-site scripting 浅析XSS(Cross Site Script)漏洞原理 XSS (Cross Site Scripting) Cheat Sheet 而在眾多的 web services 程式語法中,以 PHP 對 xss 攻擊的防範最完全, 因為 PHP 有個套件名為 HTML Purifier ,如官網的小標題,這個套件的目的是: Standards-Compliant HTML Filtering ,也就是除了過濾也還有將語法標準化的功能。 HTML Purifier 經由多方的努力已有成效,他可抵擋的攻擊可見 xssAttacks 。 然而針對其他程式語言的使用者,看著 PHP 套件如此強大卻沒辦法使用, 在網路上詢問也只能得到像這個網站的解答: HTML Purifier in Java , 這篇的結論是在 Java 中使用 Resin Quercus (a PHP interpreter for the JVM) , 但實際上也沒有人測過到底會不會 work.... ,而且這種繞了大彎的方法真的很麻煩, 於是我後來找到的解法是: HTMLInputFilter ,雖然功能可能沒有 HTML Purifier 強, 但至少基本的功能都有了,也算是可行的解決之道。 以下就是 HTMLInputFilter 的使用範例: import java . util . ArrayList ; import com . josephoconnell . html . HTMLInputFilter ; /** * 使用 HTMLInputFilter 達成過濾 xss 等惡意字串攻擊的範例 * * @author werdna at http://werdna1222coldcodes.blogspot.com/ */ public class HTMLInputFilterDemo { public static void main ( String [] args ) {

StringEscapeUtils.escapeHtml、unescapeHtml:處理html中的編碼問題

先前在幾篇文章中提到了網址編碼和文字轉碼的問題, 如 Javascript 就有以下 1, 2兩篇, Java 部份則是第3篇: 用Javascript替中文轉碼:escape, encodeURI, encodeURIComponent 的比較 Online UrlEncoder:線上轉換中文網址為UTF-8編碼 用Java替中文轉碼:URLEncoder 然而最近使用 Java 處理網頁資料時卻遇上了一個問題, 即從網頁原始碼得到的資料會有類似下面這種編碼。 &<>" 這在我們一看就知道是為了在 html 正確顯示的code, 然而如果不是熟悉 html 的人會以為是亂碼, 而且就算我們知道是 html 的 code, 平常不使用的話也不容易知道到底哪個碼對應哪個字。 因此今天就是要介紹在 Java 中能將 html 編碼正確轉換的套件, org.apache.commons.lang.StringEscapeUtils 。 另外若想知道在 java中如何處理 xss 的攻擊可見: HTML Purifier in Java:HTMLInputFilter 在 StringEscapeUtils 有許多好用的功能,之後有用到的話會再來介紹, 今天主要先介紹: escapeHtml 和 unescapeHtml , 更多的功能可見 StringEscapeUtils 的 API 。 要使用 StringEscapeUtils 要先到這個網址去下載相關的 jar 檔並匯入, http://commons.apache.org/downloads/download_lang.cgi 。 接著便可以依下面的程式碼測試是否可以正確 escape 和 unescape html了。 程式中共有兩個測試,一個測試純文字的轉換,另一個則是針對上面所提的奇怪符號作測試: package demo . stringEscapeUtils ; import org . apache . commons . lang . StringEscapeUtils ; public class StringEscapeUtilsDemo { public static void main ( String []

Windows Live Sync:資料夾同步的好幫手

隨著現在電腦越來越便宜, 每個人在日常生活中都有可能同時接觸到很多台電腦, 如學生可能有一台桌機、一台筆電,再加上研究室的電腦等等。 然而擁有這麼多台電腦也相當令人苦惱, 因為有時是改了這台電腦的資料得自己更新到其他的電腦, 有些時候則是想要的資料不在手上而在其他電腦, 總而言之就是資料同步的問題。  Windows Live Sync 是微軟所推出免費的資料夾同步軟體, 其目的就是 在不同的電腦同步處理檔案,讓檔案永遠保持最新狀態。 在官方網站上提到有三項主要的功能: 同步處理檔案 :永遠保持所有電腦上的重要檔案為最新狀態,不論使用的是 PC 或 MAC (MAC 僅支援英文版)。 共享工作 :使用共用資料夾,與好友或同事同步處理檔案。  存取不受限 :登入 Sync 網站,即可遠端存取任何安裝 Sync 的電腦。 簡而言之若是你常需要在不同電腦工作想將檔案同步,想跟其他人分享檔案、協同作業, 或是常在外面上網,需要取得遠端電腦中的檔案但又不想讓家中電腦一直開機。 只要符合上面任何一項條件,那麼  Windows Live Sync 絕對是最適合你的選擇。 關於 Windows Live Sync 的一些基本資料和使用限制如下: 官方網站: http://sync.live.com 或 https://www.foldershare.com/ 下載點: http://g.live.com/8sesync/download 支援作業系統:Windows、Mac(英文版) 使用帳號:Windows Live ID 同步資料夾及檔案數量:20個資料夾 , 20000個檔案 單檔最大限制容量:4 GB 加密方式:使用AES及SSL加密 至於安裝和設定其實 Windows Live Sync 官網 已說明得很清楚了, 只要照著步驟做很快就能上手並完成所需的設定。 若是官網的說明不過詳細也可以參考另外兩篇很完整的說明: Windows Live Sync教學   微軟的免費Live Sync服務,讓你輕鬆同步多台電腦的檔案! 關鍵字:Sync、同步、資料夾、資料、軟體 參考資料: Windows Live Sync 官網 Windows Live Sync教學 微軟的免費Li

Eclipse 好用套件:Regular Expression Tester

圖片
在先前的文章中我們曾經提到正規式(regular expression)的使用, 也寫了一篇教學在: java.util.regex正規式的應用:Pattern和Matcher 然而如果要透過程式才能測試寫出來的 regular expression 正不正確, 那對我們這些不太常使用 regular expression 的人是很麻煩的。 (100.09.29) 更新: 這邊更新介紹線上的測試網站,以及一個新的 Eclipse 套件。 Online Regular Expression Tester:線上正規式測試驗證工具網站 Eclipse 的 plugin, http://myregexp.com/eclipsePlugin.html 因此今天要在這裡介紹一個 Eclipse 的好用套件: Regular Expression Tester 透過他我們就能快速測試我們所寫的 regular expression 和待測的文字是不是有 match, 如此就能在寫程式前修正語法,免除 debug 的痛苦。 首先要安裝可依以下步驟: In Eclipse, choose Help > Install New Software 在 work with 中填上: http://brosinski.com/ regex /update ,勾選安裝 In Eclipse, choose Window > Show View > Other > RegEx Tester Configure it in Window > Preferences > RegEx Tester 或者依據 Regular Expression Tester官網 的教學: Download the most recent version as a zip file Unzip it to ECLIPSE_HOME Restart Eclipse In Eclipse, choose Window > Show View > Other > RegEx Tester Configure it in Window > Preferences > RegEx Tester 即先下

Apache HttpClient 4.x 使用 GET, POST 範例

先前我曾經發了一篇介紹如何抓取網頁的教學: 利用Jakarta.Commons.HttpClient抓取網頁、網站(Parser) ,不過當時用的是 HttpClient 3.1。 經過時間的演進 Apache 已經在 14 August 2009 發佈 : HttpComponents HttpClient 4.0 (GA) 。 由 3.1 到 4.0 因為底層幾乎全部重新改寫,所以也使有些舊的程式無法使用。 這篇就是我自己寫的一個簡單範例。 在看範例之前先把一些重要連結整理給大家: 想知道這次到底更動了哪些東西可以看: Apache HttpClient 首頁 官方的 Tutorial 在: Apache HttpClient Tutorial 而 API DOC、說明文件則在: Apache HttpClient apidocs 相關的程式碼、jar 檔在: HttpComponents HttpClient 4.0 (GA) 注意,在寫程式前必需先將四個 jar 檔正確匯入,最後兩個(*)是選用, 請參考: http://hc.apache.org/httpcomponents-client/quickstart.html : commons-logging- x.x.x .jar commons-codec- x.x.x .jar httpcore- x.x.x .jar httpclient- x.x.x .jar apache-mime4j- x.x.x .jar (*) httpmime- x.x.x .jar (*) 說了這麼多,以下是程式的範例, 第一個是傳回在 google 查詢 httpclient 的結果。 第二則是傳回台大圖書館查詢 Head First Java 的結果。 1 package demo . httpclient ; 2 3 import java . io . IOException ; 4 import java . util . ArrayList ; 5 6 import org . apache . commons . httpclient . HttpStatus ; 7 import org . apache . http

Java:Log4j 的簡單教學

Log4j 是目前開發 java 時很常用到的 log 套件, 以下整理一些我目前用到的功能,並附上更多更深入的教學。 首先在使用  Log4j 時我們要先將一些 jar 檔匯入, 如果有出現意外的 Exception 記得先找看看是不是有 jar 檔沒有匯入, 類似的問題將 Exception 丟到 google 就會有解答,所以在這邊就不詳細說明。 只列出官方的使用前須知: http://logging.apache.org/log4j/1.2/faq.html#1.3 (2011.10.04更新) 若您只是要快速產生或下載 Log4j 的設定檔,請參考: Logback, Log4j 設定檔自動產生器 使用 Log4j 時我們可以建立一個 Log4j.properties 檔來描述我們要記錄的項目, 這個設定檔長得像下面這樣: -------------------------------------------------------------------------------------------------------------- log4j.rootLogger= Info, A1, A2 # A1 is set to be a ConsoleAppender log4j.appender.A1= org.apache.log4j.ConsoleAppender log4j.appender.A1.layout= org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern= [%d{yy/MM/dd HH:mm:ss}][%p][%C-%L] %m%n # A2 is set to be a file log4j.appender.A2= org.apache.log4j.DailyRollingFileAppender log4j.appender.A2.layout= org.apache.log4j.PatternLayout log4j.appender.A2.layout.ConversionPattern= [%d{yy/MM/dd HH:mm:ss}][%p][%C-%L] %m%n

Gliffy:取代 Visio 的線上繪圖網站

圖片
當我們想畫流程圖的時候常想到 Visio, 但因為 Visio 太貴學校公司不一定有購買故取得不易, 而且只是偶爾用卻得安裝肥大的程式,這都讓人相當不開心。 然而自從發現 Gliffy 後感覺生命出現了光采呢!(好像老套的廣告 XD) Gliffy 這個網站如同他自己的介紹,是個 Online Diagram Software, 雖然陽春,但免費又免安裝就讓人用起來相當舒服, 而且 Visio 中比較常用到的功能也都有支援,真的相當不錯。 目前 Gliffy 有提供一些常用的圖片,也支援自己上傳, 另外也有一些基本的功能如:區塊連線、圖形旋轉、調整大小等功能, 但他的群組功能還有點小問題,建議使用時要常存檔,不然格式跑掉很慘。 在繪圖完成後 Gliffy 支援的儲存格式包括 JPG, PNG 和 SVG, 其中 SVG 格式可以透過 Visio 開啟和編輯。 關鍵字:Gliffy、Visio、線上繪圖、繪圖軟體、流程圖、破解、序號 參考資料: Gliffy [webapp] Visio 苦手的救星,線上畫圖靠 Gliffy 下面是介紹圖:

使用 Dom4j 時的 XPath 問題

我們使用 dom4j 時可使用 XPath 來取得特定的 node,如: List list = document.selectNodes(specificColumnXPath); 此時可能會出現這樣的 Exception: Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException 其原因是因為少了 jaxen ,下載 jar 檔匯入後應該就可以解決了。 另外如果確定 XPath 正確, selectNodes() 卻一直回傳空值(null)的話, 有可能是因為 xmlns 不是 default 值的關係,相關討論網址如下: JavaWorld@TW Java論壇- 請教dom4j 的 xpath 問題 主题:解决dom4j无法解析xml命名空间的问题 關於Dom4j、XPath的教學則可以參考: http://www.dom4j.org/dom4j-1.6.1/guide.html   http://www.zvon.org/xxl/XPathTutorial/General/examples.html 關鍵字:dom4j、XPath、jaxen、問題、錯誤、無法使用、xmlns、命名空間 參考資料: jaxen 在Dom4j中使用xpath JavaWorld@TW Java論壇- 請教dom4j 的 xpath 問題 主题:解决dom4j无法解析xml命名空间的问题 http://www.dom4j.org/dom4j-1.6.1/guide.html http://www.zvon.org/xxl/XPathTutorial/General/examples.html   

XP常用的「開始-執行」指令

在XP中的「開始 - 執行」其實能做很多事, 只要輸入簡單的指令就可以省去在重重資料夾中尋找捷徑的麻煩, 對常用某些服務的人記住幾個字母的指令也許方便得多。 以下是我常用的指令,往後會慢慢更新: 計算機:calc  工作管理員:taskmgr 遠端桌面:mstsc 登錄編輯程式:regedit 系統設定公用程式:msconfig ping 其他更多的指令可參考別人所整理的文件: 開始-執行指令大全 關鍵字:Windows XP、XP、開始、執行、指令、輸入、快速 參考資料: 開始-執行指令大全

加快XP開機速度和停頓問題(ADSL使用者)

這篇算是給自己的小筆記。 XP的ADSL使用者常常遇到和我一樣的狀況, 就是開機時網路要等很久或停頓一下才能連線, 連帶地也影響到開機的速度。 面對這種問題可以依以下的步驟解決: 開始-連線-顯示所有連線  區域網路-右鍵-選內容 一般-Internet Protocol(TCP/IP)-內容 使用下列的ip位址:IP位址:192.168.0.1,子網路遮罩:255.255.255.0 套用後就可以解決上面的問題了。 關於這個解法很久之前有看過說明, 大意是說XP原本設定會由DHCP自動找IP,但ADSL用戶在連線前並沒有IP, 而XP一直到檢查找不到IP後才會用ADSL連線,也因此會停頓一下。 剛剛google了一下有個大陸的網頁有說明: 如何消除XP开机ADSL拨号等待的问题 其他的XP加速法可參考: XP使用及加速法!! 關鍵字:Windows XP、ADSL、網路連線、網路、加速 參考資料: XP使用及加速法!! 如何消除XP开机ADSL拨号等待的问题

為7-Zip變裝:7-Zip Theme Manager

圖片
壓縮軟體有很多種,從一開始接觸XP內建的WinZip, 到後來紅透半邊天的WinRAR,一直到現在用的 7-Zip 。 當初會從WinRAR換到 7-Zip 是因為 7-Zip 是免費軟體, 而WinRAR雖然在到期後還是能持續用,但用起來就有點不開心 XD。 從WinRAR換到 7-Zip 在功能上都沒什麼重大的影響, 但在使用介面上 7-Zip 就相當遜色, 因此今天就要來介紹如何將 7-Zip 的theme和icon變漂亮。 首先可以連到 7-Zip Theme Manager 下載軟體,或 按這裡下載 。 將軟體解壓縮後執行 7zTM.exe 。 執行後首先會問我們要何種語言,我想大家大概也只會英文吧(選項還有德文、義大利文)。 因為要更改7-Zip的設定,所以會詢問7-Zip的安裝資料夾在哪, 如果當初安裝時沒有更改的話就用預設值即可。 7-Zip Theme Manager 可以更改7-Zip工具列和檔案的圖示, 首先先在左上角選擇 Toolbar Themes,再由下方列表中選擇想要的模式。 這段期間右方都可以直接看到預覽畫面,選完後接下Activate theme即可。 另外若想改變檔案的圖示(也就是icon),則在左上角選擇 Filetype Themes。 這邊的圖示真的比7-Zip內建的漂亮多了呢!選完後一樣記得要 Activate theme。 執行結束後馬上就可以看到成果囉。 關鍵字:7-Zip、7-Zip Theme Manager、圖示、icon、theme、佈景、主題、切換、變更 參考資料: 7-Zip官方網站 7-Zip Theme Manager官方網站 7-Zip Theme Manager 佈景主題切換器,讓你的7-ZIP介面、壓縮檔變漂亮!