springmvc处理器拦截器
处理器拦截器(interceptor)是做什么用的?
想知道处理拦截器做什么用的,你要先了解下处理·流程链·。
前端控制器(dispatcherServlet)接收到请求,通过handleMapping映射处理器获取处理流程链,处理流程链包括,拦截器interceptor和处理器controller。
在没有配置拦截器的情况下,直接由处理器处理请求,如果配置了拦截器,就是拦截器对HandlerController(处理器)方法执行前后的一个处理。
我的理解就是拦截器有点像aop的概念,面向切面的意思。下面演示下springmvc是怎样实现控制器的。
拦截器的使用场景
处理所有请求共性问题:
1、乱码问题:用request,response参数去设置编码;
2、解决权限验证问题(是否登陆,取session对象查看);
拦截器与过滤器的区别
1、拦截器Interceptor依赖于框架容器,基于反射机制,只过滤请求;
2、过滤器Filter依赖于Servlet容器,基于回调函数,过滤范围大;
首先,实现接口HandlerInterceptor,并实现他的三个方法,afterCompletion,postHandler,preHandler。
//Interceptor拦截者
public class MyInterceptor implements HandlerInterceptor {
// 整个请求处理完毕回调方法,返回视图之后调用。
// 常用于作于资源的销毁,流等.类似于析构函数.
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("----------------执行after");
}
// 后处理回调方法,返回视图之前调用。
//modelAndView:可以通过modelAndView参数改变显示的视图,或者修改发往视图的方法
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("--------------------执行post");
}
// 预处理回调方法,实现处理器的预处理。
// 返回true,执行下一个拦截器或者处理器,返回false中断执行。
//Object arg2 表示的是被拦截的请求的目标对象
// 可以做权限校验,在返回false时可以用response做出响应处理。
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("-------------执行pre");
return true;
}
}
然后到spring.xml中注册拦截器(拦截路径,表示拦截哪些请求的url,启用拦截器,表示给哪个类启用这个拦截器)
<!-- 拦截器配置 学习-http://elim.iteye.com/blog/1750680 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截路径 -->
<mvc:mapping path="/myController/*" />
<!-- 启用拦截器 -->
<bean class="com.xxx.util.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
下面是被拦截的类
@Controller
@RequestMapping("/myController")
public class MyController {
@RequestMapping("/toSuccess")
public String toSuccessPage() {
System.out.println("执行mycontroller的success方法");
return "success";
}
}
好了这就是拦截器。
springmvc处理器拦截器的更多相关文章
- SpringMVC处理器拦截器 Interceptor
拦截器概念 Java 里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种 ...
- springmvc中拦截器与springmvc全局异常处理器的问题
最近在做一个练手的小项目, 系统架构中用了springmvc的全局异常处理器, 做了系统的统一异常处理. 后来加入了springmvc的拦截器, 为了一些需求, 在拦截器中的 preHandle 方法 ...
- SpringMVC学习--拦截器
简介 Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理. 拦截器定义 定义拦截器,实现HandlerInterceptor接 ...
- SpringMVC 学习-拦截器 HandlerInterceptor 类
一.拦截器 HandlerInterceptor 类的作用 SpringMVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 二.怎么使用呢? 1. ...
- 转 :关于springmvc使用拦截器
原博客: http://elim.iteye.com/blog/1750680 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的 ...
- 初学springMVC的拦截器
springMvc拦截器的执行顺序! 拦截器的各个方法的作用: /** * 登录验证拦截器 */ public class Intercepter implements HandlerInt ...
- SpringMVC的拦截器讲解
Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 用户可以自己定义一些拦截器来实现特定的功能. 谈到拦截器,还要向大家提一个词 ...
- SpringMVC:拦截器
SpringMVC:拦截器 概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.开发者可以自己定义一些拦截器来实现特定的功能. 过 ...
- springmvc的拦截器
什么是拦截器 java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...
随机推荐
- JS多级树结构写法
效果: 一.布局: <div class="three_tree"> <div class="tree_title_cut"> < ...
- css一个很好用的hover显示
之前一直想在样式实现,hover时显示其他div,今天终于找到了,(*^▽^*) .a悬停时显示.b .a:hover .b { display: block; }
- ref关键字的用法
ref 关键字通过引用(而非值)传递参数. 通过引用传递的效果是,对所调用方法中的参数进行的任何更改都反映在调用方法中. 例如,如果调用方传递本地变量表达式或数组元素访问表达式,所调用方法会将对象替换 ...
- PHP Primary script unknown 终极解决方法
相信很多配置php环境的都遇到过这个恼人的问题: 浏览器访问php文件,返回来 File not found 查看/var/log/nginx/error.log ,有 “Primary script ...
- canvas入门(一)
canvas是HTML 5中非常重要的一个标签,关于它的功能和使用方法在这我就不一一细谈了,毕竟网上相关知识太多,而且自认为如果是我总结那些知识会让读者看的更乱,所以我就不白费力气了,贴上链接:htt ...
- 【转】python安装库
1.打开网址https://pypi.python.org/pypi/numpy,找到安装的python版本对应的numpy版本. 我的python版本是 下载的对应numpy版本是 2.将numpy ...
- Select selectedIndex 属性
定义和用法 selectedIndex 属性可设置或返回下拉列表中被选选项的索引号. 注意: 若允许多重选择,则仅会返回第一个被选选项的索引号. 语法 设置 selectedIndex 属性: sel ...
- 狂欢圣诞节,Azure云邀你一起云端跑酷!
想要速度更快? 希望绕过障碍? 还想安全抵达目的地? …… 平安夜夜游时的各种畅想,不也正是 IT 同事所追求的,更是业务发展的终极目标呀. 好啦,小编说的太多了,这样不好不好.过节休息不谈工作,那就 ...
- sqlalchemy & python & datatables & javascript 中文拼音排序
近期有中文拼单排序需要,查询资料,mysql数据库有convert函数支持 select cname from channel order by convert(cname using gbk); # ...
- xshell里的一些配色方案
只需要把下面的代码复制到记事本中,保存为xcs文件格式,然后在xshell中导入选中就可以换配色方案了,可以自己修改下面的代码 [ubuntu]text(bold)=ffffffmagenta(bol ...