您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)java中Struts攔截器相關(guān)操作的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
實(shí)現(xiàn)aop的方式
用于實(shí)現(xiàn)action之前
一般用于事物操作.
一般用于對某些未授權(quán)的頁面訪問的時(shí)候,進(jìn)行攔截操作,攔截非法訪問.
開箱即用攔截器
<!-- 攔截器 --> <interceptor-ref name="params"/> <!-- 傳遞屬性攔截器 --> <interceptor-ref name="timer"/> <!-- 測算執(zhí)行時(shí)間 -->
必須有傳遞屬性這個(gè)攔截器
運(yùn)行輸出日志如下
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.
可以看到這個(gè)action一共運(yùn)行耗時(shí)12ms
自定義攔截器
需要繼承該抽象類,并實(shí)現(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; } }
實(shí)現(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ù)傳遞到下一個(gè)攔截器 return result; } }
更改配置文件
<!-- 攔截器 --> <interceptor-ref name="params"/> <!-- 傳遞屬性攔截器 --> <interceptor-ref name="timer"/> <!-- 測算執(zhí)行時(shí)間 --> <interceptor-ref name="MyInterceptor"/> <!-- 成功返回頁面 --> <result name="success">/HelloWorld.jsp</result> <result name="error">/error.html</result>
控制臺(tái)輸出結(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個(gè)攔截器,攔截器被順序執(zhí)行。
在執(zhí)行前后分別執(zhí)行了兩個(gè)操作,這就是面向切面編程。
此處可以添加事物鎖,其中鎖可以用redis實(shí)現(xiàn),達(dá)到同時(shí)多個(gè)tomcat實(shí)例讀取數(shù)據(jù)庫的時(shí)候,進(jìn)行加鎖操作,使用redis達(dá)到鎖的目的。
關(guān)于“java中Struts攔截器相關(guān)操作的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。