Struts2知识点小结(四)--拦截器与注解开发

一、Struts2的拦截器(interceptor)

作用:当请求进入struts2框架后(进入之前可以用filter进行拦截),想对请求进行拦截操作(功能增强、权限控制),需要拦截器组件
    
    1、struts2内置拦截器
    
        1.1 struts-default.xml中配置好的拦截器
            struts2框架已经定义好并使用的拦截器
            发送请求 -----> interceptor1---->interceptor2 ------>......-----> DemoAction
            
            在struts-default.xml文件中已经声明了多个拦截器
            
            <interceptors>
                ... ...
                <!--声明拦截器-->
                <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
                ... ...
                
                <!--声明拦截器栈-->
                <interceptor-stack name="basicStack">
                    ... ...
                    <interceptor-ref name="exception"/>
                    ... ...
                </interceptor-stack>
                
            </interceptors>
            
            <!-- 默认的拦截器引用 -->
            <default-interceptor-ref name="defaultStack"/>
            
        1.2 源码分析interceptor的执行过程(简化源码)
            --->StrutsPrepareAndExecuteFilter
            --->public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            --->execute.executeAction(request, response, mapping);
            --->dispatcher.serviceAction(request, response, mapping);
            --->ActionProxy proxy = createActionProxy();
            --->proxy.execute();
            --->retCode = invocation.invoke();
            --->
                Iterator<InterceptorMapping> interceptors;
                
                //判断迭代器集合中是否还有下一个(递归)
                if (interceptors.hasNext()) {
                    final InterceptorMapping interceptor = interceptors.next();  //获得当前InterceptorMapping对象
                    resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.this);
                                    获得拦截器对象本身        调用该拦截器内部的拦截方法intercept    
                    
                } else {
                    resultCode = invokeActionOnly(); //仅仅执行当前要访问目标Action
                }
                
                PS:
                    resultCode:逻辑视图名,字符串
                    
                    总结:
                        如果在interceptor中调用invocation.invoke(); 代表放行
                        如果在interceptor中return 字符串,代表不放行 , 且return的字符串就是要匹配的逻辑视图
                
                PS:
                    <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
                    class InterceptorMapping{
                        private String name;  //modelDriven
                        private Interceptor interceptor;  //class对应全限定名的对象
                    }

2、struts2自定义拦截器
        开发步骤:
            1、自定义拦截器类 实现interceptor接口(继承interceptor的实现类)
            2、实现intercept方法,该方法封装拦截功能的逻辑代码
            3、在struts.xml中配置拦截器
                声明拦截器
                使用拦截器
            4、测试
    
        
    
二、Struts2的注解开发

Struts2的注解开发 主要 是对Action的xml配置替代
    
    Struts2注解开发需要导入额外jar包:Struts2-convention-plugin.jar

作用到类上的注解
    @Namespce()
    @ParentPackage()
    @Results({})
    @Result(name,type,location)
    @InterceptorRefs({})
    @InterceptorRef()

作用到方法的注解
    @Action(
        value="",
        results={},
        interceptorRefs={}
    )
    
    
   注意
        struts默认扫描action,actions,struts,struts2这4个包的注解  手动配置扩充包名称
        <constant name="struts.convention.package.locators" value="action,actions,struts,struts2,web"/>

原文地址:https://www.cnblogs.com/itworkerlittlewrite/p/9445375.html

时间: 2024-08-09 09:42:00

Struts2知识点小结(四)--拦截器与注解开发的相关文章

Struts2(十四)拦截器实现权限管理

一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截Action请求 在访问的Action执行之前和执行之后执行代码实现某项功能 Struts2: 大部分功能是在拦截器中实现的如:接收输入的参数,数据验证,文件上传,国际化等 应用程序: 需要在Action执行的前后执行特定功能 Action执行时间统计,Action访问权限管理 Action添加功能

SpringMVC(AbstractController,拦截器,注解)

