Struts2和Oracle資料庫互動的小Demo

Chuxus發表於2019-01-31

寫在前面:本次文章搭配以下兩篇文章進行閱讀,有助於理解。



正文

資料庫表格:

Struts2和Oracle資料庫互動的小Demo

這裡直接跳過連結資料庫的DbUtil檔案和Struts2的配置項。

第一步:編寫實體類

實體類:定義Student類所需要的資料,並設定set&get方法,構造方法,重寫toString方法等
複製程式碼
Struts2和Oracle資料庫互動的小Demo

第二步:編寫介面類和工廠類

介面包括對student表的增刪改查和查全部。工廠類用來獲得具體操作實現類。
複製程式碼
Struts2和Oracle資料庫互動的小Demo
Struts2和Oracle資料庫互動的小Demo

第三步:實現介面(實現類),設計測試類

實現類是對第二步介面的實現,編寫方法體,並對寫好的方法進行測試
複製程式碼
Struts2和Oracle資料庫互動的小Demo

第四步:配置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

介面如圖

Struts2和Oracle資料庫互動的小Demo

頁面具體是一個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;
	}
複製程式碼

第六步:設計資料庫互動

介面如圖:

Struts2和Oracle資料庫互動的小Demo

這裡不做太多贅述,基本原理和login設計一樣,細節部分略過。

詳細介紹查詢全部模組:

介面如圖:

Struts2和Oracle資料庫互動的小Demo

這裡將資料顯示在table控制元件中,使顯示較為美觀。這裡獲取資料的方式是Struts2的標籤
<s:iterator value=”list” status=”st” var=”student”> iterator標籤。

iterator標籤主要是用於迭代輸出集合元素,如list set map 陣列等,在使用標籤的時候有三個屬性值得我們關注

    1. 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類中的細節:

使用模式三和模式一結合的方式來進行值傳遞。
如圖

Struts2和Oracle資料庫互動的小Demo

各項引數的意義如下:

Struts2和Oracle資料庫互動的小Demo

其中五個自定義方法,分別是:

  • Delete():用來完成刪除操作
  • Insert():用來完成插入(新增)操作
  • SelectAll():用來完成查詢全部操作
  • selectByName():用來完成根據姓名查詢的操作
  • Update():用來完成更新操作(更改密碼)

最後釋出專案,測試執行。


如文中有筆誤的地方,請留言告知,定會及時更正。謝謝。—Chuxus


相關文章