寫在前面:本次文章搭配以下兩篇文章進行閱讀,有助於理解。
- 重拾Oracle(一):與Oracle的連線
- Struts2學習之路(二):Struts2三種傳值模式
正文
資料庫表格:
這裡直接跳過連結資料庫的DbUtil檔案和Struts2的配置項。
第一步:編寫實體類
實體類:定義Student類所需要的資料,並設定set&get方法,構造方法,重寫toString方法等
複製程式碼
第二步:編寫介面類和工廠類
介面包括對student表的增刪改查和查全部。工廠類用來獲得具體操作實現類。
複製程式碼
第三步:實現介面(實現類),設計測試類
實現類是對第二步介面的實現,編寫方法體,並對寫好的方法進行測試
複製程式碼
第四步:配置login.xml用來完成對jsp頁面和後臺action的關聯
在Struts.xml檔案中寫如下程式碼段來完成對login.xml的配置
<include file="login.xml"/>
login.xml用來處理使用者的各種操作,並分發給Action對其進行處理,並且進行結果響應。這裡就是Struts2的核心部分,使用者的請求通過核心控制器傳送到動作對映類,動作對映類再判斷是否需要呼叫某個Action類,然後返回給核心控制器,核心控制器決定是否建立Action類的代理類,代理類建立後,確定使用哪個方法,然後返回確認執行資訊,接著就是經過層層攔截器,執行某個Action類,然後根據結果返回具體的檢視,最後經過層層攔截器封裝響應給客戶端
以下是login.xml的具體程式碼
<package name="default" namespace="/" extends="struts-default">
<action name ="loginAction" class="com.huaruan.action.LoginAction">
<result name="success">Main.jsp</result>
<result name="input" type="redirect">Login.jsp</result>
</action>
<action name ="DbAction" class="com.huaruan.action.DbControlAction">
<result name="QuerryAll">QuerryAll.jsp</result>
<result name="QuerryByName">QuerryAll.jsp</result>
<result name="Delete">QuerryAll.jsp</result>
<result name="Update">ExecuteUpdate.jsp</result>
<result name="Insert">ExecuteUpdate.jsp</result>
</action>
</package>
複製程式碼
其中有兩個Action,分別是loginAction和DbAction,分別完成對登入的控制和對資料庫操作的控制(增傷改查)
result標籤,根據返回字串來完成對客戶端的不同響應。
第五步:設計Login
介面如圖
頁面具體是一個form表單,表單動作對映到loginAction動作的Login方法,提交方式是post,表單包含一個文字框和一個密碼框,一個提交按鈕和一個重置按鈕,分別使用Strus2的標籤(s)來設計。
Action類的設計採用模型驅動(模型三)的方式來做
定義方法String Login() extends ActionSupport implements ModalDriven{}
用來判斷使用者的輸入,根據結果返回不同的字串,以便Login.xml進行響應。
核心程式碼如下:
public String Login() throws Exception {
String str = null;
String name= stu.getStuName();
String pwd= stu.getStuPwd();
StudentInter student= Factory.getStudent();
Student s = student.SelectByname(name);
System.out.println(s);
if(s.getStuName()!=null) {
if(s.getStuName().equals(name)&&s.getStuPwd().equals(pwd)) {
str = SUCCESS;
}else{
str = INPUT;
}
}else {
str = INPUT;
}
return str;
}
複製程式碼
第六步:設計資料庫互動
介面如圖:
這裡不做太多贅述,基本原理和login設計一樣,細節部分略過。
詳細介紹查詢全部模組:
介面如圖:
這裡將資料顯示在table控制元件中,使顯示較為美觀。這裡獲取資料的方式是Struts2的標籤
<s:iterator value=”list” status=”st” var=”student”> iterator標籤。
iterator標籤主要是用於迭代輸出集合元素,如list set map 陣列等,在使用標籤的時候有三個屬性值得我們關注
-
- value屬性:可選的屬性,value屬性是指一個被迭代的集合,使用ognl表示式指定,如果為空的話預設就是ValueStack棧頂的集合.
- 2.id屬性:可選屬性, 是指集合元素的id
- 3.可以自定義變數(var XX)
- 4.status屬性:可選屬性,該屬性在迭代時會產生一個IteratorStatus物件,該物件可以判斷當前元素的位置,包含了以下屬性方法:
- int getCount(); 迭代元素個數
- int getIndex(); 迭代元素當前索引
- boolean getFirst(); 是否為第一個
- boolean getEven(); 是否為偶
- boolean getLast(); 是否最後一個
- bolean getOdd(); 是否為奇
然後看我們的程式碼,用來當個栗子:
<table border="1">
<tr>
<td>編號</td><td>學號</td><td>姓名</td><td>密碼</td><td>性別</td><td>年齡</td><td>操作</td>
</tr>
<s:iterator value="list" status="st" var="student">
<tr>
<td><s:property value="#st.getCount()"/></td>
<td><s:property value="#student.stuId"/></td>
<td><s:property value="#student.stuName"/></td>
<td><s:property value="#student.stuPwd"/></td>
<td><s:property value="#student.stuSex"/></td>
<td><s:property value="#student.stuAge"/></td>
<td><a href="DbAction!Delete?stuId=<s:property value="#student.stuId"/> ">刪除</a></td>
</tr>
</s:iterator>
</table>
複製程式碼
這裡,list是Action給前臺返回的封裝資料(Student型別),var是定義的變數student,用來取出list中的物件屬性值,status用來判斷元素的位置。
最後一列我用來對本列進行刪除操作,這裡將其定義為標籤,地址是轉到對應的Action類中,同時攜帶引數stuId,用來標記刪除該條資訊。
Action類中的細節:
使用模式三和模式一結合的方式來進行值傳遞。
如圖
各項引數的意義如下:
其中五個自定義方法,分別是:
- Delete():用來完成刪除操作
- Insert():用來完成插入(新增)操作
- SelectAll():用來完成查詢全部操作
- selectByName():用來完成根據姓名查詢的操作
- Update():用來完成更新操作(更改密碼)
最後釋出專案,測試執行。
如文中有筆誤的地方,請留言告知,定會及時更正。謝謝。—Chuxus