1.Controller接口及其实现类 Controller是控制器/处理器接口,只有一个方法handleRequest,用于进行请求的功能处理(功能处理方法),处理完请求后返回ModelAndView对象(Model模型数据部分 和 View视图部分). 如果想直接在处理器/控制器里使用response向客户端写回数据,可以通过返回null来告诉DispatcherServlet我们已经写出响应了,不需要它进行视图解析 Spring默认提供了一些Controller接口的实现类以方便我们使用,

struts2学习笔记---自定义拦截器

什么是拦截器? struts2中拦截器分为Struts2定义好的拦截器和自定义的拦截器.其作用是在一个Action执行之前进行拦截,在Action执行之后又加入某些操作. 实现原理 当请求一个Action时,struts2会查找配置文件,并根据这个Action的配置实例化对应的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器. 拦截器的执行流程 1.对Action进行预处理.(正序执行) 2.拦截器自身决定该不该执行后续的拦截器(由invoke()方法的返回值决定).

【struts2】预定义拦截器

1)预定义拦截器 Struts2有默认的拦截器配置,也就是说,虽然我们没有主动去配置任何关于拦截器的东西,但是Struts2会使用默认引用的拦截器.由于Struts2的默认拦截器声明和引用都在这个Struts-default.xml里面,因此我们需要到这个文件的struts-default包里去看一下.定义如下: 1 <interceptors> 2 <interceptor name="alias" class="com.opensymphony.xwor

走进Struts2(二) — Struts2的基石(拦截器)

拦截器(Interceptor)是Struts2的基石,拦截器的主要作用是在Action执行之前和Result执行之后进行一些特定功能的处理机制. 如图,拦截器是用来负责在Action执行之前和Result执行之后处理一些功能的类.每个不同的拦截器,它们分别执行不同的功能处理,而运行的时机就是在Action执行之前和Result执行之后,需要注意的是在执行Action之前和Result之后,拦截器的执行顺序是正好相反的. 一.拦截器的好处 1.简化Action的实现,可以把很多功能从Action

Struts2基础学习(五)&mdash;拦截器

一.概述 1.初识拦截器      Interceptor 拦截器类似前面学过的过滤器,是可以在action执行前后执行的代码,是我们做Web开发经常用到的技术.比如:权限控制.日志等.我们也可以将多个Interceptor 连在一起组成Interceptor 栈.     Struts2拦截器,每个拦截器类只有一个对象实例,即采用单例模式,所有引用这个拦截器的Action都共享这一拦截器类的实例,因此在拦截器中如果使用类变量,要注意同步的问题.      注意:              (1

struts2(六)拦截器机制

拦截器简述 拦截器是一组动态拦截Action调用的对象.拦截器的处理代码可以定义在action执行前或者执行后.同时,拦截器能够拦截一个Action的执行.拦截器可以将一些通用功能封装成可重用形式以供一个Action或多个 Actions使用. 拦截器必须是无状态的,原因是Struts 2不能保证为每一个请求或者Action创建一个实例,所以如果拦截器带有状态,会引发并发问题.不要使用在API提供的ActionInvocation之外的任何东西. 在概念上,interceptors相近于Serv

Struts2 (四) — 拦截器

一.拦截器 1.概述 1.1什么是拦截器 ? 在struts2中,拦截器(Interceptor)是用来动态拦截Action执行的对象. ? 拦截器有点类似以前Servlet阶段的Filter(过滤器) , 能够在请求到达Action之前进行拦截操作, 可以在里面进行判断校验. 典型的例子: 登录拦截. 注:过滤器可以过滤servlet,jsp,html , 但拦截器只能拦截Action 1.2 struts2执行流程 ? 客户端请求Action,执行前端控制器,在前端控制器内部创建了Actio

Struts2(四) 拦截器

一.struts2国际化 定义:同一款软件 可以为不同用户,提供不同语言界面 第一种 全局国际化信息文件 (所有Action都可以使用 ) ------- 最常用 1.properties文件可以在任何包中2. 需要在struts.xml 中配置全局信息文件位置 <!-- messages.properties 在src根目录 --> <constant name="struts.custom.i18n.resources" value="messages&