>  기사  >  Java  >  Struts 인터셉터 관련 작업 소개(코드 포함)

Struts 인터셉터 관련 작업 소개(코드 포함)

不言
不言앞으로
2019-03-26 11:21:532432검색

이 기사는 Struts 인터셉터(코드 포함)의 관련 작업을 소개합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.

aop을 구현하는 방법

은 실행 전후에 작업을 구현하는 데 사용됩니다.

는 일반적으로 트랜잭션 작업에 사용됩니다.

는 일반적으로 특정 승인되지 않은 페이지에 액세스할 때 작업을 차단하고 불법 액세스를 차단하는 데 사용됩니다. -of-the-box 인터셉터

<!-- 拦截器 -->
<interceptor-ref name="params"/>  <!-- 传递属性拦截器 -->
<interceptor-ref name="timer"/> <!-- 测算执行时间 -->

패스 속성이 있어야 합니다. 이 인터셉터

실행 출력 로그는 다음과 같습니다

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.

이 작업을 실행하는 데 총 12ms가 걸리는 것을 볼 수 있습니다

맞춤형 인터셉터

이 추상 클래스를 상속하고 해당 메소드, 즉 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;
    }
}

이 클래스의 인터셉터 메소드를 구현하세요

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();
        // 执行结果前
        String output = "hi before";
        logger.info(output);
        
        // 开始执行Action
        String result = invocation.invoke();
        
        // 执行结果后
        output = "hi after";
        logger.info(output);
        
        // 继续传递到下一个拦截器
        return result;
    }
}

구성 파일을 변경하세요

<!-- 拦截器 -->
<interceptor-ref name="params"/>  <!-- 传递属性拦截器 -->
<interceptor-ref name="timer"/> <!-- 测算执行时间 -->


/HelloWorld.jsp
/error.html

효과는 다음과 같습니다

콘솔 출력 결과는 다음과 같습니다

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개의 인터셉터가 구성되어 있으므로 인터셉터가 순차적으로 실행되는 것을 볼 수 있습니다.

실행 전과 후에 두 가지 작업이 수행됩니다.


Aspect 지향입니다. 프로그래밍

여기서 트랜잭션 잠금을 추가할 수 있습니다. 잠금은 여러 Tomcat 인스턴스가 동시에 데이터베이스를 읽을 때 잠금 작업을 수행하고 잠금 목적을 달성하기 위해 Redis를 사용합니다. 더 많은 흥미로운 콘텐츠를 보려면 PHP 중국어 웹사이트 튜토리얼

칼럼의
Java 동영상을 시청하세요!

위 내용은 Struts 인터셉터 관련 작업 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제