zoukankan      html  css  js  c++  java
  • 拦截器、方法浅谈Struts2拦截器的原理与实现by小雨

    上班之余抽点间时出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下拦截器、方法-

        

    浅谈Struts2拦截器的理原与实现

        

     

        一、解理Struts2拦截器

        1. Struts2拦截器是在拜访某个Action或Action的某个方法,段字之前或后之实行拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.

        2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按必定的序顺联结成一条链。在拜访被拦截的方法或段字时,Struts2拦截器链中的拦截器就会按其之前定义的序顺被调用。

        二、实现Struts2拦截器理原

        Struts2拦截器的实现理原对相简略,当请求struts2的action时,Struts 2会查找置配件文,并根据其置配实例化对相的    拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器

        三、定义Struts2拦截器。

        Struts2划定用户自定义拦截器必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。该接口声明白3个方法,

    void init();
    void destroy();
    String intercept(ActionInvocation invocation) throws Exception;

    其中,init和destroy方法会在序程开始和结束时各行执一遍,不管应用了该拦截器与否,只要在struts.xml中声明白该Struts2拦截器就会被行执。
    intercept方法就是拦截的主体了,每次拦截器效生时会都行执其中的逻辑。

        不过,struts中又供提了几个抽象类来简化这一骤步。

    public abstract class AbstractInterceptor implements Interceptor;
    public abstract class MethodFilterInterceptor extends AbstractInterceptor;

    都是模板方法实现的。

        其中AbstractInterceptor供提了init()和destroy()的空实现,应用时只要需覆盖intercept()方法;

        而MethodFilterInterceptor则供提了includeMethods和excludeMethods两个属性,用来过滤行执该过滤器的action的方法。可以通过param来参加或者消除要需过滤的方法。

        一般来说,拦截器的写法都差不多。看下面的示例:

    package interceptor;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.Interceptor;
    public class MyInterceptor implements Interceptor {
    public void destroy() {
    // TODO Auto-generated method stub
    }
    public void init() {
    // TODO Auto-generated method stub
    }
    public String intercept(ActionInvocation invocation) throws Exception {
    System.out.println("Action行执前插入 码代");     
    //行执目标方法 (调用下一个拦截器, 或行执Action)   
    final String res = invocation.invoke();   
    System.out.println("Action行执后插入 码代");   
    return res;   
    }
    }

    四、置配Struts2拦截器

        Struts2拦截器要需在struts.xml中声明,如下struts.xml置配件文

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    <constant name="struts.objectFactory" value="spring" />

     

    <package name="default" extends="struts-default">
    <interceptors>
    <interceptor name="MyInterceptor" class="interceptor.MyInterceptor"></interceptor>
    <interceptor-stack name="myInterceptorStack">
    <interceptor-ref name="MyInterceptor"/>
    <interceptor-ref name="defaultStack"/>
    </interceptor-stack>
    </interceptors>
    <action name="loginAction" class="loginAction">
    <result name="fail">/index.jsp </result>
    <result name="success">/success.jsp</result>
    <interceptor-ref name="myInterceptorStack"></interceptor-ref>
    </action>
    </package>
    </struts>

    拦截器

    名字

    明说

    Alias Interceptor

    alias

    在不同请求之间将请求参数在不同名字件转换,请求内容变不

    Chaining Interceptor

    chain

    让前一个Action的属性可以被后一个Action拜访,当初和chain类型的result()结合应用。

    Checkbox Interceptor

    checkbox

    添加了checkbox主动处置码代,将没有中选的checkbox的内容设定为false,而html认默情况下不提交没有中选的checkbox

    Cookies Interceptor

    cookies

    应用置配的name,value来是指cookies

    Conversion Error Interceptor

    conversionError

    将误错从ActionContext中添加到Action的属性段字中。

    Create Session Interceptor

    createSession

    主动的创立HttpSession,用来为要需应用到HttpSession的拦截器服务。

    Debugging Interceptor

    debugging

    供提不同的调试用的页面来现展外部的据数况状。

    Execute and Wait Interceptor

    execAndWait

    在后台行执Action,同时将用户带到一个旁边的待等页面。

    Exception Interceptor

    exception

    将异常定位到一个画面

    File Upload Interceptor

    fileUpload

    供提件文上传功能

    I18n Interceptor

    i18n

    录记用户选择的locale

    Logger Interceptor

    logger

    出输Action的名字

    Message Store Interceptor

    store

    存储或者拜访实现ValidationAware接口的Action类涌现的消息,误错,段字误错等。

    Model Driven Interceptor

    model-driven

    如果一个类实现了ModelDriven,将getModel到得的结果放在Value Stack中。

    Scoped Model Driven

    scoped-model-driven

    如果一个Action实现了ScopedModelDriven,则这个拦截器会从应相的Scope中掏出model调用ActionsetModel方法将其放入Action外部。

    Parameters Interceptor

    params

    将请求中的参数置设到Action中去。

    Prepare Interceptor

    prepare

    如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。

    Scope Interceptor

    scope

    Action态状存入sessionapplication的简略方法。

    Servlet Config Interceptor

    servletConfig

    供提拜访HttpServletRequestHttpServletResponse的方法,以Map的方法拜访。

    Static Parameters Interceptor

    staticParams

    struts.xml件文中将中的中的内容置设到对应的Action中。

    Roles Interceptor

    roles

    定确用户是不是拥有JAAS指定的Role,否则不予行执。

    Timer Interceptor

    timer

    出输Action行执的间时

    Token Interceptor

    token

    通过Token来免避双击

    Token Session Interceptor

    tokenSession

    Token Interceptor一样,不过双击的时候把请求的据数存储在Session

    Validation Interceptor

    validation

    应用action-validation.xml件文中定义的内容验校提交的据数。

    Workflow Interceptor

    workflow

    调用Actionvalidate方法,一旦有误错回返,从新定位到INPUT画面

    Parameter Filter Interceptor

    N/A

    从参数列表中除删不必要的参数

    Profiling Interceptor

    profiling

    通过参数激活profile


    文章结束给大家分享下程序员的一些笑话语录: 手机终究会变成PC,所以ip会比wm更加畅销,但是有一天手机强大到一定程度了就会发现只有wm的支持才能完美享受。就好比树和草,草长得再高也是草,时间到了条件成熟了树就会窜天高了。www.ishuo.cn

  • 相关阅读:
    编程语言
    俄罗斯方块
    四则运算
    2019-2020-1 20191312《信息安全专业导论》第七周学习总结
    20191312-获奖感想与学习心得
    2019-2020-1学期 20192428 《网络空间安全专业导论》第九周小组讨论
    2019-2020-1学期 20192428 《网络空间安全专业导论》第九周学习总结
    2019-2020-1学期 20192428 第八周作业——小学四则运算实践
    2019-2020-1学期 20192428《网络空间安全专业导论》第八周学习总结
    2019-2020-1学期 20192428 《网络空间安全专业导论》第七周学习总结
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3026135.html
Copyright © 2011-2022 走看看