2010年11月21日 星期日

JSP 教學 - PreparedStatement 的使用

在一般的 Java 程式裡如果要插入一筆資料到資料表中,最基本的方法都是用 java.sql.Statement 去做,譬如:
Statement state = connection.createStatement();
state.executeUpdate("SQL 語法");
通常上面的 SQL 語法會寫的太凌亂,譬如太多的單引號和雙引號交錯導致可讀性不易,例如


state.executeQuery("INSERT INTO temp(account, user, password) VALUES('" + account + "','" + username + "','" + password + "')"); //以上的三個變數都為字串
以上有個替代方法就是利用 java.sql.PreparedStatement
可以很簡單的表示成以下


String sql = "INSERT INTO temp(account, user, password) VALUES(?, ? ,?)";
PreparedStatement prestate =  connection.prepareStatement(sql); //先建立一個 SQL 語句並回傳一個 PreparedStatement 物件
prestate.setString(1, account); //對應到第一個問號
prestate.setString(2, user); //對應到第二個問號

2010年11月15日 星期一

JSP 教學 - JavaMail 電子郵件處理

我們可以透過 JavaMail API 來進行電子郵件的處理,首先必須先去下載 JavaMail 套件

可以到 http://www.oracle.com/technetwork/java/javamail-1-4-2-141075.html

下載最新的 JavaMail 1.4.2 API ,可以選擇下載壓縮檔,下載完成並解壓縮後

我們需要的是 mail.jar 即可,如果需要處理附加檔案的話則還要另外下載

JavaBeans Activation FrameworkJAF來配合 JavaMail
接下來介紹一下 JavaMail 的用途,在寫 JSP 的登入的時候如果使用者忘記密碼


那就是用到 JavaMail 的時候了,我以 NetBeans 為例實現寄送電子郵件的功能


首先將剛剛下載的 mail.jar 匯入到 project 中,在側邊欄的 Liberaries 點擊右鍵 > Add Library

接下來可以在一個 Servlet 中進行郵件處理,在這之前可能需要先讓使用者

2010年11月13日 星期六

JSP 教學 - 圖文驗証碼製作

概述:在登入或是註冊的時候加上驗證碼,可以防止有心人批量的註冊或登入或是到取別人的
帳密。

圖形驗證碼的製作以 Java 2D 為基礎,透過 Servlet 動態產生驗證碼

這邊作法有兩種,一種是已經事先產生好大量的驗證碼再去隨機取一張,另一種是如上述的方法

動態產生一張圖形驗證碼,這樣是比較安全的狀況,如果把驗證的圖放在某目錄下又沒加以保護

很容易讓人直接以URL取得你的所有圖檔,

以 Xuite 為例就是如此,在我這製作專題的過程中就是碰到類似問題幸好.....Xuite 不是動態產生,不然專題早掛摟....

首先先配置一個 Servlet 吧,以下為 SignalPage.java

2010年10月27日 星期三

Hibernate 教學 - 值型別的 Component (二)

上一篇所說到的 Component 中,我們是以一個一對多的例子來說明

最重要的觀念就是針對 Value Type 實作出一個類別,以及在組態檔中的設定,先來看看之前組態檔的寫法

用上一篇的 Employee 組態檔來說明

<set name="photos" table="photoOne">
    <key column="employee_fk" />
    <composite-element class="MapPOJO.PhotoOne">
        <property name="photoFileName" column="photo_file_name"
                                       not-null="true" />
        <property name="width" column="width" not-null="true" />
        <property name="height" column="height" not-null="true" />
    </composite-element>
</set>

以上是一對多中 再一的這一方(Empolyee) 在指定 Employee 的 photos 屬性時的寫法

用 <composite-element> 帶出實做值型別的類別並以 <property> 子標籤指定該類別所需之屬性

2010年10月26日 星期二

Hibernate 教學 - Eclipse 環境配置

以 Eclipse 開發 Hibernate 時,首先先下載 Hibernate 的文件

此為下載的網址 http://sourceforge.net/projects/hibernate/files/hibernate3/

選一個最新的下載即可,而我以下示範是以 3.5.2 ,下載完成並解下縮後

在根目錄下的  hibernate3.jar 當然是必備的,還有 lib 資料夾下的類別庫

