用Action控制器替換switch.jsp
在《JBuilder 2005 Servlet高級開發》中我們介紹了用戶登錄模塊的流程,其中switch.jsp充當一個業務處理和頁面轉發的中心處理器。由於JSP的設計初衷是實現頁面展現邏輯,而這裡我們居然"倒行逆施",將JSP用作業務處理和頁面轉發,顯然是不恰當的。我們原來的switch.jsp身兼數職:接收login.jsp頁面的表單數據,查詢數據庫,轉發頁面,象一個事無巨細,有僭越之嫌的 "管家"總攬了所有的事情,程序沒有分層,邏輯顯得非常不清晰,象個大雜燴。
其實Servlet本身倒是比較適合開發switch.jsp所完成的功能,但在《JBuilder 2005 Servlet高級開發》專題中,我們並沒有用Servlet斧正之,是因為我們希望在本專題中從更高的角度更完美地替換switch.jsp。
可以通過Struts框架對switch.jsp功能進行分解,switch.jsp通過<jsp:useBean>獲取登錄頁面表單數據可以通過ActionForm機制實現;switch.jsp查詢T_USER數據表,判斷用戶是否是合法用戶可以在Action的execute()中處理;當未通過驗證轉向fail.jsp頁面,如果發生異常轉向error.jsp頁面,當用戶通過驗證後轉向welcome.jsp頁面,可以在Action中通過ActionForward實現多出口切換。
新增一個圖書管理模塊
現實的圖書管理模塊,應該包括對圖書進行增、刪、改、查的功能,由於篇幅所限,我們僅提供圖書新增的功能。數據庫中必須提供一張表用於保存圖書的信息,這張表名為T_BOOK,其結構如圖 4所示:
圖 4 T_BOOK表結構
我們完全用Struts框架實現圖書新增的功能,JBuilder 提供了一個優秀的Struts可視化設計工具(Struts Config Editor),其中Action Designer能夠非常形象地描述出一個業務功能操作流程,我們不妨就通過這個可視化設計器預覽圖書新增業務的程序結構,如圖 5所示:
圖 5 新增圖書Struts流程
·bookAdd.jsp:圖書錄入的界面,在這兒你將學習到Struts標簽和資源文件的知識。
·bookActionForm:由BookActionForm類實現,保存bookAdd.jsp表單提交的數據。在這兒,你將學習到如何創建ActionForm,ActionForm如何對數據有效性進行自檢的知識。
·/bookInsertAction:由BookInsertAction類實現,即業務控制器,負責將bookActionForm中的新增圖書保存到數據庫T_BOOK表中,並導向到insertSuccess.htm頁面。
事前准備
通過File->New Project...創建一個名為bookStore的新工程,並在工程下創建名為webModule的Web模塊,將原《JBuilder 2005 Servlet高級開發》專題的代碼覆蓋該新工程對應的內容。
用SQL Plus運行下面的SQL語句創建T_BOOK表:
代碼清單 5 創建T_BOOK表的SQL語句
1.create table T_BOOK (
2.BOOK_ID VARCHAR2(10) not null,
3.ISBN VARCHAR2(20) not null,
4.BOOK_NAME VARCHAR2(50) not null,
5.AUTHOR VARCHAR2(50),
6.CREATE_DATE CHAR(8),
7.constraint PK_T_BOOK primary key (BOOK_ID)
8.);
從這個SQL中,我們可以看出BOOK_ID是表的主鍵,所以不允許重復,而ISBN和BOOK_NAME兩字段不允許為空。它們決定了在圖書添加時的數據檢驗規則。
同樣的,我們需要將必要的類添加到這個新工程的類庫中。