最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Struts2學習教程之攔截器機制與自定義攔截器

 更新時間:2018年05月02日 11:46:28   作者:果凍想  
這篇文章主要給大家介紹了關于Struts2學習基礎教程之攔截器機制與自定義攔截器的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

攔截器體系是Struts2框架的重要組成部分,不夸張的說,沒有攔截器體系,也就沒有這么好用的Struts2框架了。在Struts2框架中,大量的攔截器完成了很多基礎的功能,比如,params攔截器負責解析HTTP請求的參數(shù),并設置Action的屬性;servlet-config攔截器直接將HTTP請求中的HttpServletRequest實例和HttpServletResponse實例傳給Action;fileUpload攔截器則負責解析請求參數(shù)中的文件域,并將一個文件域設置成Action的三個屬性......這一切的一切都是由內建的攔截器來完成的。所以,掌握了Struts2中攔截器的使用原理與方式,也就把握住了Struts2框架的“命脈”。

但是學習Struts2到現(xiàn)在,除了在web.xml中配置了一個StrutsPrepareAndExecuteFilter過濾器外,還沒有接觸其它的什么攔截器,那為什么我們的應用能夠很好的運行呢?實際上,Struts2已經默認啟用了大量通用的攔截器,只要配置Action的package繼承了struts-default包,這些攔截器就會起作用。下面來看看Struts2內建的攔截器。

Struts2內建的攔截器

在Struts2框架中有很多內建的攔截器,這些攔截器幾乎完成了Struts2框架70%的工作,包括解析請求參數(shù),將請求參數(shù)賦值給Action屬性等,Struts2這種靈巧的設計,很大程度上得益于攔截器的設計;當需要擴展Struts2功能時,只需要提供對應攔截器,并將它配置在Struts2容器中即可。

這些內建的攔截器以name-class對的形式配置在struts-default.xml文件中,其中name是攔截器名字,就是以后使用該攔截器的唯一標識;class則指定了該攔截器的實現(xiàn)類。對于這些內建的攔截器的詳細介紹,請參見官方文檔

配置攔截器

在Struts.xml文件中定義攔截器只需為攔截器類指定一個攔截器名,就完成了攔截器定義。定義攔截器使用<interceptor.../>,例如:

<!-- 通過指定攔截器名和攔截器實現(xiàn)類來定義攔截器 -->
<interceptor name="攔截器名" class="攔截器實現(xiàn)類">
  <param name="參數(shù)名">參數(shù)值</param>
</interceptor>

除此之外,還可以把多個攔截器連在一起組成攔截器棧,在攔截器中使用<interceptor-ref .../>來定義攔截器引用。例如:

<interceptor-stack name="攔截器棧一">
  <interceptor-ref name="攔截器一"/>
  <interceptor-ref name="攔截器二"/>
  ...
</interceptor-stack>

從程序結構上來看,攔截器棧由多個攔截器組成;但是從程序功能上來說,攔截器棧和攔截器是一樣的,它們包含的方法都會在Action的execute方法執(zhí)行之前自動執(zhí)行。所以,我們完全可以把攔截器棧當成一個更大的攔截器。

由于攔截器棧和攔截器是一致的,所以攔截器棧中又可以包含攔截器棧,例如:

<interceptor-stack name="攔截器棧二">
  <interceptor-ref name="modelDriven"/>
  <interceptor-ref name="攔截器棧一"/>
</interceptor-stack>

使用攔截器

一旦定義了攔截器棧和攔截器后,就可以使用這個攔截器?;驍r截器來攔截Action了,攔截器的攔截行為將會在Action的execute方法執(zhí)行之前被執(zhí)行。

通過使用<interceptor-ref .../>元素可以在Action內使用攔截器,在Action中使用攔截器的配置語法與配置攔截器棧時引用攔截器的語法完全一樣。例如:

<action name="login" class="com.jellythink.practise.LoginAction">
  <result name="error">/error.jsp</result>
  <result name="success">/welcome.jsp</result>
  <!-- 攔截器棧 -->
  <interceptor-ref name="defaultStack"/>
  <!-- 攔截器 -->
  <interceptor-ref name="test1"/>
  <!-- 帶參數(shù)的攔截器 -->
  <interceptor-ref name="test2">
    <param name="key">動態(tài)參數(shù)</param>
  </interceptor-ref>
</action>

這樣配置完成以后,在執(zhí)行DownloadAction之前,這三個攔截器都會起作用。

配置默認攔截器

當配置一個包時,可以為其指定默認攔截器。一旦為某個包指定了默認的攔截器,如果該包中的Action沒有顯式指定攔截器,則默認的攔截器將會起作用。但是,一旦我們?yōu)樵摪械腁ction顯式應用了某個攔截器,則默認的攔截器不會起作用;如果該Action需要使用該默認攔截器,則必須手動配置該攔截器的引用。

只有當Action中沒有顯式應用攔截器時,該Action所在包的默認攔截器才會生效。

配置默認攔截器使用<default-interceptor-ref.../>元素,該元素作為<package.../>元素的子元素使用,為該包下的所有Action配置默認的攔截器。例如:

<default-interceptor-ref name="默認攔截器"/>

