Struts2-学习笔记系列(14)-拦截器
6.1对action 的拦截
自定义拦截器:
public class MyInterceptor extends AbstractInterceptor {
private String name;
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
//获取被拦截的action实例
LoginAction action = (LoginAction) actionInvocation.getAction();
System.out.print(name + " 拦截器开始执行:" + new Date());
long start = System.currentTimeMillis();
//执行该拦截器的下一个拦截器
//然后调用action 的执行方法
String result = actionInvocation.invoke();
System.out.print(name + " action执行完成后:" + new Date());
long end = System.currentTimeMillis();
System.out.print("执行完该action的时间为:" + (end - start) + "毫秒");
return result;
}
public void setName(String name) {
this.name = name;
}
}
若是需要在拦截器中实现init和destory方法,则需要实现interceptor
引用拦截器:
<package name="lee" extends="struts-default">
<interceptors>
<interceptor name="zcx" class="interceptors.MyInterceptor">
<param name="name"></param>
</interceptor>
</interceptors>
<action name="login" class="zcx.controller.LoginAction">
<!-- 配置名为input的逻辑视图,当转换失败后转入该逻辑视图 -->
<result name="input">/WEB-INF/content/input.jsp</result>
<result>/WEB-INF/content/welcome.jsp</result>
<result name="error">/WEB-INF/content/welcome.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="zcx">
<param name="name">改名后的拦截器</param>
</interceptor-ref>
</action>
<action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
</package>
需要注意的是,当在struts文件中显示配置了拦截器,则默认的拦截器不生效。因此,需要在struts中先指定默认拦截器。若是遇到后面有同名拦截器,则会将默认的覆盖.
指定默认拦截器
<interceptor-ref
name="defaultStack"></interceptor-ref>
6.2对方法的拦截
public class MyMethondInterceptor extends MethodFilterInterceptor {
private String name;
@Override
protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
//获取被拦截的action实例
LoginAction action = (LoginAction) actionInvocation.getAction();
System.out.print(name + " 拦截器开始执行:" + new Date());
long start = System.currentTimeMillis();
//执行该拦截器的下一个拦截器
//然后调用action 的执行方法
String result = actionInvocation.invoke();
System.out.print(name + " action执行完成后:" + new Date());
long end = System.currentTimeMillis();
System.out.print("执行完该action的时间为:" + (end - start) + "毫秒");
return result;
}
public void setName(String name) {
this.name = name;
}
}
<package name="lee" extends="struts-default">
<interceptors>
<interceptor name="zcx" class="interceptors.MyMethondInterceptor">
<param name="name">嘻嘻</param>
</interceptor>
</interceptors>
<action name="login" class="zcx.controller.LoginAction">
<!-- 配置名为input的逻辑视图,当转换失败后转入该逻辑视图 -->
<result name="input">/WEB-INF/content/input.jsp</result>
<result>/WEB-INF/content/welcome.jsp</result>
<result name="error">/WEB-INF/content/welcome.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="zcx">
<param name="name">改名后的拦截器</param>
<!--指定execute不需要被拦截-->
<param name="excludeMethods">execute</param>
<param name="includeMethods">execute</param>
</interceptor-ref>
</action>
<action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
</package>
excludeMethonds:不拦截execute方法,后一个相反
<param name="excludeMethods">execute</param>
<param name="includeMethods">execute</param>
6.3拦截器执行顺序
在action控制方法执行之前,拦截器配置在前面那个先起作用;action控制方法执行之后,配置在后面的拦截器先起作用
6.4覆盖拦截器栈的参数
如果需要在使用拦截器栈时直接覆盖某个拦截器的属性值,则在指定需要被覆盖的属性时,不能只指定属性名,必须加上该属性属于的拦截器名:<拦截器>.<属性名>
Struts2-学习笔记系列(14)-拦截器的更多相关文章
- 【Struts2学习笔记-6--】Struts2之拦截器
简单拦截器的使用 拦截器最基本的使用: 拦截方法的拦截器 拦截器的执行顺序 拦截结果的监听器-相当于 后拦截器 执行顺序: 覆盖拦截器栈里特定拦截器的参数 使用拦截器完成-权限控制 主要完成两个功能: ...
- Struts2学习笔记(十)——自定义拦截器
Struts2拦截器是基于AOP思想实现的,而AOP的实现是基于动态代理.Struts2拦截器会在访问某个Action之前或者之后进行拦截,并且Struts2拦截器是可插拔的:Struts2拦截器栈就 ...
- Struts2学习笔记04 之 拦截器
一.创建拦截器组件 1. 创建一个类,实现Interceptor接口,并实现intercept方法 2.注册拦截器 3.引用拦截器 二.拦截器栈 预置拦截器: 默认引用拦截器 拦截器调用顺序: Fil ...
- SpringBoot学习笔记:自定义拦截器
SpringBoot学习笔记:自定义拦截器 快速开始 拦截器类似于过滤器,但是拦截器提供更精细的的控制能力,它可以在一个请求过程中的两个节点进行拦截: 在请求发送到Controller之前 在响应发送 ...
- [原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- struts2框架学习笔记6:拦截器
拦截器是Struts2实现功能的核心部分 拦截器的创建: 第一种: package interceptor; import com.opensymphony.xwork2.ActionInvocati ...
- Struts2学习:interceptor(拦截器)的使用
对于需要登陆验证.权限验证等功能的网站,每一次请求,每一个action都写一段验证的代码,未免显得冗余且不易维护.struts2提供了拦截器interceptor,为这些页面提供一个切面,或者说公共组 ...
- Struts2学习第4天--拦截器
第1章 Struts2_day04笔记 1.1 上次课内容回顾 l OGNL表达式 n OGNL的概述 u OGNL:对象图导航语言,是一门功能强大的表达式语言. n OGN ...
- Struts2学习第四天——拦截器及文件上传
1.概述 Struts2的很多核心功能都是由拦截器完成的. 拦截器很好的实现了AOP的编程思想,在动作的执行之前和结果的返回之后,做拦截处理. 2.struts2的默认拦截器栈 3.自定义拦截器 St ...
随机推荐
- nlogn的最长不下降子序列【tyvj1254挑选士兵】
var a,d:Array[-..]of longint; i,n,m,k,l:longint; function erfen(x:longint):longint; var mid,h,t:long ...
- Java 并发容器(转)
转自:https://blog.ouyangsihai.cn/%2Fjava-gao-bing-fa-zhi-bing-fa-rong-qi-xiang-jie-cong-ru-men-dao-cha ...
- 【Weiss】【第03章】练习3.6:有序多项式相加
[练习3.6] 编写将两个多项式相加的函数.不要毁坏输入数据.用一个链表实现. 如果这两个多项式分别有M项和N项,那么你程序的时间复杂度是多少? 两个按幂次升序的多项式链表,分别维护一个指针. 幂较小 ...
- LeetCode | 707. 设计链表
设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针/引用.如果要使用双向链表,则还需要一个属性 ...
- Cisco 模拟配置
本次模拟:采用Cisco Packet Tracer 软件,进行cisco网络设备的模拟.可以实现CLI界面命令配置,同实际交换机一样. 1.同一VLAN 可以互相访问,不同VLAN 不能访问 PC0 ...
- POJ1270 toposort+DFS+回溯
题目链接:http://poj.org/problem?id=1270 这道题其实就是求所有满足条件的topo序,我们考虑到给定的字符是确定的,也就是他们的长度都是一样的,所以为了得到所有的情况,我们 ...
- hdu2642二维树状数组,单点修改+区间查询
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/2642/ 代码如下: #include<bits/stdc++.h> using namespace ...
- CF1327A Sum of Odd Integers 题解
原题链接 简要题意: 多组数据,问能否把 \(n\) 分为 \(k\) 个 不同的 正奇数之和. 盲猜数学结论题. 只要考虑两个问题: \(n\) 的大小是否足够. \(n\) 的奇偶性是否满足. 对 ...
- HDU-1251 统计难题(我就是不用字典树)
统计难题 ?戳这里可以前往原题 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为 ...
- H3C路由器地址池租期时间H3CMSR830-6BHI-WiNet
H3C路由器地址池租期时间H3CMSR830-6BHI-WiNet 设备H3CMSR830-6BHI-WiNet 先输入dis dhcp server tree pool 查看地址池名称,然后 < ...