十五、struts2中的拦截器(框架功能核心)
十五、struts2中的拦截器(框架功能核心)
1、过滤器VS拦截器
功能是一回事。
过滤器是Servlet规范中的技术,可以对请求和响应进行过滤。
拦截器是Struts2框架中的技术,实现AOP(面向切面)的编程思想,可以对请求动作进行拦截。
2、自定义拦截器
步骤:
- 编写一个类,直接或间接实现Interceptor接口。(拦截器会驻留内存),一般都选择继承AbstractInterceptor
public
class
MyInterceptor
extends AbstractInterceptor {// 主要的拦截方法
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 放行前执行
System.out.println("前");
// 可以认为是过滤器的放行
String result = invocation.invoke();
// 放行后执行
System.out.println("后");
return
result;}
}
b、需要在struts.xml中进行定义
<package
name="p1"
extends="struts-dafault"><interceptors>
<!-- 自定义拦截器 -->
<interceptor
name="myinterceptor"class="com.itheima.interceptors.MyInterceptor"></interceptor>
</interceptors>
</package>
c、在动作配置中就可以使用了
<action
name="action1"
class="com.itheima.action.DemoAction"><!--默认使用Struts-default.xml文件中的一个名称为defaultStack的拦截栈 -->
<!--由于自己自定义了拦截器,所以默认的拦截器都失效了 -->
<interceptor-ref
name="myinterceptor"></interceptor-ref><result>/success.jsp</result>
</action>
知识点:除了要使用自定义的拦截器之外,还要使用defaultStack,可以这么办
方法一:(自己使用)
<action
name="action1"
class="com.itheima.action.DemoAction"><!--默认使用Struts-default.xml文件中的一个名称为defaultStack的拦截栈 -->
<!--由于自己自定义了拦截器,所以默认的拦截器都失效了 -->
<!--这里拦截器同时使用defaultStack和自定义的拦截器 -->
<interceptor-ref
name="defaultStack"></interceptor-ref><interceptor-ref
name="myinterceptor"></interceptor-ref><result>/success.jsp</result>
</action>
方法二:(大家都用的时候)
<package
name="mydefault"
extends="struts-dafault"
abstract="true"><interceptors>
<!--自定义拦截器 -->
<interceptor
name="myinterceptor"class="com.itheima.interceptors.MyInterceptor"></interceptor>
<!--自定义拦截器栈 -->
<interceptor-stack
name="mydefaultStack"><!-- 引用默认拦截栈 -->
<interceptor-ref
name="defaultStack"></interceptor-ref><!-- 引用自定义拦截器 -->
<interceptor-ref
name="myinterceptor"></interceptor-ref></interceptor-stack>
</interceptors>
<!-- 默认拦截器栈 -->
<default-interceptor-ref
name="myinterceptor"></default-interceptor-ref></package>
<package
name="p1"
extends="mydefault"><action
name="action1"
class="com.itheima.action.Demo1Action"><!-- <interceptor-ref name="mydefaultStack"></interceptor-ref> -->
<result>/success.jsp</result>
</action>
</package>
3、自定义拦截器:能够指定拦截的方法或不拦截的方法
拦截器代码:
public
class
MyInterceptor
extends MethodFilterInterceptor {protected String doIntercept(ActionInvocation invocation) throws Exception {
System.out.println("拦截了!");
return
invocation.invoke();}
}
Struts.xml文件配置:
<package
name="p1"
extends="struts-default"><interceptors>
<!-- 自定义了一个拦截器 -->
<intercepter
name="myInterceptor"
class="com.itheima.interceptor.MyInterceptor"></intercepter>
</interceptors>
<action
name="*"
class="com.itheima.action.Demo1Action"
method="{1}"><!--对当前动作类的所有方法都进行拦截 -->
<interceptor-ref
name="myInterceptor"><!-- 排除不要拦截的动作方法 -->
<param
name="excludeMethods">action2,action1</param><!—-定义需要被拦截的方法-->
<param name="includeMethods">actioin3</param>
</interceptor-ref>
<result>/success.jsp</result>
</action>
</package>
十五、struts2中的拦截器(框架功能核心)的更多相关文章
- (转)SpringMVC学习(十二)——SpringMVC中的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...
- 5.Struts2中的拦截器
拦截器是Struts2中的核心,其自带很多很多的拦截器,这里主要介绍一下自定义拦截器,恩多一半情况下呢?我们不需要使用到自定义的拦截器,Struts2本身已经提 供了很多的拦截器供我们使用,对于自定义 ...
- struts2中的拦截器
一 AOP思想: 面向切面编程的思想 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP ...
- struts2 中 paramsPrepareParamsStack 拦截器
struts2二次参数拦截器内容: 规定了请求的执行顺序 在struts2中,其拦截器为框架精华部分,而二次参数拦截器paramsPrepareParamsStack 对于解决数据回显,对象修改属性 ...
- Struts2中的拦截器详解
exception:异常拦截器,拦截异常aliasservletConfig18nprepare:预备拦截器,这个拦截器就是为了ModelDriven准备对象的,若Action类实现了preparab ...
- struts2中方法拦截器(Interceptor)的中的excludeMethods与includeMethods的理解
http://www.cnblogs.com/langtianya/archive/2013/04/10/3012205.html
- java struts2入门学习---拦截器学习
一.拦截器,拦截器栈 1.拦截器的作用 拦截器本质上和servlet的过滤器是一样的.在struts2中,拦截器能够对Action前后进行拦截,拦截器是一个可插拨的,你可以选择使用拦截器,也可以卸载拦 ...
- springboot(五).如何在springboot项目中使用拦截器
在每个项目中,拦截器都是我们经常会去使用的东西,基本上任一一个项目都缺不了拦截器的使用. 如日志记录.登录验证,session验证等,都需要拦截器来拦截URL请求,那springboot中的拦截器是如 ...
- Struts2笔记——自定义拦截器
需要两个步骤,自定义类实现拦截器接口和在struts.xml注册拦截器 =============================== 1.自定义类实现com.opensymphony.xwork2. ...
随机推荐
- Linux磁盘系统基础知识(转载)
From:http://www.liusuping.com/ubuntu-linux/linux-disk-basic.html 在Linux系统下对于IDE硬盘,每块盘有一个设备名:对应于主板的四个 ...
- PyDev-Python的Eclipse插件安装
PyDev官网:http://marketplace.eclipse.org/node/114 安装方法: 1,打开Eclipse,如果是初次使用,关闭欢迎页面,否则无法按照我说的方法安装. 2,打开 ...
- 使用k-近邻算法改进约会网站的配对效果
---恢复内容开始--- < Machine Learning 机器学习实战>的确是一本学习python,掌握数据相关技能的,不可多得的好书!! 最近邻算法源码如下,给有需要的入门者学习, ...
- 区分DPI、分辨率(PPI)、图像的物理大小、像素宽度
分辨率都知道,越高越清晰. 一.描述分辨率的单位有: dpi(点每英寸).lpi(线每英寸)和ppi(像素每英寸).但只有lpi是描述光学分辨率的尺度的.虽然dpi和ppi也属于分辨率范畴内的单 ...
- VMware虚拟机的CentOS无法上网的解决方法
前言:由于Linux下很多软件安装必须网络环境下进行,因此,对于如何在VMware下进行上网,我折腾了至少三天,今天上午,也即五一劳动节,终于搜到一遍技术文章,经过自己实践,VMware下Linux的 ...
- 使用maven构建一个helloworld maven项目
1.下载maven http://maven.apache.org/ 选择一个较新版本下下来 2.配置m2_home环境变量 先解压,新建用户变量m2_home,将bin目录添加到path变量中 3. ...
- JAVA 中关于String的特性
一.初始化String的两种方式 String str1 = "hello"; String str2 = new String("hello"); 第一种方式 ...
- Java SE 第二十二讲----接口interface
1.接口:interface:接口的地位等同于class,接口中的所有方法都是抽象方法.在声明接口中的方法的时候,可以使用abstract关键字也可以不使用.通常情况下,都会省略掉abstract关键 ...
- div滚动到页面顶端后固定住
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title> ...
- POJ 2104 【主席树】【区间第K大】
#include<stdio.h> #include<algorithm> #include<string.h> #define MAXN 100010 #defi ...