什么是拦截器?
拦截器,一般指的是在浏览器页面向服务端发出请求后,拦截誷求�EBC�对%%8��求进�28C一�s�列뚄操作�%%B或�%8%�在�09C�务器连回�9B0据�%%7�,在数5E6���P达滏览器界%%9���%8%,�D9A一些操뽜。63Cbr />%E%��截器�%%0般�%9%�于�49D�限验诎、�AB1码�%%4�理等操7E4��
拦�%%8�器%E%��基7E6��工作功理�FBC�
SpringMVC可以%%9���%8%配�7AE过滤器띥解BE5���%%1码问题<7r />①拦�%%A器�%9%�基�8BA�java的反�%%0�机%E%��的5EF��而过滤器是基于函数回调。
②拦截器依赖于框架容器,基于反射机制,只过滤请求。过滤器依赖与servlet容器。
③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
⑥拦截器可以获取IOC容器中的各个bean。而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑
拦截器的实现:
1.实现HandlerInteceptor接口
2.将拦截器注册到SpringMVC框架中----跟Struts2一样,都需要在配置文件里配置
3.配置拦눪器的拦截规则(拦截哪些,不拦截哪些)
拦截器方法介绍:
preHandle:是否需要将当前的请求拦截下来,(返回true请求继续运行,返回false请求终止(包括action层也会终止),Object arg代表被拦截的请求的目标对象。)
-postHandle()方法的ModelAndView arg可以改变显示的视图或修改发往视图的信息方法。
afterCompletion:方法表示视图显示之后在执行该方法。(一般用于资源的销毁)
拦截器的其他实现方式:实现webRequestInterceptor接口。。。弊端:不能终止请求
拦截器的使用场景:解决乱码问题,解决权限验证问题
Struts2中大多数核心功能是通过拦截器实现的,每个拦截器完成某项功能。例如:数据转移。类型转换,数据校验
拦截器方法在Action执行之前或者之后执行。
拦截器栈,相当于多个拦截器的组合。
拦截器工作原理:
拦截器的执行过程是一个递归的过程,
过滤器的执行流程和拦截器几乎一样
自定义拦截器:
方式一:实现Interceptor接口(不常用)
--void init():初始化拦截器所需资源
--void destroy() 释放在init()中分配的资源
--String intercept(ActionInvocation ai)throws Exception //进行真正意义上的拦截操作
实现拦截器功能
利用ActionInvocation参数获取Action状态
返回result字符串作为 逻辑视图
方式二:继承AbstractInterceptor类
--提供init()和destroy()方法的空实现
--只需要实现intercept方法即可
实现步骤:
1.创建拦截器
2.在配置文件struts.xml中定义拦截器并引用它
String result=invocation.invoke();//调用ActionInvocation中的下一个拦截器,如果是最后一个,就执行目标Action
Struts2内建拦截器:
params拦截器
--负责将请求参数设置为Action属性
statisParams拦截器
---将配置文件中action元素的子元素param叭82数设置为Action属性%�r />
servletConfig拦ƈ�器
---将溞于Servlet Api的各种对踡注入到Action,必须5E5��现对应接口,%%6��如HttpServletRequest
fileUpload拦截器
&nCsp; --对文件上传揞供支持,将文件6E5��元数据设置到%%5��应的Action属性
A3Cbr />
exception拦截器63Cbr /> ---捕获异�%%8,并且将异常昮射到用户自定义5E7��错误页面
validation拦截器 ---通过验%%8��框架进行数据验证
�r80发权限验证拦�%%A器
在Action中创建session对象,获取表单提交的用户信息,在拦截器类中通过判断session对象中有没有用户信息判断用户是否已登录,如果登录了才能访问后台管理页面