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 ...
随机推荐
- Google 收购 Android 十周年 全面解读Android现状
--訪传智播客Android学科教学总监传智·平一指 Android以前是一家创立于旧金山的公司的名字,该公司于2005年8月份被Google收购,并从此踏上了飞速发展的道路.经过十年的发展,它已经发 ...
- 两名技术人员,历经8小时Piranha Games成功集成Xsolla
w=580&h=304" alt="" width="580" height="304" style="max- ...
- 一个完全摆脱findViewById的自动绑定库
代码地址如下:http://www.demodashi.com/demo/13504.html 问题 先来看一个正常的写法: <?xml version="1.0" enco ...
- 【PHP】组合条件搜索SQL
前端html多个搜索条件组合 后台一个sql语句,很方便和简洁:仅提供思路. 也可以配合着进行分页操作,非常赞~
- [1-1] 把时间当做朋友(李笑来)Chapter 1 【心智的力量】 摘录
今天开了读书笔记这一专题,主要是对自己今后读的书有一个小小的记录,也为解决自己读书多年的存在的一些习惯的问题. 打小就喜欢书,可能最早的书是家人买的看图识动物.还记得七八岁时见书摊上的书时赖着不走央求 ...
- oracle 复杂的查找用法
[第一题]: 找到员工表中工资最高的前三名,要求按如下格式输出(第一步部分):以及oracle查询结果指定分页显示的方法(第二部分). ——涉及Top-N分析问题. 一般不在子查询中使用order b ...
- property 与 attribute 的区别?
一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加性质. 属性: class TimePeriod { private double seconds; public double Ho ...
- C#代码覆盖率 -vsinstr和OpenCover
最近接触的项目涉及到C#开发的应用,测试过程中我们需要去分析C#的代码覆盖率,问了一些人,在网上也搜了一些,零碎的找到很多资料,但是都不是很完整,实际使用的过程中还是走了不少弯路.到现在为止,有两种可 ...
- Sql添加测试数据
--建测试表 CREATE TABLE T_UserInfo ( Userid varchar(20), UserName varchar(20), RegTime datetime, Tel va ...
- 最全面的 Sublime Text 使用指南
最全面的 Sublime Text 使用指南 摘要(Abstract) 本文系统全面的介绍了Sublime Text,旨在成为最优秀的Sublime Text中文教程. 前言(Prologue) ...