zoukankan      html  css  js  c++  java
  • 过滤器&拦截器

    Filter:(Servlet)
    主要用途:
    1.在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest(检查和修改HttpServletRequest头和数据)
    2.在HttpServletResponse到达客户端之前,拦截客户的HttpServletResponse(检查和修改HttpServletResponse头和数据)
    例如:设置字符集,控制权限,控制转向,做一些业务逻辑判断等

    工作原理:只要你在web.xml文件配置好要拦截客户端请求,它都会帮你拦截到;
    它随你的web应用启动而启动,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或者重新部署的时候才销毁

    创建Filter(实现了下面的接口):
    1.创建Filter处理类
    2.web.xml文件中配置Filter

    javax.servlet.Filter接口中的三个方法:
    1.void init(FilterConfig config):用于完成Filter的初始化.
    2.void destory():用于Filter销毁之前,完成某些资源的回收
    3.void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):实现过滤功能,该方法就是对每个请求及响应增加的
    额外处理.调用了chain.doFilter(),执行该方法之前(对用户的请求进行预处理);执行该方法之后(对服务器响应进行后处理)

    Intercepter:(Spring)
    说明:拦截器是面向切面编程的应用,是AOP的一种实现策略,是基于JAVA反射机制!!!(就是在你的service或者一个方法前或后调用一个方法(即各种通知))
    应用:在springMVC中定义一个Intercepter的两种方式(其中的三个方法是链式调用)
    方式一:定义的Intercepter类要实现或者继承spring的HandlerIntercepter接口
    方式二:定义的Intercepter类要实现或继承spring的WebRequestInterceptor接口


    (Spring的Interceptor和Servlet的Filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限的检查.日志的记录)
    两者的区别:
    Filter是Servlet规定规范的,是Servlet容器支持,定义在web.xml;-----javax.servlet----只在Servlet前后起作用,是被Servlet调用的,不能使用Spring容器
    (Interceptor)是Spring容器内的,是Spring框架支持的-----org.springframework.web.servlet-----既可以用于web程序,也可以用于Application/Swing程序中
    在Spring架构的程序中,要优先使用拦截器.几乎所有Filter能够做的事情,interceptor都能轻松实现

    两者执行顺序:
    过滤前----拦截前----Action处理----拦截后----过滤后
    拦截器的执行顺序:
    1.请求到达DispatcherServlet
    2.DispatcherServlet发送到Interceptor,执行preHandle
    3.请求到达Controller
    4.请求结束后,postHandle执行

    总结:
    过滤器:在java web中,你传入的request/response提前过滤掉一些信息,或者提前设置一些参数,然后在传入servlet或者struts的action进行业务逻辑,
    比如:过滤掉非法url(不是login.do的地址请求,如果用户没有登录过都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除
    一些非法字符(聊天室的一些骂人的话),filter流程是线性的,Url传来之后,检查之后,可以保持原来的流程继续向下执行,被下一个filter/servlet接收
    拦截器:主要用在插件上,面向切面的技术,在使用前要在配置文件即xml文件里声明一下

  • 相关阅读:
    个人作业8 单词统计
    个人作业7 第一阶段SCRUM冲刺(八)
    大二暑假周总结(二)
    大二暑假周总结(一)
    梦断代码-阅读笔记03
    个人课程总结
    梦断代码-阅读笔记02
    大二下周总结(16)
    梦断代码-阅读笔记01
    最长英语单词链
  • 原文地址:https://www.cnblogs.com/slfeng/p/11070682.html
Copyright © 2011-2022 走看看