jsp程序都是模塊,并且具有強大的表達-請求(presentation-request)功能。建立一個完美的數據庫訪問是一個具有挑戰的過程,而jdbc接口能夠很好地完成這一過程。然而,嵌入于jsp代碼中的jdbc代碼,與sql命令嵌入在jdbc一樣,可以充分利用jsp的功能,為客戶端建立一個整潔而簡便的api。為了達到這一目的,我們可以考慮到使用jsp操作來建立數據庫接口組件。
完美的jsp設計模式是model-view-controller (mvc)。傳統三層體系為:model為程序邏輯和數據;view為查看;以及controller為請求處理。遵循這一模型,一個jsp程序包含客戶端-服務器“對話框”的每一“行”的頁面。在一個典型的程序中,你可以看到一個查詢頁面,一個驗證頁面,一個數據庫插入頁面,一個數據庫更新頁面,等等。
在上一篇的文章中,我們討論到如何在每一頁面中嵌入jdbc,以保證程序的結構更加合理。然而,建立可執行的sql命令,正如變量通過jdbc命令而傳遞一樣,也有可能會增加程序的復雜性。
jdbc設計的jsp操作
jsp數據庫操作的另一方法是,在不使用jdbc的情況下為數據庫建立一些操作的集合。使用這種方法,你可以得到兩種好處:
第一,你可以消除使用jdbc的必要,這就使得很多工作得以簡化;
第二,你的設計和代碼的組織更加合理(比如可讀性,靈活性,以及可維護性)。
你仍然需要一些驅動程序,但你首先簡化以上的操作。jsp程序中的操作都是一些邏輯塊,通常被其它的jsp程序開發者編寫和利用,但你可以把它們當成子程序來使用。使用jsp操作的意義是標準化某些功能,以及最大程度地減少嵌入在jsp的java代碼數量。
jsp提供了一套標準擴展的類。通過這些類,你可以通過一個標簽管理器器(tag handler)定義一個操作。這里有兩個jsp定義的java接口:tag接口和bodytag接口,分別是由tagsupport類和bodytagsupport類執行。
你可以建立通用jsp用途的一個標簽庫,并且你也可以執行標簽管理器(tag handler)以擴展類的支持。以下是實現這些過程的步驟。
首先,執行一個標簽管理器的類:
packagecom.myactions;
(import statements go here)
public class myactiontag extends tagsupport {
...
}
接著,編譯這段代碼,并將類文件放置在程序的類庫中。然后,你將需要一個tag library descriptor (tld)文件,這是一個xml文件,以匹配你的操作名稱和相應的標簽管理器的類。
|
相關的trialware
.dbutils (apache software foundation)
.ibm informix jdbc driver (ibm)
.mysql connector/j 3.0 (mysql ab)
.sql4x manager j 2.2 (macosguru)
.informix downloads (ibm red brick warehouse 32bit) (solaris) (ibm)
.informix downloads (ibm red brick warehouse 64bit) (hpux) (ibm)
更多trialware
假設你已經建立一個名為myaction的操作,這是一個與com.myactions.myactiontag類匹配的tld。tld文件必須位于程序的tlds路徑。
當你從一個jsp頁調用操作時,tld告訴jsp正確的類以使用操作。這就帶來極大的方便,而且只需要少量的代碼。
但是,從何引入sql?首先,你需要建立具有連接功能的數據庫訪問。你可以使用javax接口來完成,而javax可見于jdbc 2.0 optional工具箱。jdbc 2.0的javax.sql.datasource類提供了你所需要的連接。
此時,sql位于什么地方?它在bean中。你可以使用jdbccreatestatement和preparedstatement在bean中建立一個方法。將這一方法成為一個公共的vector,并正確地將你的sql聲明傳遞到這一方法。
總結
你的數據庫bean執行一個嵌入在操作體的sql語句,你可以傳遞一個語句給sql語句,或者使用它來執行一個預先的操作??梢酝ㄟ^標簽管理器來執行你的操作。由于jdbc被嵌入于庫代碼中,你將不能在jsp程序中明確地使用它。
初次使用這種方法會覺得它比jdbc中的嵌入sql,以及jsp中的嵌入jdbc更加復雜,但是,你建立sql操作并將它們存放在一個tld,你只需做一次,在所有的jsp程序中就可以訪問這些操作。這就是這種方法的優點。
新聞熱點
疑難解答