欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

實現(xiàn)aop的方式

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

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

開箱即用攔截器

<!-- 攔截器 -->
<interceptor-ref name="params"/> <!-- 傳遞屬性攔截器 -->
<interceptor-ref name="timer"/> <!-- 測算執(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;
}
}

更改配置文件

<!-- 攔截器 -->
<interceptor-ref name="params"/> <!-- 傳遞屬性攔截器 -->
<interceptor-ref name="timer"/> <!-- 測算執(zhí)行時間 -->
<interceptor-ref name="MyInterceptor"/>
<!-- 成功返回頁面 -->
<result name="success">/HelloWorld.jsp</result>
<result name="error">/error.html</result>

控制臺輸出結(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達到鎖的目的。

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

相關(guān)文章

  • Map與JavaBean相互轉(zhuǎn)換的工具類?

    Map與JavaBean相互轉(zhuǎn)換的工具類?

    這篇文章主要介紹了Map與JavaBean相互轉(zhuǎn)換的工具類,在做導(dǎo)入的時候,遇到了需要將map對象轉(zhuǎn)化?成javabean的問題,也就是說,不清楚javabean的內(nèi)部字段排列,只知道m(xù)ap的?key代表javabean的字段名,value代表值,需要的朋友可以參考下
    2022-02-02
  • 一篇文章帶你深入了解Java封裝

    一篇文章帶你深入了解Java封裝

    Java中的封裝是將數(shù)據(jù)(變量)和作用于數(shù)據(jù)(方法)的代碼作為一個單元包裝在一起的機制。 在封裝中,類的變量將從其他類隱藏,并且只能通過當(dāng)前類的方法訪問
    2021-08-08
  • Mybatis一對多與多對一查詢處理詳解

    Mybatis一對多與多對一查詢處理詳解

    這篇文章主要給大家介紹了關(guān)于Mybatis一對多與多對一查詢處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • JPA?@ManyToMany?報錯StackOverflowError的解決

    JPA?@ManyToMany?報錯StackOverflowError的解決

    這篇文章主要介紹了JPA?@ManyToMany?報錯StackOverflowError的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 深入探究 spring-boot-starter-parent的作用

    深入探究 spring-boot-starter-parent的作用

    這篇文章主要介紹了spring-boot-starter-parent的作用詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,感興趣的小伙伴可以跟著小編一起來學(xué)習(xí)一下
    2023-05-05
  • jsch中ChannelShell與ChannelExec的區(qū)別及說明

    jsch中ChannelShell與ChannelExec的區(qū)別及說明

    這篇文章主要介紹了jsch中ChannelShell與ChannelExec的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot實現(xiàn)發(fā)送驗證碼功能(圖片驗證碼)

    SpringBoot實現(xiàn)發(fā)送驗證碼功能(圖片驗證碼)

    這篇文章主要介紹了SpringBoot實現(xiàn)發(fā)送驗證碼功能(圖片驗證碼),本次內(nèi)容主要學(xué)習(xí)如何做一個發(fā)送驗證碼和識別驗證碼的功能,需要的朋友可以參考下
    2024-06-06
  • spring中jdbcTemplate.batchUpdate的幾種使用情況

    spring中jdbcTemplate.batchUpdate的幾種使用情況

    本文主要介紹了spring中jdbcTemplate.batchUpdate的幾種使用情況,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 通過圖例了解PowerDesigner使用方法

    通過圖例了解PowerDesigner使用方法

    這篇文章主要介紹了通過圖例了解PowerDesigner使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • 微信企業(yè)號驗證/發(fā)送/接收消息

    微信企業(yè)號驗證/發(fā)送/接收消息

    這篇文章主要介紹了微信企業(yè)號驗證/發(fā)送/接收消息的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10

最新評論