也可以為默認攔截器指定參數(shù),例如:

<default-interceptor-ref name="默認攔截器">
  <param name="參數(shù)名">參數(shù)值</param>
</default-interceptor-ref>

在struts-default.xml文件中,配置了一個名為struts-default的抽象包,在該包中定義了名為defaultStack的默認攔截器引用。當我們定義的包繼承struts-default包時,也繼承了它的默認攔截器棧:defaultStack,這也意味著,如果我們不為Action顯式地應用攔截器,則defaultStack攔截器棧會自動生效。

自定義攔截器

1>.添加一個類,讓它繼承AbstractInterceptor類,或者實現(xiàn)Interceptor接口

public class TimeInterceptor extends AbstractInterceptor {
/**
* 攔截器的核心方法intercept的返回值是一個字符串
*/
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
return "login";
}
}

2>.在struts.xml的package中添加interceptors子節(jié)點,并在它下面添加Interceptor節(jié)點

<package name="goods" namespace="/goods" extends="common-pkg">
<interceptors>
<interceptor name="timeInterceptor" class="com.wskj.struts2.interceptor.TimeInterceptor"></interceptor>
</interceptors>
</package>

3>.在想被攔截的action節(jié)點下添加子節(jié)點interceptor-ref

<action name="list_Category" class="com.wskj.struts2.controller.CategoryAction" method="list">
<interceptor-ref name="timeInterceptor"></interceptor-ref>
<result name="list" type="dispatcher">/pages/Category/list.jsp</result>
</action>

總結

這篇文章對Stuts2中的核心——攔截器進行了一個初步的總結,在后面的文章中,我們會實現(xiàn)一個我們自己的攔截器,并將這篇文章中總結的知識點進行運用。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • java實現(xiàn)簡單TCP聊天程序

    java實現(xiàn)簡單TCP聊天程序

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單TCP聊天程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • springboot整合token的實現(xiàn)代碼

    springboot整合token的實現(xiàn)代碼

    這篇文章主要介紹了springboot整合token的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • JSON,AJAX,Maven入門基礎

    JSON,AJAX,Maven入門基礎

    這篇文章主要介紹了JSON,AJAX和Maven基礎,如何使用AJAX讀取Json數(shù)組里面的數(shù)據,感興趣的小伙伴們可以參考一下,希望能夠幫助到你
    2021-07-07
  • 淺談java多線程 join方法以及優(yōu)先級方法

    淺談java多線程 join方法以及優(yōu)先級方法

    下面小編就為大家?guī)硪黄獪\談java多線程 join方法以及優(yōu)先級方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • java實現(xiàn)圖片分割指定大小

    java實現(xiàn)圖片分割指定大小

    這篇文章主要為大家詳細介紹了java實現(xiàn)圖片分割指定大小,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 區(qū)分java中String+String和String+char

    區(qū)分java中String+String和String+char

    這篇文章主要向大家詳細區(qū)分了java中String+String和String+char,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 基于SpringBoot和PostGIS的某國基地可視化實戰(zhàn)

    基于SpringBoot和PostGIS的某國基地可視化實戰(zhàn)

    本文以Java開發(fā)語言為例,使用SpringBoot框架來進行后臺開發(fā),詳細講解如何使用Leaflet對PostGIS的全球基地信息進行Web可視化,最后分享Web可視化結果,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • mybatis注解開發(fā) 一對多嵌套查詢方式

    mybatis注解開發(fā) 一對多嵌套查詢方式

    這篇文章主要介紹了mybatis注解開發(fā) 一對多嵌套查詢方式,具有很好的參考價值,希望對大家有所幫助。
    2023-03-03
  • SparkSQL中的JSON內置函數(shù)全解析

    SparkSQL中的JSON內置函數(shù)全解析

    你是否曾經為處理JSON數(shù)據而頭疼?SparkSQL為我們提供了強大的內置JSON函數(shù),讓JSON處理變得輕而易舉,本文將帶你深入了解這些函數(shù),感興趣的朋友一起看看吧
    2024-08-08
  • java項目怎么集成stable diffusion圖文生成算法

    java項目怎么集成stable diffusion圖文生成算法

    在開發(fā)Java項目過程中,我們經常需要使用消息傳遞來實現(xiàn)不同組件之間的通信,Stable Diffusion是一種基于消息傳遞的實時通信解決方案,使用Java調用外部服務(如Python腳本或API服務),這些服務運行Stable Diffusion模型,本文將介紹如何將Stable Diffusion集成到Java項目
    2024-07-07

最新評論

岱山县| 新野县| 平舆县| 信宜市| 喜德县| 崇阳县| 隆子县| 正阳县| 太保市| 馆陶县| 吐鲁番市| 辉南县| 夏河县| 安龙县| 唐海县| 景德镇市| 大连市| 宝应县| 开封市| 吕梁市| 桓台县| 临邑县| 韩城市| 辽阳县| 洞头县| 来凤县| 临城县| 佳木斯市| 宜春市| 沅江市| 青冈县| 龙井市| 平湖市| 绩溪县| 大关县| 天全县| 江北区| 台南市| 翁牛特旗| 榆社县| 台湾省|