加快JDBC設(shè)計(jì)中JSP訪問數(shù)據(jù)庫(kù)
以前,我們已經(jīng)提到,JSP程序都是模塊,并且具有強(qiáng)大的表達(dá)-請(qǐng)求(presentation-request)功能。建立一個(gè)完美的數(shù)據(jù)庫(kù)訪問是一個(gè)具有挑戰(zhàn)的過程,而JDBC接口能夠很好地完成這一過程。然而,嵌入于JSP代碼中的JDBC代碼,與SQL命令嵌入在JDBC一樣,可以充分利用JSP的功能,為客戶端建立一個(gè)整潔而簡(jiǎn)便的API。為了達(dá)到這一目的,我們可以考慮到使用JSP操作來建立數(shù)據(jù)庫(kù)接口組件。
完美的JSP設(shè)計(jì)模式是Model-View-Controller (MVC)。傳統(tǒng)三層體系為:Model為程序邏輯和數(shù)據(jù);View為查看;以及Controller為請(qǐng)求處理。遵循這一模型,一個(gè)JSP程序包含客戶端-服務(wù)器“對(duì)話框”的每一“行”的頁(yè)面。在一個(gè)典型的程序中,你可以看到一個(gè)查詢頁(yè)面,一個(gè)驗(yàn)證頁(yè)面,一個(gè)數(shù)據(jù)庫(kù)插入頁(yè)面,一個(gè)數(shù)據(jù)庫(kù)更新頁(yè)面,等等。
在上一篇的文章中,我們討論到如何在每一頁(yè)面中嵌入JDBC,以保證程序的結(jié)構(gòu)更加合理。然而,建立可執(zhí)行的SQL命令,正如變量通過JDBC命令而傳遞一樣,也有可能會(huì)增加程序的復(fù)雜性。
JDBC設(shè)計(jì)的JSP操作
JSP數(shù)據(jù)庫(kù)操作的另一方法是,在不使用JDBC的情況下為數(shù)據(jù)庫(kù)建立一些操作的集合。使用這種方法,你可以得到兩種好處:第一,你可以消除使用JDBC的必要,這就使得很多工作得以簡(jiǎn)化;第二,你的設(shè)計(jì)和代碼的組織更加合理(比如可讀性,靈活性,以及可維護(hù)性)。
你仍然需要一些驅(qū)動(dòng)程序,但你首先簡(jiǎn)化以上的操作。JSP程序中的操作都是一些邏輯塊,通常被其它的JSP程序開發(fā)者編寫和利用,但你可以把它們當(dāng)成子程序來使用。使用JSP操作的意義是標(biāo)準(zhǔn)化某些功能,以及最大程度地減少嵌入在JSP的Java代碼數(shù)量。
JSP提供了一套標(biāo)準(zhǔn)擴(kuò)展的類。通過這些類,你可以通過一個(gè)標(biāo)簽管理器器(tag handler)定義一個(gè)操作。這里有兩個(gè)JSP定義的Java接口:Tag接口和BodyTag接口,分別是由TagSupport類和BodyTagSupport類執(zhí)行。
你可以建立通用JSP用途的一個(gè)標(biāo)簽庫(kù),并且你也可以執(zhí)行標(biāo)簽管理器(tag handler)以擴(kuò)展類的支持。以下是實(shí)現(xiàn)這些過程的步驟。
首先,執(zhí)行一個(gè)標(biāo)簽管理器的類:
packagecom.myactions;
(import statements go here)
public class MyActionTag extends TagSupport {
...
}
接著,編譯這段代碼,并將類文件放置在程序的類庫(kù)中。然后,你將需要一個(gè)Tag Library Descriptor (TLD)文件,這是一個(gè)XML文件,以匹配你的操作名稱和相應(yīng)的標(biāo)簽管理器的類。
<tag>
<name>MyAction</name>
<tagclass>com.myactions.MyActionTag</tagclass>
<bodycontent> (whatever) </bodycontent>
<attribute>myData</attribute>
</tag>
</tag>
相關(guān)的Trialware
更多Trialware
假設(shè)你已經(jīng)建立一個(gè)名為MyAction的操作,這是一個(gè)與com.myactions.MyActionTag類匹配的TLD。TLD文件必須位于程序的TLDs路徑。
當(dāng)你從一個(gè)JSP頁(yè)調(diào)用操作時(shí),TLD告訴JSP正確的類以使用操作。這就帶來極大的方便,而且只需要少量的代碼。
但是,從何引入SQL?首先,你需要建立具有連接功能的數(shù)據(jù)庫(kù)訪問。你可以使用javax接口來完成,而javax可見于JDBC 2.0 Optional工具箱。JDBC 2.0的javax.sql.DataSource類提供了你所需要的連接。
此時(shí),SQL位于什么地方?它在bean中。你可以使用JDBCcreateStatement和PreparedStatement在bean中建立一個(gè)方法。將這一方法成為一個(gè)公共的Vector,并正確地將你的SQL聲明傳遞到這一方法。
總結(jié)
你的數(shù)據(jù)庫(kù)bean執(zhí)行一個(gè)嵌入在操作體的SQL語句,你可以傳遞一個(gè)語句給SQL語句,或者使用它來執(zhí)行一個(gè)預(yù)先的操作??梢酝ㄟ^標(biāo)簽管理器來執(zhí)行你的操作。由于JDBC被嵌入于庫(kù)代碼中,你將不能在JSP程序中明確地使用它。
初次使用這種方法會(huì)覺得它比JDBC中的嵌入SQL,以及JSP中的嵌入JDBC更加復(fù)雜,但是,你建立SQL操作并將它們存放在一個(gè)TLD,你只需做一次,在所有的JSP程序中就可以訪問這些操作。這就是這種方法的優(yōu)點(diǎn)。
下一次,我們將會(huì)講述到JSP頁(yè)和會(huì)話(sessions)之間的數(shù)據(jù)傳遞。
- jsp+jdbc實(shí)現(xiàn)連接數(shù)據(jù)庫(kù)的方法
- JSP中使用JDBC訪問SQL Server 2008數(shù)據(jù)庫(kù)示例
- JDBC操作數(shù)據(jù)庫(kù)的增加、刪除、更新、查找實(shí)例分析
- jdbc操作mysql數(shù)據(jù)庫(kù)實(shí)例
- JDBC鏈接數(shù)據(jù)庫(kù)的幾個(gè)步驟
- JDBC對(duì)MySQL數(shù)據(jù)庫(kù)布爾字段的操作方法
- Java使用JDBC連接數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
- JSP基于JDBC的數(shù)據(jù)庫(kù)連接類實(shí)例
相關(guān)文章
JavaScript實(shí)現(xiàn)鏈表插入排序和鏈表歸并排序
這篇文章主要介紹了JavaScript實(shí)現(xiàn)鏈表插入排序和鏈表歸并排序,較為詳細(xì)的分析了插入排序和歸并排序,對(duì)于學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)具有一定參考借鑒價(jià)值,需要的朋友可以參考下。2016-10-10實(shí)例講解JSP Model2體系結(jié)構(gòu)(上)
實(shí)例講解JSP Model2體系結(jié)構(gòu)(上)...2006-10-10JSP技術(shù)實(shí)現(xiàn)RSS訂閱功能的示例
用JSP技術(shù)實(shí)現(xiàn)RSS功能是如何做到的呢?本文將向你介紹一下具體的實(shí)現(xiàn),如果你對(duì)用JSP技術(shù)實(shí)現(xiàn)RSS功能感興趣,那么這篇文章是你的選擇。2016-10-10JSP學(xué)習(xí)之Java Web中的安全控制實(shí)例詳解
這篇文章主要介紹了JSP學(xué)習(xí)之Java Web中的安全控制,較為詳細(xì)的分析了JSP安全控制的常見技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09加快JDBC設(shè)計(jì)中JSP訪問數(shù)據(jù)庫(kù)
加快JDBC設(shè)計(jì)中JSP訪問數(shù)據(jù)庫(kù)...2006-10-10