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 ...
随机推荐
- SQLSERVER常用计数器
复制下面全部--开始--运行--profmon.exe--性能监视器--粘贴计数器列表 <OBJECT ID="DISystemMonitor1" WIDTH="1 ...
- SSH面试题目
一简答 spring工作原理 为什么要用spring 3.请你谈谈SSH整合 4.介绍一下Spring的事务管理 5.Struct2基本流程 6.在Hibernate应用中Java对象的状态有哪些? ...
- oracle 使用REGEXP_SUBSTR正则表达式拆分字符串
SELECT REGEXP_SUBSTR ('first field, second field , third field', '[^,]+', 1,rownum) FROM DUAL CONNEC ...
- angularJS 状态样式绑定
angularJS提供输入框不同状态下的样式绑定 输入框有4种状态 ng-model 指令可以为应用数据提供状态值(invalid, dirty, touched, error): <!DOCT ...
- 补知识:EntityFramework Core映射关系详解
前言 本节我们回归下EF Core基础,来讲述EF Core中到底是如何映射的,废话少说,我们开始. One-Many Relationship(一对多关系) 首先我们从最简单的一对多关系说起,我们给 ...
- centos终端显示-bash-4.2#解决方法
登录linux系统过后,发现显示的是-bash-4.2# 而不是root@主机名 + 路径的显示方式,发生这种情况的原因是根目录下缺失几个配置文件,从默认配置中拷贝过来就可以解决了: cp /etc/ ...
- Xcode中利用git源代码版本号控制
git是一个版本号控制系统,能够通过命令行来调用,也有专门的桌面软件.这里主要介绍在Xcode中怎样利用git来进行版本号的控制. 一.创建git源 从Xcode5開始引入了使用git的一些新特性.将 ...
- 删除MYSQL账号多于的空用户
默认情况下,mysql安装好之后,会存在匿名用户,也可以叫空用户,输入mysql之后直接回车便可进入mysql. 该匿名用户具有一定的权限,通过SHOW DATABASES;可以查看到informat ...
- asp.net,cookie,写cookie,取cookie(转载)
Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...
- thread_为什么多线程是个坏主意
转 http://ifeve.com/why-threads-bad/ 在 Unix编程艺术 中,提到了尽量避免多线程编程模型, 认为这样只会增加复杂度, 提倡使用多进程, 这样本质上就可以避免多线程 ...