struts2 jsp跳转action 404_Struts2 学习笔记(三)
1. Struts2的攔截器
1.1 攔截器概述
1.1.1 什么是攔截器
- Interceptor:攔截器,起到攔截Action的作用;
- Filter:過濾器,過濾從客戶端向服務(wù)器發(fā)送的請求;
- Interceptor:攔截器,攔截是客戶端對(duì)Action的訪問。更細(xì)粒度化的攔截。
- Struts2框架核心的功能都是依賴攔截器實(shí)現(xiàn)的;
1.1.2 Struts2的執(zhí)行流程
客戶端向服務(wù)器發(fā)送一個(gè)Action的請求,執(zhí)行核心過濾器(doFilter)方法。在這個(gè)方法中,調(diào)用executeAction()方法,在這個(gè)方法內(nèi)部調(diào)用dispatcher.serviceAction();在這個(gè)方法內(nèi)部創(chuàng)建一個(gè)Action代理,最終執(zhí)行的是Action代理中的execute(),在代理中執(zhí)行的execute方法中調(diào)用ActionInvocation的invoke方法。在這個(gè)方法內(nèi)部遞歸執(zhí)行一組攔截器(完成部分功能),如果沒有下一個(gè)攔截器,就會(huì)執(zhí)行目標(biāo)Action,根據(jù)Action的返回的結(jié)果進(jìn)行頁面跳轉(zhuǎn)。
Struts2攔截器是可插拔的,攔截器是AOP的一種實(shí)現(xiàn)。Struts2攔截器棧就是將攔截器按照一定的順序連接成一條鏈。在訪問被攔截的方法或字段時(shí),Struts2攔截器鏈中的攔截器就會(huì)按照其之前的順序被調(diào)用。
1.2 攔截器入門
1.2.1 搭建Struts2的環(huán)境
1.2.2 編寫攔截器類
編寫一個(gè)類實(shí)現(xiàn)Interceptor接口或者繼承AbstractInterceptor類。
- Interceptor接口的定義代碼:
- AbstractInterceptor類的定義代碼:
- 實(shí)例
1.2.2 對(duì)攔截器進(jìn)行配置
- 定義攔截器進(jìn)行配置
要想讓攔截器起作用,首先需要對(duì)它進(jìn)行配置,攔截器的配置是在struts.xml文件中完成的,它通常以<interceptor>標(biāo)簽開頭,以</interceptor>標(biāo)簽結(jié)束,定義攔截器的語法如下:
name屬性用來指定攔截器的名稱,class屬性用于指定攔截器的實(shí)現(xiàn)類,有時(shí)在定義攔截器時(shí)需要傳入?yún)?shù),這時(shí)候需要指定<param>標(biāo)簽。name屬性用來指定參數(shù)的名稱,paramValue表示參數(shù)的值。
- 定義一個(gè)攔截器棧的方式
在實(shí)際開發(fā)過程中,經(jīng)常需要在Action執(zhí)行前同時(shí)執(zhí)行多個(gè)攔截動(dòng)作,這是可以把多個(gè)攔截器組成一個(gè)攔截器棧。在使用時(shí),可以將棧內(nèi)的多個(gè)攔截器當(dāng)成一個(gè)整體來引用。當(dāng)攔截器被附加到一個(gè)Action上時(shí),在執(zhí)行Action之前必須先執(zhí)行攔截器棧中的每一個(gè)攔截器。
2. Struts2的標(biāo)簽庫
對(duì)于一個(gè)MVC框架而言,重點(diǎn)是實(shí)現(xiàn)兩個(gè)部分:業(yè)務(wù)邏輯控制器部分和視圖頁面部分。Struts22作為一個(gè)優(yōu)秀的MVC框架,也把重點(diǎn)放在這兩個(gè)部分。控制器主要由Action來提供支持。而視圖則是由大量的標(biāo)簽來提供支持。
2.1 Struts2標(biāo)簽庫概述
2.1.1 Struts2標(biāo)簽庫概述
在JavaWeb中,Struts2標(biāo)簽庫是一個(gè)比較完善,而且功能強(qiáng)大的標(biāo)簽庫,它將所有標(biāo)簽都統(tǒng)一到一個(gè)標(biāo)簽庫中,從而簡化了標(biāo)簽的使用。它還提供主題和模板的支持,極大地簡化了視圖頁面的代碼編寫,同時(shí)它還提供Ajax的支持,大大豐富了視圖的表現(xiàn)效果。
2.1.2 Struts2標(biāo)簽庫的分類
普通標(biāo)簽主要是在頁面生成時(shí),控制執(zhí)行的流程;UI標(biāo)簽則是以豐富而可復(fù)用的HTML文件來顯示數(shù)據(jù)。普通標(biāo)簽又分為控制標(biāo)簽和數(shù)據(jù)標(biāo)簽,控制標(biāo)簽用來完成條件邏輯、循環(huán)邏輯的控制,也可用來做集合的操作。數(shù)據(jù)標(biāo)簽用來輸出后臺(tái)的數(shù)據(jù)和完成其他數(shù)據(jù)訪問功能。UI標(biāo)簽則分為表單標(biāo)簽、非表單標(biāo)簽和Ajax標(biāo)簽。表單標(biāo)簽主要用來生成HTML頁面中的表單元素,非表標(biāo)簽主要用來生成HTML的div標(biāo)簽及輸出Action中封裝的信息等,Ajax標(biāo)簽主要用來提供Ajax技術(shù)支持。
2.2 Struts2標(biāo)簽的使用
Struts2標(biāo)簽庫被定義在struts.tags.tld文件中。要是用struts標(biāo)簽庫,一般只要在JSP文件中使用taglib指令導(dǎo)入Struts2標(biāo)簽庫:
<%@ taglib profix="s" uri="/struts-tags" %>2.2.1 控制標(biāo)簽
- <s:if>、<s:elseif>、 <s:else>
- <s:iterator>
2.2.2 數(shù)據(jù)標(biāo)簽
- <s:property>
該標(biāo)簽用于輸出指定的值,通常輸出的是value屬性指定的值。
- <s:a>標(biāo)簽
標(biāo)簽用于構(gòu)造HTML頁面中的超鏈接。
屬性 | 是否必須 | 類型 | 描述 -- | -- | -- | -- action | 否 | String | 指定超鏈接Action地址 href | 否 | String | 超鏈接地址 namespace | 否 | String | 指定Action地址 id | 否 | String | 指定其id method | 否 | String | 指定Action調(diào)用方法
<s:a href="連接地址"></s:a> <s:a namespace="" action="">superp1peng.xyz</s:a>- <s:debug>標(biāo)簽
該標(biāo)簽用于在調(diào)試程序時(shí)輸出更多的調(diào)試信息,主要輸出ValueStack和StackContext中的信息。
2.2.3 Struts2的模板的使用
Struts2的UI標(biāo)簽都是基于模板的。常見的主題有四種:simple、XHTML、css_xhtml、Ajax。通常,通過設(shè)置struts.ui.theme,來改變默認(rèn)主題。
struts.xml文件中: <constant name="struts.ui.theme" value="simple" /> 或者struts.properties struts.ui.theme = simple2.2.4 Struts2的表單標(biāo)簽
- 表單標(biāo)簽的公共屬性:
- <s:form>標(biāo)簽
標(biāo)簽用來呈現(xiàn)HTML語言中的表單元素,其中一般還會(huì)包括其他表單元素,textfield,radio等;
- <s:submit>標(biāo)簽
- 其他一些標(biāo)簽
總結(jié)
以上是生活随笔為你收集整理的struts2 jsp跳转action 404_Struts2 学习笔记(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么程序员一定要加班?
- 下一篇: Autowire异常