但是基本上其實只需要 lib 下的 required 資料夾裡的類別庫即可

接下來啟動 Eclipse 之後先行建立一個 Java WEB 的專案 testHibernate,完成後

如下將 Hibernate 類別庫加入到 Eclipse 的環境中

Window > Preferences > New > 輸入一個新的名稱 (ex: Hibernate-3.5.2)


之後點擊剛剛新建的 Libraries > Add JARs > 把 Hibernate3.jar 和 required 裡的東西加入

最後需要將我們剛剛建立的 Libraries 加入到 testHibernate 專案中

在左邊欄點擊 testHibernate 右鍵 > properties > Add Library > User Library > 選取 Hibernate-3.5.2 


最後請看下一篇

Hibernate 教學 - Hibernate 基礎簡介 http://programer-learn.blogspot.com/2011/02/hibernate.html

2010年10月23日 星期六

Java 程式教學 - System

關於 System 類別的是屬於 java.lang.System 下,先介紹它最重要的 static 變數

1.err    
   System.err 會回傳一個 PrintStream 物件
   主要是用來顯示出錯誤訊息例如提醒使用者該輸入的參數

2.in     
   System.in 會回傳一個 InputStream 物件
   此 InputStream 已經開啟(open),直接可以應用在輸入資料上
   例如: java.util.Scanner sc = new java.util.Scanner(System.in);

3.out   
   System.out 會回傳一個 OutputStream 物件
   這就是大家最常拿來用的輸出語法,System.out.println("");

2010年10月16日 星期六

Struts 教學 - 國際化處理

Struts 對於WEB有支援國際化的應用

通常在台灣地區 瀏覽器是設定為 zn_TW 繁體中文的

以 IE 為例可以選擇工具列上的 工具 > 網際網路選項 > 語言

在這底下可以設定你的偏好設定,可以點選新增來增加其他語系

並將預設的語言移動最上面即可

接下來看一下 Struts 對於國際化的支援

首先如果我們要做到支援繁體中文(zn_TW)和英文(en_US)的WEB網頁

第一步必須先定義這兩個的資源文件

以 Netbeans 在一個有選擇Struts framework 的 WEB App 為例

2010年10月7日 星期四

Hibernate 教學 - 一對多 (Value Type)

介紹一下有關值型別(Value Type) 的一對多關係映射

在之前已經討論過值型別與個體型別的差異了

以本文為例舉個例子,在一對多當中如果多的這一方並不需要一個實際的類別

例如說該資料只是一個字串,但這筆資料必須存入到資料庫當中

這時候就可以以一對多的(Value Type) 的關係映射來實現本案例

我們以一個人(Person)有多個信箱 email 來舉例

顯然的人(Person)是一,而 email 是多,而且 email 僅以字串格式儲存

來看一下 Person.java

2010年10月6日 星期三

Struts 教學 - DispatchAction 運用

在 Struts 處理請求過程中,處理請求的過程通常都是透過組態檔(struts-config.xml)

找到所設定的路徑並分派到所指定的 Action 處理。

如果你有一連串或是較相關的動作須執行,假如有四個動作

那你就可能必須分別撰寫四個 Action 來處理不同的動作....是有點麻煩

不過如果透過 DispatchAction 的話就會變的更加容易

首先運作原理是透過繼承 Action 的子類別 DispatchAction


緊接著你不必覆寫 execute() 這個 method

你可以透過請求參數決定你要的實際操作方法

簡單說如果你有個動作需要登入,那你可以在 form 標籤的 action 這樣寫

2010年10月2日 星期六

Hibernate 教學 - Entity Type 與 Value Type

之前文章出現過很多 Entity Type,例如 一對多 (Entity Type) ....等

Entity Type 可以看成是"個體型別"的意思,Value Type 則是"值型別"

區分他們的方法很簡單,以之前一對多....等 的例子來看

Room 和 Student 類別都有一個屬性 id,透過這個 id 我們可以識別不同的物件

在資料庫的領域裡,如果要識別不同的資料可以透過主鍵


這時候如果在類別中有一個可以識別物件的屬性且又對應到資料庫的主鍵時


則這個類別就是 個體型別 (Entity Type)


反之如果不存在任何一個屬性能對應到主鍵時則稱之為 值型別 (Value Type)