
本篇博文將分享一款基于Struts2框架的名片管理系統,JSP引擎為Tomcat9.0,數據庫采用的是MySQL5.5,集成開發環境為Eclipse IDE for Java EE Developers。
名片管理系統主要包括用戶管理和名片管理功能。用戶功能主要包括:用戶注冊、用戶登錄、修改密碼和修改基本信息功能;名片管理主要包括:添加名片、查詢名片、修改名片、刪除名片功能。
希望通過本篇的學習,朋友們不僅能掌握Struts 2應用開發的流程、方法和技術,還能夠熟悉名片管理的業務需求、設計以及實現。
1、系統設計
1、系統功能需求
名片管理系統主要包含以下功能:
- 非注冊用戶可以注冊為注冊用戶;
- 成功注冊的用戶,可以登錄系統;
- 成功登錄的用戶,可以添加、修改、刪除以及瀏覽自己客戶的名片信息;
- 成功登錄的用戶,可以在個人中心查看自己的基本信息和修改密碼。
2、系統模塊劃分
用戶登錄成功后,進入管理主頁面(main.jsp)可以對自己的客戶名片進行管理。系統模塊劃分,如下圖所示。

2、數據庫設計
系統采用加載純Java數據庫驅動程序的方式連接MySQL5.5數據庫。在MySQL5.5的數據庫card中,共創建兩張與系統相關的數據表:usertable和cardinfo。
1、數據庫概念結構設計
根據系統設計與分析,可以設計出如下數據結構:
- 用戶
包括用戶名和密碼,注冊用戶名唯一。
- 名片
包括ID、名稱、電話、郵箱、單位、職務、地址、Logo以及所屬用戶。其中,ID唯一,“所屬用戶”與“1.用戶”關聯。根據以上的數據結構,結合數據庫設計的特點,可畫出如下圖所示的數據庫概念結構圖。

其中,ID為正整數,值是從1開始遞增的序列。
2、數據庫邏輯結構設計
將數據庫概念結構圖轉換為MySQL數據庫所支持的實際數據模型,即數據庫的邏輯結構。用戶信息表(usertable)的設計,如下表所示:

名片信息表(cardinfo)的設計,如下表所示:

3、系統管理
1、導入相關的jar包
新建一個Struts 2應用cardManage,在所有JSP頁面中盡量使用EL表達式和JSTL標簽,又因為系統采用純Java數據庫驅動程序連接MySQL5.5以及JSON數據轉換。所以,需要將對應的JAR包復制到WebContentWEB-INFlib的目錄下,JAR包如下圖所示:

2、JSP頁面管理
由于篇幅受限,這里僅附上運行效果圖,所有實現見源代碼。
- 管理主頁面
注冊用戶在瀏覽器地址欄中輸入http://localhost:8080/struts2cardManage/login.jsp訪問登錄頁面,登錄成功后,進入管理主頁面(main.jsp),main.jsp的運行效果如下圖所示:

- 程序報錯頁面
當Java程序運行出現異常時,系統會執行全局頁面error.jsp。
- 無權限提示頁面
在沒有成功登錄的情況下,對名片進行增、刪、改、查等操作時,系統執行無權限操作,提示頁面nologin.jsp。
- 包文件和配置文件管理
本系統的包文件和配置文件層次結構如下圖所示:

所需包文件說明如下所示:
action包該包是系統中所有Action類,包括名片管理的Action類和個人中心的Action類。Conf文件夾該文件夾的xml文件是本系統所有Action類的配置。“card.xml”是名片管理Action類的配置,“user.xml”是個人中心Action類的配置。這些xml文件需要在struts.xml文件中包含進來。dao包dao包中存放的Java程序是實現數據庫的操作。其中BaseDao是一個父類,該類負責連接數據庫;CardDao是BaseDao的一個子類,有關名片管理的數據訪問在該類中;UserDao是BaseDao的另一個子類,有關用戶的數據訪問在該類中。另外,該包中還有一個名為“jdbc.properties”的文件,該文件是有關數據庫的配置。包括驅動類名、數據庫URL、用戶名以及密碼等。entity包該包中有1個實體類:Card,封裝名片信息。interceptor包該包中有1個攔截器類:LoginValidateInterceptor,進行權限控制。util包該包中MyUtil類是獲得一個時間字符串的工具類。所需配置文件文件說明如下所示:struts.xml在軟件系統開發中,模塊化設計是最常用的一種方式。為了方便管理,本系統也不例外,將不同模塊的配置分別放在不同的配置文件中。然后,在struts.xml文件中,通過include引入這些配置文件。user.xml該配置文件負責配置和用戶有關的Action。card.xml該配置文件負責配置個人中心有關的Action,在此處使用了通配符“*”動態匹配Action的請求名稱。
4、用戶管理
用戶功能主要包括:用戶注冊、用戶登錄、修改密碼和修改基本信息功能。
1、Action的實現
UserAction類負責處理“會員注冊”、“會員登錄”、“安全退出”以及“個人中心”的功能。
2、注冊
在系統默認主頁index.jsp,單擊“注冊”鏈接,打開注冊頁面register.jsp,效果如下圖所示:

