JSP程序都是模塊並且具有強大的表達請求(presentationrequest)功能建立一個完美的數據庫訪問是一個具有挑戰的過程而JDBC接口能夠很好地完成這一過程然而嵌入於JSP代碼中的JDBC代碼與SQL命令嵌入在JDBC一樣可以充分利用JSP的功能為客戶端建立一個整潔而簡便的API為了達到這一目的我們可以考慮到使用JSP操作來建立數據庫接口組件
完美的JSP設計模式是ModelViewController (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文件以匹配你的操作名稱和相應的標簽管理器的類
< tag> < name>MyAction< /name>
< tagclass>com
myactions
MyActionTag< /tagclass>
< bodycontent> (whatever) < /bodycontent>
< attribute>myData< /attribute>
< /tag>
< /tag>
假設你已經建立一個名為MyAction的操作這是一個與commyactionsMyActionTag類匹配的TLDTLD文件必須位於程序的TLDs路徑
當你從一個JSP頁調用操作時TLD告訴JSP正確的類以使用操作這就帶來極大的方便而且只需要少量的代碼
但是從何引入SQL?首先你需要建立具有連接功能的數據庫訪問你可以使用javax接口來完成而javax可見於JDBC Optional工具箱JDBC 的javaxsqlDataSource類提供了你所需要的連接
此時SQL位於什麼地方?它在bean中你可以使用JDBCcreateStatement和PreparedStatement在bean中建立一個方法將這一方法成為一個公共的Vector並正確地將你的SQL聲明傳遞到這一方法
總結
你的數據庫bean執行一個嵌入在操作體的SQL語句你可以傳遞一個語句給SQL語句或者使用它來執行一個預先的操作可以通過標簽管理器來執行你的操作由於JDBC被嵌入於庫代碼中你將不能在JSP程序中明確地使用它
初次使用這種方法會覺得它比JDBC中的嵌入SQL以及JSP中的嵌入JDBC更加復雜但是你建立SQL操作並將它們存放在一個TLD你只需做一次在所有的JSP程序中就可以訪問這些操作這就是這種方法的優點
From:http://tw.wingwit.com/Article/program/SQL/201311/16356.html