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

了解java Struts攔截器的相關(guān)操作

 更新時(shí)間:2019年06月05日 15:07:16   作者:不言  
Struts為我們實(shí)現(xiàn)了很多的功能,比如數(shù)據(jù)自動(dòng)封裝,文件上傳功能阿。Struts為我們提供的這些功能都是通過(guò)攔截器完成的。下面我們來(lái)詳細(xì)了解一下吧

實(shí)現(xiàn)aop的方式

用于實(shí)現(xiàn)action之前

  • 一般用于事物操作.
  • 一般用于對(duì)某些未授權(quán)的頁(yè)面訪問(wèn)的時(shí)候,進(jìn)行攔截操作,攔截非法訪問(wèn).

開(kāi)箱即用攔截器

<!-- 攔截器 -->
<interceptor-ref name="params"/> <!-- 傳遞屬性攔截器 -->
<interceptor-ref name="timer"/> <!-- 測(cè)算執(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);
// 開(kāi)始執(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"/> <!-- 測(cè)算執(zhí)行時(shí)間 -->
<interceptor-ref name="MyInterceptor"/>
<!-- 成功返回頁(yè)面 -->
<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ù)庫(kù)的時(shí)候,進(jìn)行加鎖操作,使用redis達(dá)到鎖的目的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

宜春市| 青龙| 澳门| 政和县| 通化县| 大洼县| 宁乡县| 双流县| 上高县| 巴林右旗| 太湖县| 安义县| 吉林省| 汉阴县| 文化| 台中市| 黎平县| 寿宁县| 镇雄县| 抚顺县| 白朗县| 团风县| 长乐市| 盐亭县| 葫芦岛市| 新竹县| 城口县| 兰坪| 台中县| 招远市| 肥东县| 渑池县| 祁东县| 怀安县| 铜梁县| 长汀县| 玉田县| 彰化市| 芮城县| 黔东| 隆安县|