在deleteSelect.jsp頁面所示的注冊頁面中,輸入“姓名”后,系統會根據Ajax異步請求路徑“jsontest/isUse.action”檢測“姓名”是否可用。輸入合法的用戶信息后,單擊“注冊”按鈕,實現注冊功能。
3、登錄
在系統默認主頁index.jsp,單擊“登錄”鏈接,打開登錄頁面login.jsp,效果如下圖所示:

用戶輸入姓名和密碼后,系統將對姓名和密碼進行驗證。如果姓名和密碼同時正確,則成功登錄,將用戶信息保存到session對象,并進入系統管理主頁面(main.jsp);如果姓名或密碼有誤,則提示錯誤。
單擊登錄界面中“確定”按鈕,通過請求路徑“user/login.action”,將登錄請求提交給Action。配置文件user.xml根據請求路徑找到對應Action類UserAction(6.1節)的login方法處理登錄請求。
4、修改密碼
單擊主頁面中“個人中心”菜單的“修改密碼”菜單項,打開密碼修改頁面updatePWD.jsp。頁面效果如下圖所示:

在密碼修改頁面中輸入“新密碼”和“確認新密碼”后,單擊“修改密碼”按鈕,將請求通過“user/updatePwd.action”提交給Action。配置文件user.xml根據請求路徑找到對應Action類UserAction(6.1節)的updatePwd方法處理密碼修改請求。
5、基本信息
單擊主頁面中“個人中心”菜單的“基本信息”菜單項,打開基本信息頁面userInfo.jsp。頁面效果如下圖所示:

5、名片管理
與系統相關的JSP頁面、CSS和圖片位于WebRoot目錄下。在第3節中,已經介紹了系統的數據庫操作,所以本節只是介紹JSP頁面和Action的實現。
名片管理主要包括:添加名片、查詢名片、修改名片、刪除名片功能。
1、Action的實現
CardAction類負責處理“名片管理”的功能,包括添加、修改、刪除、查詢等。
2、添加名片
用戶輸入客戶名片的姓名、電話、E-Mail、單位、職務、地址、Logo后,單擊“提交”按鈕實現添加。如果成功,則跳轉到查詢頁面;如果失敗,則回到添加頁面。addCard.jsp頁面實現添加名片信息的輸入界面,如下圖所示:

單擊上圖中“提交”按鈕,將添加請求通過“card/addCard.action”提交給Action處理。配置文件card.xml根據請求路徑找到對應Action類CardAction(5.1節)的add方法處理添加功能。添加成功跳轉到查詢Action;添加失敗回到添加頁面。
3、查詢名片
管理員登錄成功后,進入名片管理系統的主頁面,在主頁面中初始顯示查詢頁面queryCards.jsp,查詢頁面運行效果如下圖所示:

單擊主頁面中“名片管理”菜單的“查詢名片”菜單項,打開查詢頁面queryCards.jsp。“查詢名片”菜單項超鏈接的目標地址是個Action。該Action的請求路徑為“card/queryCard.action”,配置文件card.xml根據請求路徑找到對應Action類的query方法處理查詢功能。在該方法中,根據動作類型(“修改查詢”、“查詢”以及“刪除查詢”),將查詢結果轉發到不同頁面。
在queryCards.jsp頁面中單擊“詳情”超鏈接,打開名片詳細信息頁面detail.jsp。“詳情”超鏈接的目標地址是個Action。該Action的請求路徑為“card/selectACard.action”。配置文件card.xml根據請求路徑找到對應Action類的selectA方法處理查詢一個名片功能。將查詢結果轉發給詳細信息頁面detail.jsp。名片詳細信息頁面如下圖所示:

4、修改名片
單擊主頁面中“管理名片”菜單的“修改名片”菜單項,打開修改查詢頁面updateSelect.jsp。“修改名片”菜單項超鏈接的目標地址是個Action。找到對應Action類CardAction的方法query,在該方法中,根據動作類型,將查詢結果轉發給修改查詢頁面。
單擊updateSelect.jsp頁面中的“修改”超鏈接打開修改名片信息頁面updateCard.jsp。“修改”超鏈接的目標地址是個Action。找到對應Action類CardAction的方法selectA,在該方法中,根據動作類型,將查詢結果轉發給updateCard.jsp頁面顯示。
輸入要修改的信息后,單擊“提交”按鈕,將名片信息提交給Action,找到對應Action類CardAction的方法update,在方法中執行修改的業務處理。修改成功,進入查詢名片。修改失敗,回到updateCard.jsp頁面。updateSelect.jsp頁面的運行效果如下圖所示。

updateCard.jsp頁面的運行效果如下圖所示:

5、刪除名片
單擊主頁面中“管理名片”菜單的“刪除名片”菜單項,打開刪除查詢頁面deleteSelect.jsp。
“刪除名片”菜單項超鏈接的目標地址是個Action。找到對應Action類CardAction的方法query,在該方法中,根據動作類型,將查詢結果轉發給deleteSelect.jsp頁面,頁面效果如下圖所示:

在上圖的復選框中選擇要刪除的名片,單擊“刪除”按鈕,將要刪除名片的ID提交給控制器Action。找到對應Action類CardAction的方法delete,在該方法中,根據動作類型執行批量刪除的業務處理。
單擊上圖中的“刪除”超鏈接,將當前行的名片ID提交給控制器Action,找到對應Action類CardAction的方法delete,在該方法中,根據動作類型執行單個刪除的業務處理。刪除成功后,進入刪除查詢頁面。