struts2之拦截器
1. 为什么需要拦截器
早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足、可扩展性降低,
Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于系统的解耦.
2. 什么是拦截器
Struts 2大多数核心功能是通过拦截器实现的,每个拦截器完成某项功能
拦截器用于拦截那些请求action的请求,可以在请求目标前执行一些代码,也可以在请求目标执行完毕后再执行一段代码.一般用于权限控制等
2.1 拦截器栈
从结构上看,拦截器栈相当于多个拦截器的组合
在功能上看,拦截器栈也是拦截器
2.2 struts2系统拦截器
params拦截器
负责将请求参数设置为Action属性
servletConfig拦截器
将源于Servlet API的各种对象注入到Action
fileUpload拦截器
对文件上传提供支持
exception拦截器
捕获异常,并且将异常映射到用户自定义的错误页面
validation拦截器
调用验证框架进行数据验证
workflow拦截器
调用Action类的validate(),执行数据验证
struts-default.xml中定义一个defaultStack拦截器栈,并将其指定为默认拦截器
只要在定义包的过程中继承struts-default包,那么defaultStack将是默认的拦截器
3. struts2大致执行流程

由上图可知,当一个请求到来时,首先经过核心过滤器,也就是我们在web.xml配置的 StrutsPrepareAndExecuteFilter这个filter,然后会执行一系列拦截器,最后执行action,执行完毕返回一个reuslt结果码,根据result来构建一个HttpServletResponse响应给客户端.
2. 自定义拦截器
1. 写一个拦截器类,此类可以实现Interceptor接口,也可以实现AbstractInterceptor抽象类.
void init():初始化拦截器所需资源,此方法在服务器启动时执行!!
void destroy():释放在init()中分配的资源,此方法在服务器关闭时执行!!
String intercept(ActionInvocation ai) throws Exception :实现拦截器功能利用ActionInvocation参数获取Action状态,返回结果码(result)字符串. 此方法在拦截到请求时执行
注意:继承AbstractInterceptor抽象类只提供了 String intercept(ActionInvocation ai) throws Exception 方法,init()和destroy()默认为空实现,所以如果仅仅需要做拦截操作,那么推荐继承这个抽象类.
public class AuthorizationInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation invocation) throws Exception{
//获取用户会话信息
Map session = invocation.getInvocationContext().getSession();
User user = (User)session.get("login");
if (user == null) {
//终止执行,返回登录页面
return Action.LOGIN;
} else {
//继续执行剩余的拦截器和Action
return invocation.invoke();
}
}
}
2. 在配置文件配置
<package name="renthouse" extends="struts-default">
<interceptors>
<!--定义权限验证拦截器-->
<interceptor name="myAuthorization"
class="cn.jbit.houserent.interceptor.AuthorizationInterceptor">
</interceptor>
<!--定义拦截器栈-->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"/> //引用struts2默认拦截器栈
<interceptor-ref name="myAuthorization"/> //引用我们自定义的拦截器
</interceptor-stack>
</interceptors>
<!-- 定义默认拦截器 -->
<default-interceptor-ref name="myStack"/>
...
</package>

struts2之拦截器的更多相关文章
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- struts2总结六: Struts2的拦截器
一.Struts2的系统结构图
- Struts2使用拦截器完成权限控制示例
http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求: 要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...
- Struts2自定义拦截器Interceptor以及拦截器登录实例
1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...
- Struts2【拦截器】就是这么简单
什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Str ...
- 【struts2】拦截器基础
1)拦截器是什么? 拦截器(Interceptor)是Struts2最强大的特性之一,它是一种可以让你在Action执行之前和Result执行之后进行一些功能处理的机制.来回顾一下官方给出的Strut ...
- JavaWeb框架_Struts2_(三)---->Struts2的拦截器
2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...
- (转)Struts2的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/68648101 Struts2的拦截器 拦截器的概述 拦截器,在AOP(Aspect-Orien ...
- 通俗易懂之SpringMVC&Struts2前端拦截器详解
直接进入主题吧!一,配置Struts2的拦截器分两步走1配置对应的拦截器类:2在配置文件Struts.xml中进行配置拦截器同时在Strust2中配置拦截器类有三种方法1实现Interceptor接口 ...
随机推荐
- 极光开发者服务推出统计产品JAnalytics
极光以提供更加全面的开发者服务为目标,利用极光推送的数据和网络优势结合更丰富的功能,推出了极光统计(英文:JAnalytics).至此,极光开发者服务更加丰富.完善了. 极光统计有独立的统计 SDK, ...
- Android--多线程之Handler 前言
前言 Android的消息传递机制是另外一种形式的“事件处理”,这种机制主要是为了解决Android应用中多线程的问题,在Android中不 允许Activity新启动的线程访问该Activity里的 ...
- ThinkPhp模板转Flask模板
Template Converter 网上的PHP资源很多,项目要用Python,所以想起做一个模板转换器,从ThinkPhp转成Flask的Jinja模板. 直接指定两个目录,将目录下的模板文件转换 ...
- Servlet中过滤器的执行流程
- 你真的了解volatile吗,关于volatile的那些事
很早就接触了volatile,但是并没有特别深入的去研究她,只有一个朦胧的概念,就是觉得 用她来解决可见性的,但可见性又是什么呢? 最近经过查阅各种资料,并结合自己的思考和实践,对volatile有了 ...
- 腾讯云数据库团队:MySQL数据库的高可用性分析
作者介绍:易固武,腾讯高级工程师,参与腾讯账号安全建设,腾讯数据仓库(TDW)优化改造,腾讯云数据库等项目,对大规模分布式存储和计算系统有浓厚的兴趣和经历 MySQL数据库是目前开源应用最大的关系型数 ...
- jenkins gradle 编译遇到tomcat异常
使用gradle在jenkins 上构建的时候遇到 进行构建的时候报"Could not load Logmanager org.apache.juli.ClassLoaderLogMana ...
- react router路径的匹配原则
路由匹配规则是从上到下执行,一旦发现匹配,就不再其余的规则了. (1):paramName :paramName匹配URL的一个部分,直到遇到下一个/.?.#为止.这个路径参数可以通过this.pro ...
- windows phone 8.1开发SQlite数据库操作详解
原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...
- 解决子元素用css float浮动后父级元素高度自适应高度
1.在最后一个子元素后面清除浮动 2.父元素加over-flow:hidden;(副作用:子元素定位不能超出父元素的范围) 3.父元素也一样浮动(最笨的方法): 4.子元素使用inline-block ...