Maison  >  Article  >  Java  >  Introduction aux opérations associées de l'intercepteur Struts (avec code)

Introduction aux opérations associées de l'intercepteur Struts (avec code)

不言
不言avant
2019-03-26 11:21:532502parcourir

Cet article vous apporte une introduction aux opérations pertinentes de l'intercepteur Struts (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

La manière d'implémenter aop

est utilisée avant et après la mise en œuvre de l'action

est généralement utilisée pour les opérations de transaction.

est généralement utilisée pour. certaines actions non autorisées Lors de l'accès à la page, l'opération d'interception est effectuée pour intercepter les accès illégaux

L'intercepteur prêt à l'emploi

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

doit avoir l'attribut pass de cet intercepteur <.>

Exécutez la sortie Le journal est le suivant

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.
Vous pouvez voir que cette action prend 12 ms pour s'exécuter au total

Intercepteur personnalisé

doit hériter de cette classe abstraite et la méthode pour l'implémenter est com.opensymphony.xwork2.interceptor.AbstractInterceptor Le code de la classe abstraite

est le suivant

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;
    }
}
Implement. la méthode d'intercepteur de cette classe

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;
    }
}
Modifier le fichier de configuration

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


/HelloWorld.jsp
/error.html
L'effet est le suivant

La sortie de la console est la suivante

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.
Vous pouvez voir que puisque 3 intercepteurs sont configurés, les intercepteurs sont exécutés séquentiellement.

Deux opérations sont effectuées avant et après l'exécution

Il s'agit d'une programmation orientée aspect

Vous pouvez ajouter une transaction locks ici. Les verrous peuvent être implémentés avec redis, afin que plusieurs instances de Tomcat puissent lire la base de données en même temps. Effectuez l'opération de verrouillage et utilisez redis pour atteindre l'objectif de verrouillage

Cet article est terminé ici. Pour d'autres contenus passionnants, vous pouvez prêter attention à la colonne

Java Video Tutorial du site Web PHP chinois !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer