Struts2-整理笔记(五)拦截器、拦截器配置
拦截器(Interceptor)
拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制。
拦截器的优点
- 简化了Action的实现。拦截器能把很多功能从Action中独立出来,大量减少了Action的代码
- 功能更单一。按照上面的描述,把功能从Action中分离出来,分散到不同的拦截器中,这样每个拦截器的功能,以及Action本身的功能就更单一了。
- 通用代码模块化。从Action中把功能分离出来,放到拦截器中去实现,这样能把一些在多个Action中通用的代码进行模块化,封装在一个或者几个拦截器中。
- 提高重用性。当通用的功能代码被封装在拦截器中,实现了代码模块化过程之后,就可以对不同的Action,根据功能需要,来配置相同的拦截器了。
- 实现AOP。
- 拦截器相比Filter具有更强大的功能,比如拦截器与Servlet的API无关,比如拦截器可以访问到值栈等。
拦截器创建(三种方式)
- 第一种创建方式
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.Interceptor;
- //拦截器:第一种创建方式
- //拦截器生命周期:随项目的启动而创建,随项目关闭而销毁
- public class MyInterceptor implements Interceptor {
- @Override
- //初始化方法
- public void init() {
- }
- @Override
- //拦截方法
- public String intercept(ActionInvocation arg0) throws Exception {
- return null;
- }
- @Override
- //销毁方法
- public void destroy() {
- }
- }
2.第二种创建方式
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
- //创建方式2: 继承AbstractInterceptor -> struts2的体贴
- //帮我们空实现了init 和 destory方法. 我们如果不需要实现这两个方法,就可以只实现intercept方法
- public class MyInterceptor2 extends AbstractInterceptor {
- @Override
- public String intercept(ActionInvocation arg0) throws Exception {
- return null;
- }
- }
3.第三种创建方式(优秀)因为可以自己定制那个方法要(不要)拦截
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
- //继承:MethodFilterInterceptor 方法过滤拦截器
- //功能: 定制拦截器拦截的方法.
- // 定制哪些方法需要拦截 判断的代码已经封装在interceptor中
- // 定制哪些方法不需要拦截
- public class MyInterceptor3 extends MethodFilterInterceptor{
- @Override
- protected String doIntercept(ActionInvocation invocation) throws Exception {
- //前处理
- System.out.println("MyInterceptor3的前处理!");
- //放行
- String result = invocation.invoke();
- //后处理
- System.out.println("MyInterceptor3 的后处理!");
- return result;
- }
- }
拦截器配置
- <?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="inter" namespace="/" extends="struts-default" >
- <interceptors>
- <!-- 1.注册拦截器 -->
- <interceptor name="myInter3" class="cn.zhr.a_interceptor.MyInterceptor3"></interceptor>
- <!-- 2.注册拦截器栈 -->
- <interceptor-stack name="myStack">
- <!-- 自定义拦截器引入(建议放在20个拦截器之前) -->
- <interceptor-ref name="myInter3">
- <!-- 指定哪些方法不拦截,这两不能同时指定
- <param name="excludeMethods">add,delete</param> -->
- <!-- 指定哪些方法需要拦截 -->
- <param name="includeMethods">add,delete</param>
- </interceptor-ref>
- <!-- 引用默认的拦截器栈(20个) -->
- <interceptor-ref name="defaultStack"></interceptor-ref>
- </interceptor-stack>
- </interceptors>
- <!-- 3.指定包中的默认拦截器栈 -->
- <default-interceptor-ref name="myStack"></default-interceptor-ref>
- <action name="Demo1Action_*" class="cn.zhr.a_interceptor.Demo1Action" method="{1}" >
- <!-- 为Action单独指定走哪个拦截器(栈)
- <interceptor-ref name="myStack"></interceptor-ref>-->
- <result name="success" type="dispatcher" >/index.jsp</result>
- </action>
- </package>
- <package name="tag" namespace="/" extends="struts-default" >
- <action name="Demo2Action" class="cn.zhr.b_tag.Demo2Action" method="execute" >
- <result name="success" type="dispatcher" >/tag1.jsp</result>
- </action>
- <action name="Demo3Action" class="cn.zhr.b_tag.Demo3Action" method="execute" >
- <result name="success" type="dispatcher" >/tag2.jsp</result>
- </action>
- </package>
- </struts>
最近一直在忙着复习考试,刚腾出时间就过来把博客补一下。
Struts2-整理笔记(五)拦截器、拦截器配置的更多相关文章
- Struts2学习笔记五 拦截器
拦截器,在AOP中用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. Struts2中,拦截器是动态拦截Action调用的对象.它提供了一种机制可以使 ...
- Struts2学习笔记四:深入拦截器
一:拦截器的工作原理 拦截器的执行过程可以类比filter过滤器,ActionInvocation实例执行过程中,先执行action实例上引用的拦截器们,然后才执行action实例处理请求,返回res ...
- struts2学习笔记(六)—— 拦截器
一.拦截器概述 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作.拦截器是AOP的一种实现策略. 在We ...
- CAS学习笔记五:SpringBoot自动/手动配置方式集成CAS单点登出
本文目标 基于SpringBoot + Maven 分别使用自动配置与手动配置过滤器方式实现CAS客户端登出及单点登出. 本文基于<CAS学习笔记三:SpringBoot自动/手动配置方式集成C ...
- struts2学习笔记(5)拦截器
继承AbstractInterceptor类,在类中完成拦截器的功能,只需实现intercept方法即可,提供了init()和destroy()的空实现 示例:显示执行action所用的时间 ①在sr ...
- C# 《编写高质量代码改善建议》整理&笔记 --(五)类型设计
1.区分接口和抽象类的应用场合 区别: ①接口支持多继承,抽象类则不能. ②接口可以包含方法,属性,索引器,事件的签名,但不能有实现,抽象类则可以. ③接口在增加新方法后,所有的继承者都必须重构,否则 ...
- Struts2学习笔记(五)——Action访问Servlet API
在Strut2中访问Servlet API有三种方式: 1.通过ActionContext访问Servlet API,推荐使用这种,但是这种方案它获取的不是真正的事Servlet API. 步骤: 1 ...
- C# 《编写高质量代码改善建议》整理&笔记 --(五)成员设计
1.可以字段应该重构为属性 2.谨慎将数组或集合作为属性 数组和集合作为属性存在会引起这样的一个分歧:如果属性是只读的,我们通常会认为他是不可改变的.但是如果将只读属性应用于数组和集合,而元素的内容和 ...
- struts2学习笔记之十四:使用注解配置Action(不是和spring集成使用)
Struts2支持使用注解配置Action,减少配置文件的配置 Struts2如果要支持注解配置Action,需要插件的支持,导入插件struts2-convention-plugin-2.1.8.1 ...
- jQuery整理笔记文件夹
jQuery整理笔记文件夹 jQuery整理笔记一----jQuery開始 jQuery整理笔记二----jQuery选择器整理 jQuery整理笔记三----jQuery过滤函数 jQuery整理笔 ...
随机推荐
- canvas入门之时钟的实现
canvas 入门之作: 三步实现一个时钟: 直接上效果: step 1 : 背景制作首先制作从1-12的数字: var canvas = document.getElementById('ca ...
- Scala入门系列(五):面向对象之类
定义类 // 定义类,包含field以及method class HelloWorld { private var name = "Leo" def sayHello() { pr ...
- php intval()和floatval()
intval -- 获取变量的整数值 floatval -- 获取变量的浮点值 <?php $a = 26; $b = 4; $a/=$b; echo intval($a);//6 echo f ...
- javascript设计模式——模板方法模式
前面的话 在javascript开发中用到继承的场景其实并不是很多,很多时候喜欢用mix-in的方式给对象扩展属性.但这不代表继承在javascript里没有用武之地,虽然没有真正的类和继承机制,但可 ...
- Netty之二进制文件传输
传输会话简要 客户端发起一个文本请求给服务器端, 服务器端解析里面文本, 返回文件给客户端, 客户端解析文件 服务器端 因为示例文件比较小, 所以没有做分段传输, 而是直接一次性把整个文件byte[] ...
- 小白的Python之路 day2 字符串操作 , 字典操作
1. 字符串操作 特性:不可修改 name.capitalize() 首字母大写 name.casefold() 大写全部变小写 name.center(50,"-") 输出 '- ...
- 【Java入门提高篇】Day9 Java内部类——静态内部类
今天来说说Java中的最后一种内部类--静态内部类 所谓的静态内部类,自然就是用static修饰的内部类,那用static修饰过后的内部类,跟一般的内部类相比有什么特别的地方呢? 首先,它是静态的,这 ...
- Microsoft Visual Studio | VS打开解决方案时加载失败,或者出现错误提示
Microsoft Visual Studio | VS打开解决方案时加载失败,或者出现错误提示 1.加载失败并且输出状态栏也没什么错误提示的话,往往是因为一个低版本VS2010.VS2012等打开了 ...
- JVM垃圾收集相关经常使用參数
參 数 描 述 UseSerialGC 虚拟机执行在Client 模式下的默认值,打开此开关后,使用Serial + Serial Old 的收集器组合进行内存回收 UseParNewGC 打开此开关 ...
- 以pfile或者spfile启动时show parameter pfile的不同结果
普通启动: SQL> show parameter pfile NAME TYPE VALUE ------------------------------------ ----------- ...