Struts2第四天:Struts2的攔截器和標籤庫
阿新 • • 發佈:2018-12-01
目錄
1.Struts2的攔截器(******)
1.1什麼是攔截器
- Interceptor:攔截器,起到攔截Action的作用。
- Filter:過濾器,過濾從客戶端向伺服器傳送的請求。
- Interceptor:攔截器,攔截是客戶端對Action的訪問。更細粒度化的攔截。(攔截Action中的具體的方法)。
- Struts2框架核心的功能都是依賴攔截器實現。
1.2Struts2的執行流程
客戶端向伺服器傳送一個Action的請求,執行核心過濾器(doFilter)方法。在這個方法中,呼叫executeAction()方法,在這個方法內部呼叫dispatcher.serviceAction();在這個方法內部建立一個Action代理,最終執行的是Action代理中的execute(),在代理中執行的execute方法中呼叫ActionInvocation的invoke方法。在這個方法內部遞迴執行一組攔截器(完成部分功能),如果沒有下一個攔截器,就會執行目標Action,根據Action的返回的結果進行頁面跳轉。
1.3攔截器入門:
1.3.1編寫攔截器類
- 編寫一個類實現Interceptor介面或者繼承AbstractInterceptor類。
/** * * 專案名稱:Struts2day04 * 類名稱:InterceptorDemo1 * 類描述:攔截器入門 * 建立人:yangyangyang * 建立時間:2018年12月1日 上午11:32:47 * 修改人:yangyangyang * 修改時間:2018年12月1日 上午11:32:47 * 修改備註: * @version * */ public class InterceptorDemo1 extends AbstractInterceptor { /* (non-Javadoc) * @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation) */ @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("攔截器1執行了。。。。"); String object=invocation.invoke(); System.out.println("攔截器1執行結束。。。。"); return object; } }
1.3.2對攔截器進行配置
- 第一種定義攔截器進行配置
<package name="demo1" extends="struts-default" namespace="/">
<!-- 定義攔截器 -->
<interceptors>
<interceptor name="InterceptorDemo1" class="com.albertyy.interceptor.InterceptorDemo1"></interceptor>
<interceptor name="InterceptorDemo2" class="com.albertyy.interceptor.InterceptorDemo2"></interceptor>
</interceptors>
<action name="actionDemo1" class="com.albertyy.action.ActionDemo1">
<result>/demo1/demo1.jsp</result>
<!-- 引入攔截器(一旦引入自定義攔截器,預設攔截器棧的攔截器就不執行了) -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="InterceptorDemo1"></interceptor-ref>
<interceptor-ref name="InterceptorDemo2"></interceptor-ref>
</action>
</package>
- 第二種定義一個攔截器棧的方式
<package name="demo1" extends="struts-default" namespace="/">
<!-- 定義攔截器 -->
<interceptors>
<interceptor name="InterceptorDemo1" class="com.albertyy.interceptor.InterceptorDemo1"></interceptor>
<interceptor name="InterceptorDemo2" class="com.albertyy.interceptor.InterceptorDemo2"></interceptor>
<!-- 定義攔截器棧 -->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="InterceptorDemo1"></interceptor-ref>
<interceptor-ref name="InterceptorDemo2"></interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="actionDemo1" class="com.albertyy.action.ActionDemo1">
<result>/demo1/demo1.jsp</result>
<!-- 引入攔截器(一旦引入自定義攔截器,預設攔截器棧的攔截器就不執行了) -->
<interceptor-ref name="myStack"></interceptor-ref>
</action>
</package>
2.Struts2的標籤庫
2.1通用標籤庫
2.2判斷標籤
- <s:if>、<s:elseif>、<s:else>
<body>
<s:set var="i" value="5" scope="request"/>
<s:if test="#request.i>3">
i 大於 3
</s:if>
<s:elseif test="#request.i<3">
i 小於 3
</s:elseif>
<s:else>
i 等於 3
</s:else>
</body>
2.3遍歷標籤
- <s:iterator>
<body>
<s:iterator var="i" value="{'aa','bb','cc'}">
<s:property value="#i"/>
</s:iterator>
<hr/>
<s:iterator var="entry" value="#{'aaa':'111','bbb':'222','ccc':'333'}">
<s:property value="#entry.key"/>--<s:property value="#entry.value"/>
</s:iterator>
<hr/>
<s:iterator var="i" begin="1" end="10" step="1">
<s:property value="#i"/>
</s:iterator>
<hr/>
<s:iterator var="i" begin="100" end="300" step="5" status="status">
<s:if test="#status.count % 3 == 0">
<font color="red"><s:property value="#i"/></font>
</s:if>
<s:else>
<s:property value="#i"/>
</s:else>
</s:iterator>
</body>
- 其他常用的標籤
- <s:property/>
- <s:debug/>
- <s:date />----在頁面上進行日期格式化。
2.2UI標籤庫(方便資料回顯)
<body>
<h1>UI標籤</h1>
<h3>傳統的表單</h3>
<form action="${ pageContext.request.contextPath }/uiAction.action" method="post">
<input type="hidden" name="id"/>
使用者名稱:<input type="text" name="name"/><br/>
密碼:<input type="password" name="password"><br/>
年齡:<input type="text" name="age"><br/>
性別:<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女<br/>
籍貫:<select name="city">
<option value="">-請選擇-</option>
<option value="北京">北京</option>
<option value="上海">上海</option>
<option value="深圳">深圳</option>
<option value="韓國">韓國</option>
</select><br/>
愛好:<input type="checkbox" name="hobby" value="basketball"/>籃球
<input type="checkbox" name="hobby" value="football"/>足球
<input type="checkbox" name="hobby" value="volleyball"/>排球
<input type="checkbox" name="hobby" value="pingpang"/>乒乓球<br/>
介紹:<textarea name="info" cols="8" rows="2"></textarea><br/>
<input type="submit" value="提交"/>
</form>
<s:debug></s:debug>
<h3>UI標籤的表單</h3>
<s:form action="uiAction" namespace="/" method="post" >
<s:hidden name="id" />
<s:textfield name="name" label="使用者名稱"/>
<s:password name="password" label="密碼" showPassword="true"/>
<s:textfield name="age" label="年齡"/>
<s:radio list="{'男','女'}" name="sex" label="性別"/>
<s:select list="{'北京','上海','深圳','韓國'}" name="city" label="籍貫" headerKey="" headerValue="-請選擇-"/>
<s:checkboxlist list="#{'basketball':'籃球','football':'足球','volleyball':'排球','pingpang':'乒乓球'}" name="hobby" label="愛好"/>
<s:textarea name="info" cols="8" rows="2" label="介紹" ></s:textarea>
<s:submit value="提交"/>
</s:form>
</body>
原始碼:連結: https://pan.baidu.com/s/152UdVQAfPprTOUvP6ZzDrQ 提取碼: vx6e 複製這段內容後開啟百度網盤手機App,操作更方便哦
總結
- Struts2的攔截器
- Struts2的攔截器概念
- 攔截器:攔截對Action的訪問,攔截到Action的具體的方法。
- Struts2的執行流程
- 請求-à核心過濾器à建立ActionProxy,呼叫proxy.execute方法。在這個內部àActionInvocation.invoke()在這個方法內部,遞迴執行一組攔截器àActionàResultà攔截器後面的程式碼
- Struts2的攔截器
- CRM的登入案例:
- 許可權攔截器
- Struts2的攔截器概念
- Struts2的標籤庫
- 通用標籤
- if、elseif、else、iterator、property、date、debug
- UI標籤(資料回顯)
- 表單標籤:
- 通用標籤