Java⾯试题之《过滤器与的区别》
过滤器与的区别
过滤器,是在java web中,你传⼊的request,response提前过滤掉⼀些信息,或者提前设置⼀些参数,然后再传⼊servlet或者struts的 action 进⾏业务逻辑,⽐如过滤掉⾮法url(不是login.do的地址请求,如果⽤户没有登陆都过滤掉),或者在传⼊servlet或者 struts的action前统⼀设置字符集,或者去除掉⼀些⾮法字符
,是在⾯向切⾯编程的就是在你的service或者⼀个⽅法,前调⽤⼀个⽅法,或者在⽅法后调⽤⼀个⽅法⽐如动态代理就是的简单实现,在你调⽤⽅法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调⽤⽅法后打印出字符串,甚⾄在你抛出异常的时候做业务逻辑的操作。
与过滤器的区别:
1. 是基于java的反射机制的,⽽过滤器是基于函数回调。
2. 不依赖与servlet容器,过滤器依赖与servlet容器。
3. 只能对action请求起作⽤,⽽过滤器则可以对⼏乎所有的请求起作⽤。
4. 可以访问action上下⽂、值栈⾥的对象,⽽过滤器不能访问。
5. 在action的⽣命周期中,可以多次被调⽤,⽽过滤器只能在容器初始化时被调⽤⼀次
6. 可以获取IOC容器中的各个bean,⽽过滤器就不⾏,这点很重要,在⾥注⼊⼀个service,可以调⽤业务逻辑。
执⾏顺序:过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。个⼈认为过滤是⼀个横向的过程,⾸先把客户端提交的内容进⾏过滤(例如未登录⽤户不能访问内部页⾯的处理);过滤通过后,将检查⽤户提交数据的验证,做⼀些前期的数据处理,接着把处理后的数据发给对应的Action;Action处理完成返回后,还可以做其他过程(还没想到要做啥),再向上返回到过滤器的后续操作。
与过滤器使⽤场景:
SpringMVC的处理器类似于Servlet开发中的过滤器Filter,⽤于对处理器进⾏预处理和后处理。
1、⽇志记录:记录请求信息的⽇志,以便进⾏信息监控、信息统计、计算PV(Page View)等。
springboot和过滤器2、权限检查:如登录检测,进⼊处理器检测检测是否登录,如果没有直接返回到登录页⾯;
3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过在进⼊处理器之前记录开始时间,在处理完后记录结束时间,从⽽得到该请求的处理时间(如果有反向代理,如apache可以⾃动记录);
4、通⽤⾏为:读取cookie得到⽤户信息并将⽤户对象放⼊请求,从⽽⽅便后续流程使⽤,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使⽤实现。
5、OpenSessionInView:如hibernate,在进⼊处理器打开Session,在完成后关闭Session。
是AOP的⼀种实现,底层通过动态代理模式完成。
总结:
1.过滤器:所谓过滤器顾名思义是⽤来过滤的,在Java web中,你传⼊的request,response提前过滤掉⼀些信息,或者提前设置⼀些参数,然后再传⼊servlet或者struts的action进⾏业务逻辑,⽐如过滤掉⾮法url(不是login.do的地址请求,如果⽤户没有登陆都过滤掉),或者在传⼊servlet或者struts的action前统⼀设置字符集,或者去除掉⼀些⾮法字符(聊天室经常⽤到的,⼀些骂⼈的话)。filter 流程是线性的, url 传来之后,检查之后,可保持原来的流程继续向下执⾏,被下⼀个filter, servlet接收等.
2.java的主要是⽤在插件上,扩展件上⽐如 hivernate spring struts2等有点类似⾯向切⽚的技术,
在⽤之前先要在配置⽂件即xml⽂件⾥声明⼀段的那个东西。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。