java-web 过滤器 & 监听器 & 拦截器
Tomcat 的容器分为四个等级。真正管理 Servlet 的容器是 Context 容器,一个 Context 对应一个 Web 工程。在 Tomcat 的配置文件里能够非常easy发现这一点。例如以下:
Context 配置參数
<Context path="/projectOne " docBase="D:\projects\projectOne"
reloadable="true" />
servlet规范
servlet/filter/listener/interceptor差别与联系
http://blog.csdn.net/sundenskyqq/article/details/8549932
http://hejiajunsh.iteye.com/blog/1776571
application:上下文对象,是由容器创建和初始化的,它的范围是整个的web应用,并且整个web应用中仅仅会有一个 application对象存在。当webserver关闭时。就会将application对象销毁
session:是一种保存上下文信息的机制,它是针对每一个会话的。它是放在server端。通过SessionId区分的,在浏览器和server结束后,都会将session销毁
request对象:是当client发送请求时,容器就会创建一个ServletRequest对象,来进行封装请求数据,同一时候会创建一个servletResponse对象来进行封装对应数据,当结束封装请求之后,就会销毁该对象
WEB监听器。就是监听这3个对象的创建,销毁,和它们的属性发生的变化
用途:统计在线人数、统计訪问量、系统变量初始化、Spring
使用:
1. 创建 继承对应的接口
2. web.xml中注冊
一个application、HttpSession、ServletRequest都能够有多个监听器
ServletContext 全局一个,使用context-Parm的全局參数。容器启动结束时使用。
HttpSession 多个,HttpSessionListener能够有多个。创建销毁时运行
Web.xml中设置session超时等属性
对监听域中的属性(Attribute之间传值,放在request域中,parameter是參数)增删监听
HttpSession 绑定就是setAttribute() 钝化活化是由于session太多了,内存不够用。序列化到文件。重载时自己主动载入。
1. 域对象
session/request/application
2.事件
创建/销毁/属性变更/servlet状态改变
3.顺序
监听器->过滤器->Servlet
PS:Webx、Struts都通过filter注入。由于这样够灵活
- 通过控制对chain.doFilter的方法的调用,来决定是否须要訪问目标资源。
比方,能够在用户权限验证等等。推断用户是否有訪问某些资源的权限。有权限放行,没权限不运行chain.doFilter方法。
- 通过在调用chain.doFilter方法之前,做些处理来达到某些目的。
比方,解决中文乱码的问题等等。能够在doFilter方法前,运行设置请求编码与响应的编码。甚至能够对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写对应的request.getParameter方法)。 - 通过在调用chain.doFilter方法之后,做些处理来达到某些目的。
比方对整个web站点进行压缩。在调用chain.doFilter方法之前用类A对response对象进行封装装饰,重写getOutputStream和重写getWriter方法。在类A内部中,将输出内容缓存进ByteArrayOutputStream流中,然后在chain.doFilter方法运行后,获取类A中ByteArrayOutputStream流缓存数据,用GZIPOutputStream流进行压缩下。
过滤器
过滤器的运行流程依照filter-mapping的顺序,当中filterChain是兴许要运行的过滤器
Init和destory 是容器初始化/销毁时运行,仅一次。
过滤器的运行流程:
运行第一个过滤器的chain.doFilter()之前的代码——>第二个过滤器的chain.doFilter()之前的代码——>……——>第n个过滤器的chain.doFilter()之前的代码——>所请求servlet的service()方法中的代码——>所请求servlet的doGet()或doPost()方法中的代码——>第n个过滤器的chain.doFilter()之后的代码——>……——>第二个过滤器的chain.doFilter()之后的代码——>第一个过滤器的chain.doFilter()之后的代码。
拦截器
拦截器是指通过统一拦截从浏览器发往server的请求来完毕功能的增强
使用场景:解决请求的共性问题(乱码问题、权限验证问题)
拦截器的基本工作原理
1.SpringMVC能够通过配置过滤器来解决乱码问题
2.拦截器的工作原理和过滤非常类似
拦截器的实现
1.编写拦截器类实现HandlerInterceptor接口
三个必须实现的方法
preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2)
(第一步:在请求被处理之前进行调用 是否须要将当前的请求拦截下来,假设返回false,请求将会终止。返回true,请求将会继续
Object arg2表示拦截的控制器的目标方法实例)
postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2。ModelAndView arg3)
(第二步:在请求被处理之后进行调用ModelAndView arg3是指将被呈如今网页上的对象,能够通过改动这个对象实现不同角色跳向不同的网页或不同的消息提示)
afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,Exception arg3)
(第三步:在请求结束之后调用 一般用于关闭流、资源连接等 比較少用)
2.将拦截器注冊进SpringMVC框架中
<mvc:interceptors>
<bean class="xxx"></bean>
</mvc:interceptors>
3.配置拦截器的拦截规则
配置部分路径请求
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/xxx" /> <!-- 仅仅拦截匹配的路径 -->
<bean class="xxx"></bean>
</mvc:interceptor>
</mvc:interceptors>
java-web 过滤器 & 监听器 & 拦截器的更多相关文章
- java中过滤器、监听器、拦截器的区别
1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的actio ...
- springBoot(6)---过滤器,监听器,拦截器
过滤器,监听器,拦截器 一.理解它们 看里十几篇博客,总算有点小明白,总的来讲,两张图可以让我看明白点. 通过两幅图我们可以理解拦截器和过滤器的特点 1.过滤器 过滤器是在请求进入tomcat容器后, ...
- SpringBoot | 第七章:过滤器、监听器、拦截器
前言 在实际开发过程中,经常会碰见一些比如系统启动初始化信息.统计在线人数.在线用户数.过滤敏高词汇.访问权限控制(URL级别)等业务需求.这些对于业务来说一般上是无关的,业务方是无需关系的,业务只需 ...
- 小白的springboot之路(十三)、过滤器、监听器、拦截器
0.前言 过滤器.监听器.拦截器在实际开发中经常需要用到,下面我们来介绍一下spring boot中如何使用: 一.------ 过滤器 ----- 1.作用: 过滤器是客户端与服务器资源文件之间的一 ...
- Java 过滤器、监听器、拦截器的区别
原文:http://www.360doc.com/content/10/0601/09/495229_30616324.shtml 1.过滤器 Servlet中的过滤器Filter是实现了ja ...
- java过滤器、监听器、拦截器机制
一.过滤器 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ...
- Servlet,过滤器,监听器,拦截器的区别
1.过滤器 Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml ...
- SpringBoot中过滤器、监听器以及拦截器
属于javax.servlet所提供的Api 拦截器原理 简单来讲是通过动态代理实现,被访问的目标方法通过代理类(方法)来执行,这样我们就可以在真正要执行的方法执行前.后做一些处理: 通过拦截器这种方 ...
- servlet,过滤器,监听器,拦截器的区别
一.目录 1.概念 2.生命周期 3.职责 4.执行过程 二.内容 概念 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性, 可以动态生成web页面它 ...
- SpringBoot09 自定义servlet、注册自定义的servlet、过滤器、监听器、拦截器、切面、webmvcconfigureradapter过时问题
1 servlet简介 servlet是一种用于开发动态web资源的技术 参考博客:servlet基础知识 httpservlet详解 2 在springboot应用中添加servlet sp ...
随机推荐
- HTML5中标记与特殊属性
不允许写结束标记的元素有(只允许<元素/>): area.base.br.col.command.embed.hr.img.input. keygen.link.meta.param.so ...
- Redis源代码解析:13Redis中的事件驱动机制
Redis中.处理网络IO时,採用的是事件驱动机制.但它没有使用libevent或者libev这种库,而是自己实现了一个很easy明了的事件驱动库ae_event,主要代码只400行左右. 没有选择l ...
- struts2 ValueStack的作用
Value Stack的作用: 1. 可以作为一个数据中转站 2. 用于在前台-后台之间传递数据,最典型的做法就是struts2标签也ognl表达式的结合.我用得最多的就是数据 ...
- mongodb - mongostat说明
# ./mongostat insert query update delete getmore command % dirty % used flushes vsize res qr|qw ar|a ...
- Spring学习笔记(四)-- Spring事务全面分析
通过本系列的文章对Spring的介绍,我们对Spring的使用和两个核心功能IOC.AOP已经有了初步的了解,结合我个人工作的情况,因为项目是金融系 统.那对事务的控制是不可缺少的.而且是很严格的控制 ...
- android Volley 上传文件上传图片
Volley不解释了吧, android 官方的一个网络请求库. 源码的地址在: git@github.com:com314159/VolleyMultiPartRequest.git 上面的是ssh ...
- LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt 解决方法: 项目--> ...
- SQL SERVER 2005中利用XML对字符串拆分的方法
1.常规方法(可运用于SQL SERVER 2000中) DECLARE @str varchar(1000) DECLARE @idoc int; DECLARE @doc xml;set @str ...
- Macbook小问题
Macbook小问题 有时候 AppStore 和 Safari,QQ等 无法上网,但 chrome 却是正常的.解决办法:终端输入如下命令,其实是在 kill 掉网卡进程. sudo killall ...
- Django-model进阶(中介模型,查询优化,extra,整体插入)
QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. ? 1 >>> Entry.objects.al ...