發表文章

目前顯示的是 十二月, 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 staticvoidmain(String[] args) {

try{

// 初始設定,username 和 password 非必要
Properties props =newProperties();
props.setProperty("mail.transport.protocol","smtp");
props.setProperty("mail.host","yourmailserver.location.or.ip");
//props.setProperty("m…

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 有:WhirlpoolSHA-160, SHA-256, SHA-384, and SHA-512MD5等,
更詳細的內容可見:
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/software/gnu-crypto/
// 支授的演算法可見:http://www.gnu.org/software/gnu-crypto/a…

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 staticvoidmain(String[] args) {

// For use of HTMLInputFilter, go to the followed website first.
/…

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 staticvoidmain(String[] args) {

// 測試純文字的 escape 和 unescape
String normalWords ="…

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

隨著現在電腦越來越便宜,
每個人在日常生活中都有可能同時接觸到很多台電腦,
如學生可能有一台桌機、一台筆電,再加上研究室的電腦等等。

然而擁有這麼多台電腦也相當令人苦惱,
因為有時是改了這台電腦的資料得自己更新到其他的電腦,
有些時候則是想要的資料不在手上而在其他電腦,
總而言之就是資料同步的問題。

 Windows Live Sync 是微軟所推出免費的資料夾同步軟體,
其目的就是在不同的電腦同步處理檔案,讓檔案永遠保持最新狀態。
在官方網站上提到有三項主要的功能:
同步處理檔案:永遠保持所有電腦上的重要檔案為最新狀態,不論使用的是 PC 或 MAC (MAC 僅支援英文版)。共享工作:使用共用資料夾,與好友或同事同步處理檔案。 存取不受限:登入 Sync 網站,即可遠端存取任何安裝 Sync 的電腦。 簡而言之若是你常需要在不同電腦工作想將檔案同步,想跟其他人分享檔案、協同作業,
或是常在外面上網,需要取得遠端電腦中的檔案但又不想讓家中電腦一直開機。
只要符合上面任何一項條件,那麼  Windows Live Sync 絕對是最適合你的選擇。

關於 Windows Live Sync 的一些基本資料和使用限制如下:
官方網站: http://sync.live.comhttps://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教學微軟的免費Live Sync服務,讓你輕鬆同步多台電腦的檔案!

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 TesterConfigure it in Window > Preferences > RegEx Tester 或者依據 Regular Expression Tester官網 的教學:
Download the most recent version as a zip fileUnzip it to ECLIPSE_HOMERestart EclipseIn Eclipse, choose Window > Show View > Other > RegEx TesterConfigure it in Window > Preferences > RegEx Tester 即先下載套件的 zip 檔,解壓縮至 eclipse 的目錄,然後重啟 eclipse,
最後照著上面的…

相關文章