关于拦截器

来源:互联网 发布:流浪诗人知乎 编辑:程序博客网 时间:2024/05/21 05:43

什么是拦截器?
拦截器,一般指的是在浏览器页面向服务端发出请求后,拦截誷求�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对象中有没有用户信息判断用户是否已登录,如果登录了才能访问后台管理页面


0 0
原创粉丝点击