摘要:介紹實現(xiàn)的方式用于實現(xiàn)之前之后執(zhí)行一般用于事物操作一般用于對某些未授權的頁面訪問的時候進行攔截操作攔截非法訪問開箱即用攔截器攔截器傳遞屬性攔截器測算執(zhí)行時間必須有傳遞屬性這個攔截器運行輸出日志如下可以
介紹
實現(xiàn)aop的方式
用于實現(xiàn)action之前,之后執(zhí)行
一般用于事物操作.
一般用于對某些未授權的頁面訪問的時候,進行攔截操作,攔截非法訪問.
必須有傳遞屬性這個攔截器
運行輸出日志如下
2019-03-24 03:50:19.231 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: com.ming.HelloWorldAction@33e67d25, member: public java.lang.String com.ming.HelloWorldAction.getName(), property: name] 2019-03-24 03:50:19.232 [INFO ] com.opensymphony.xwork2.interceptor.TimerInterceptor.doLog(TimerInterceptor.java:205) - Executed action [//hello!execute] took 12 ms.
可以看到這個action一共運行耗時12ms
自定義攔截器需要繼承該抽象類,并實現(xiàn)其方法 即 com.opensymphony.xwork2.interceptor.AbstractInterceptor 抽象類
代碼如下
package com.ming; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class MyInterceptor extends AbstractInterceptor { /** * Override to handle interception * * @param invocation */ @Override public String intercept(ActionInvocation invocation) throws Exception { return null; } }實現(xiàn)該類的interceptor方法
package com.ming; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class MyInterceptor extends AbstractInterceptor { /** * Override to handle interception * * @param invocation */ @Override public String intercept(ActionInvocation invocation) throws Exception { Logger logger = LogManager.getLogger(); // 執(zhí)行結(jié)果前 String output = "hi before"; logger.info(output); // 開始執(zhí)行Action String result = invocation.invoke(); // 執(zhí)行結(jié)果后 output = "hi after"; logger.info(output); // 繼續(xù)傳遞到下一個攔截器 return result; } }更改配置文件
效果如下/HelloWorld.jsp /error.html
控制臺輸出結(jié)果如下
2019-03-24 04:37:24.086 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: com.ming.HelloWorldAction@5121691d, member: public void com.ming.HelloWorldAction.setName(java.lang.String), property: name] 2019-03-24 04:37:24.087 [INFO ] com.ming.MyInterceptor.intercept(MyInterceptor.java:19) - hi before 2019-03-24 04:37:24.089 [DEBUG] com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:430) - Executing action method = execute 2019-03-24 04:37:24.106 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: com.ming.HelloWorldAction@5121691d, member: public java.lang.String com.ming.HelloWorldAction.execute() throws java.lang.Exception, property: null] 2019-03-24 04:37:24.143 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: org.apache.struts2.result.ServletDispatcherResult@2e4369c6, member: public void org.apache.struts2.result.StrutsResultSupport.setLocation(java.lang.String), property: location] 2019-03-24 04:37:24.143 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: org.apache.struts2.result.ServletDispatcherResult@2e4369c6, member: public void org.apache.struts2.result.StrutsResultSupport.setLocation(java.lang.String), property: location] 2019-03-24 04:37:24.150 [DEBUG] org.apache.struts2.result.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:127) - Forwarding to location: /error.html 2019-03-24 04:37:24.158 [DEBUG] com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.nullPropertyValue(InstantiatingNullHandler.java:98) - Entering nullPropertyValue [target=[com.ming.HelloWorldAction@5121691d, com.opensymphony.xwork2.DefaultTextProvider@2e34626e], property=struts] 2019-03-24 04:37:24.175 [INFO ] com.ming.MyInterceptor.intercept(MyInterceptor.java:26) - hi after 2019-03-24 04:37:24.176 [INFO ] com.opensymphony.xwork2.interceptor.TimerInterceptor.doLog(TimerInterceptor.java:205) - Executed action [//hello!execute] took 89 ms.
可以看到,由于配置了3個攔截器,攔截器被順序執(zhí)行.
在執(zhí)行前后分別執(zhí)行了兩個操作
這就是面向切面編程
此處可以添加事物 鎖 其中鎖可以用redis實現(xiàn),達到同時多個tomcat實例讀取數(shù)據(jù)庫的時候,進行加鎖操作,使用redis達到鎖的目的
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/73926.html
摘要:文件上傳通過這個攔截器攔截器的設計就是基于組件設計的應用再次回顧攔截器基礎在開始講解的時候已經(jīng)說明過了這個文件,它定義了的所有攔截器。由于我們配置了自定義攔截器,那么默認的攔截器棧是不會執(zhí)行的。 什么是攔截器 攔截器Interceptor.....攔截器是Struts的概念,它與過濾器是類似的...可以近似于看作是過濾器 為什么我們要使用攔截器 前面在介紹Struts的時候已經(jīng)講解過了...
摘要:執(zhí)行中的方法,默認執(zhí)行方法返回結(jié)果同樣會通過一系列攔截器,然后由指定的表現(xiàn)形式返回,比如,或字面值配置文件利用配置文件初始化一系列的相關資源,這個底層實現(xiàn)技術屬于依賴注入。會通過配置文件初始化的資源包括攔截器,類及。 1.Struts2簡介 框架是一組程序的集合,包含了一系列的最佳實踐,作用是解決某個領域的問題。本質(zhì)上來講,框架只是一個jar包,其本質(zhì)上是對jdk的擴展。 最佳實踐:...
摘要:現(xiàn)在,我們使用了的話,那么框架內(nèi)部就能幫我們封裝了。每個中都有和這樣的方法,沒必要的。我們抽取出來,通過配置文件來把這兩個方法替換掉,那么我們的程序就會更加優(yōu)雅了。于是乎,就應運而生了。因此,學習的時候,不了解是沒有任何關系的。 前言 這是Strtus的開山篇,主要是引入struts框架...為什么要引入struts,引入struts的好處是什么,以及對Struts2一個簡單的入門.....
摘要:的開發(fā)流程在文件中定義核心攔截用戶請求。的最大作用是配置和請求之間的對應關系,并配置邏輯視圖名和物理視圖資源之間的相對關系,即返回結(jié)果和文件的物理位置的關系。實現(xiàn)為了使開發(fā)的更規(guī)范,提供了一個接口,定義了的處理應該實現(xiàn)的規(guī)范。 1.struts2的開發(fā)流程 在web.xml文件中定義核心Filter攔截用戶請求。 struts2 org.apa...
摘要:前言前面博文基本把的配置信息講解完了本博文主要講解對數(shù)據(jù)的處理開發(fā)的三種方式在第一次我們寫開發(fā)步驟的時候,我們寫的是繼承著類的為啥我們繼承了類呢下面我就會講解到繼承類我們來看一下干了什么也就是說,如果我們在類中需要用到為我們提供的數(shù)據(jù)校驗等 前言 前面Struts博文基本把Struts的配置信息講解完了.....本博文主要講解Struts對數(shù)據(jù)的處理 Action開發(fā)的三種方式 在第一...
摘要:自定義的攔截器可以和框架內(nèi)置的攔截器進行混合使用,一般情況攔截器都被默認配置成為執(zhí)行的基礎。若類型轉(zhuǎn)換失敗,或者數(shù)據(jù)驗證失敗,攔截器就會阻止的執(zhí)行。 1.攔截器簡介 默認的攔截器在設計的時候就能滿足大部分的應用,所以很多時候就不需要添加自定義的攔截器或者修改攔截器棧。很多action有各種各樣的需求,比如輸入驗證、文件上傳、防止多次提交等等。于是struts框架就提供了一個解決方案,I...
閱讀 1041·2019-08-30 12:57
閱讀 2114·2019-08-30 11:11
閱讀 2177·2019-08-29 15:20
閱讀 1870·2019-08-29 14:12
閱讀 3274·2019-08-28 17:51
閱讀 2378·2019-08-26 13:23
閱讀 789·2019-08-26 10:34
閱讀 3844·2019-08-23 12:37