拦截器:

  Struts2的大多数核心功能都是通过拦截器实现的。拦截器之所以称之为“拦截器”,是因为它可以在执行Action之前或之后拦截下用户请求,执行一些操作,以增强Action方法的功能。

  Struts2内置了35种拦截器,每个拦截器完成相对独立的功能,多个拦截器的组合体称为拦截器栈。最为重要的拦截器栈是系统默认的拦截器栈DefaultStack。

  通常情况下,自定义一个普通的拦截器类需要实现拦截器接口Interceptor。该接口中定义了三个方法:

    public void init(); 拦截器实例被创建之前被调用

    public void destory(); 拦截器实例被销毁之前被调用

  public String intercept(ActionInvocation invocation) throws Exception:该方法在Action执行之前被调用,拦截器的附加功能在该方法中实现。执行参数invocation的invoke()方法,就是调用Action方法去执行。

    

  常用的拦截器(在struts-default.xml中可查):

    

   自定义权限拦截器:

    拦截器类的代码如下:   

package com.tongji.interceptors;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;public class PermissionInterceptor implements Interceptor {private static final long serialVersionUID = 2730133447721824856L;@Overridepublic void destroy() {}@Overridepublic void init() {}@Overridepublic String intercept(ActionInvocation invocation) throws Exception {String user = (String) ActionContext.getContext().getApplication().get("user");System.out.println(user);if (!"qjj".equals(user)) {System.out.println("bad");return "fail";}//调用Action方法return invocation.invoke();}}

    注册拦截器的方式(注意拦截器是方法级的):

      (1)单个拦截器分别注册的方式:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><package name="demo" namespace="/test" extends="struts-default"><interceptors><interceptor name="permissionInterceptor" class="com.tongji.interceptors.PermissionInterceptor"/></interceptors><action name="system" class="com.tongji.actions.SystemAction"><result>/welcome.jsp</result><result name="fail">/fail.jsp</result><!-- 一旦显示的声明了action要使用拦截器,则系统默认的拦截器栈defaultStack将不再执行--><interceptor-ref name="permissionInterceptor"/><interceptor-ref name="defaultStack"/></action></package>
</struts>

      (2)拦截器栈的注册方式:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><package name="demo" namespace="/test" extends="struts-default"><interceptors><interceptor name="permissionInterceptor" class="com.tongji.interceptors.PermissionInterceptor"/><interceptor-stack name="permissionStack"><interceptor-ref name="permissionInterceptor"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><action name="system" class="com.tongji.actions.SystemAction"><result>/welcome.jsp</result><result name="fail">/fail.jsp</result><interceptor-ref name="permissionStack"/></action></package>
</struts>

      (3)默认拦截器的注册方式:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><package name="demo" namespace="/test" extends="struts-default"><interceptors><interceptor name="permissionInterceptor" class="com.tongji.interceptors.PermissionInterceptor"/><interceptor-stack name="permissionStack"><interceptor-ref name="permissionInterceptor"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><!-- 默认的拦截器:当前包中只要没有显示声明使用的拦截器,则就会执行该默认拦截器 --><default-interceptor-ref name="permissionStack"></default-interceptor-ref><action name="system" class="com.tongji.actions.SystemAction"><result>/welcome.jsp</result><result name="fail">/fail.jsp</result></action></package>
</struts>

  补充:

    (1)方法过滤拦截器:

      拦截器类代码如下(注意继承自MethodFilterInterceptor抽象类,当然这个抽象类最后也是实现Interceptor接口的):

package com.tongji.interceptors;import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;public class PermissionInterceptor extends MethodFilterInterceptor{private static final long serialVersionUID = 6243069277042908932L;@Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception {System.out.println("执行拦截器");return invocation.invoke();}}

    方法过滤拦截器的注册方式:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><package name="demo" namespace="/test" extends="struts-default"><interceptors><interceptor name="permissionInterceptor" class="com.tongji.interceptors.PermissionInterceptor"><!-- <param name="includeMethods">doFirst</param> --><param name="excludeMethods">doSecond,doThird</param></interceptor><interceptor-stack name="permissionStack"><interceptor-ref name="permissionInterceptor"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><action name="some_*" class="com.tongji.actions.SomeAction" method="{1}"><result>/welcome.jsp</result><interceptor-ref name="permissionInterceptor" /></action></package>
</struts>

   (2)拦截器的执行顺序与注册顺序相同:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><package name="demo" namespace="/test" extends="struts-default"><interceptors><interceptor name="oneInterceptor" class="com.tongji.interceptors.OneInterceptor"/><interceptor name="twoInterceptor" class="com.tongji.interceptors.TwoInterceptor"/><!-- 拦截器的执行顺序与其注册顺序相同 --><interceptor-stack name="myStack"><interceptor-ref name="twoInterceptor"></interceptor-ref><interceptor-ref name="oneInterceptor"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><action name="system" class="com.tongji.actions.SystemAction"><result>/welcome.jsp</result><result name="fail">/fail.jsp</result><interceptor-ref name="myStack"/></action></package>
</struts>

      先执行twoInterceptor,再执行oneInterceptor。

转载于:https://www.cnblogs.com/qjjazry/p/6239508.html

Strusts2笔记6--拦截器相关推荐

  1. 【SpringMVC笔记】拦截器 + 文件上传下载

    拦截器 + 文件上传下载 拦截器(interceptor) 自定义拦截器 验证用户是否登录 (认证用户) 没有拦截器 配置拦截器 文件的上传 文件输出流进行文件上传 file.Transto 进行文件 ...

  2. Spring Boot笔记-设置拦截器为false时返回的Body

    以preHandle拦截器为例: @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse ...

  3. JavaWeb学习笔记:拦截器

    一.概述 当客户端发起请求时,Filter 过滤器可以将请求拦截下来,对请求进行一些判断,只有符合要求的请求才会放行.应用场景:登录验证,设置编码,过滤明杆字符等. 二.生命周期 过滤器的生命周期和 ...

  4. 【Spring学习笔记-MVC-17】Spring MVC之拦截器

    作者:ssslinppp       1. 拦截器简介及应用场景 2. 拦截器接口及拦截器适配器 3. 运行流程图 正常运行 中断流程 4. 程序实例 控制层: @Controller @Reques ...

  5. Struts2学习笔记(九) 拦截器(Interceptor)(下)

    拦截器的查找顺序 如果我们在多个地方配置了拦截器,那么框架会按什么样的顺序进行查找呢: (1)   首先查找当前Action是否声明了拦截器,如果有则使用这个拦截器,不再继续寻找,如果没有,则执行下一 ...

  6. 【Kafka笔记】4.Kafka API详细解析 Java版本(Producer API,Consumer API,拦截器等)

    简介 Kafka的API有Producer API,Consumer API还有自定义Interceptor (自定义拦截器),以及处理的流使用的Streams API和构建连接器的Kafka Con ...

  7. springmvc学习笔记二:重定向,拦截器,参数绑定

    springmvc学习笔记二:重定向,拦截器,参数绑定 Controller方法返回值 返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加mo ...

  8. Vue学习笔记:axios 拦截器的用法

    Vue学习笔记:axios 拦截器的用法 什么是axios 拦截器? 拦截器就是拦截每一次的请求和响应,然后进行相应的处理.请求拦截器,它可以统一在你发送请求前在请求体里加上token:响应拦截器,是 ...

  9. 谷粒商城笔记+踩坑(19)——订单模块构建、登录拦截器

    导航: 谷粒商城笔记+踩坑汇总篇 目录 1.页面环境搭建 1.1 动静分离 1.2 hosts添加域名映射 1.3 配置网关和nacos 1.4 引导类开启注册发现和feign客户端 1.5 thym ...

  10. struts2拦截器_Struts2 学习笔记(二)

    1. Struts2的Servlet API的访问 在使用Struts2的框架的过程中,发现Struts2和Servlet的API是解耦合的.在实际开发中,经常使用到Servlet的API,比如进行登 ...

最新文章

  1. python用xlrd怎么清洗数据_用Python进行数据清洗!
  2. 代理模式中的动态代理
  3. C++ Primer 第五版 第6章 6.1——函数及函数定义及调用习题答案
  4. python搭建https代理服务器_使用NGINX作为HTTPS正向代理服务器
  5. linux live运行 光盘弹出复,通过liveCD进行ubuntu启动修复
  6. 布丰投针问题和蒙特卡洛方法
  7. 最近计算机速度测试情况,速度测试
  8. 【智能优化算法-正弦余弦算法】基于反向正弦余弦算法求解高维优化问题附matlab代码
  9. mc服务器常用指令_掌控MC服务器 我的世界服务器指令大全
  10. mysql出现LF怎么办,MySQL的LF_HASH
  11. jest 客户端 实现 Sliced+Scroll并行查询
  12. javascript设计模式(javascript设计模式与开发实践读书笔记)
  13. Haskell编程指南 | Lynda教程 中文字幕
  14. 那些让你起飞的计算机基础知识!
  15. Cocos Creator Effect 高斯模糊 (带算法)
  16. DICOM:基于DCMTK实现C-FIND SCU
  17. 使用animate 两个div向中间移动合并成一块
  18. 软件测试 —— Python(一)之Python基础
  19. Android9.0 Mms (彩信接收步骤,Android9.0版本)
  20. java 二维数组的筛选_java中的筛选遍历数组,实例展示

热门文章

  1. SQLServer------基本操作
  2. [转载]AxureRP学习成长之路
  3. PrefTest性能测试解决方案 -- C/S结构应用系统的压力测试
  4. GdiPlus[34]: IGPGraphicsPath (一)
  5. [VC] 通过IHTMLDocument2-DC把网页保存为图片
  6. element-UI-tab选项卡
  7. 添加子节点时报错:TypeError: oUl.appendChild is not a function
  8. sql 孩子兄弟表示法 所有子节点_数据结构,二叉树遍历,孩子兄弟表示法,算法设计题...
  9. python defaultdict tree_python – 从非空的defaultdict中挑选一个随机元素
  10. mysql 指定ip段 掩码_IP分配及网段划分