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注入。由于这样够灵活

  1. 通过控制对chain.doFilter的方法的调用,来决定是否须要訪问目标资源。

    比方,能够在用户权限验证等等。推断用户是否有訪问某些资源的权限。有权限放行,没权限不运行chain.doFilter方法。

  2. 通过在调用chain.doFilter方法之前,做些处理来达到某些目的。
    比方,解决中文乱码的问题等等。能够在doFilter方法前,运行设置请求编码与响应的编码。甚至能够对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写对应的request.getParameter方法)。
  3. 通过在调用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>

转载于:https://www.cnblogs.com/blfbuaa/p/7288896.html

java-web 过滤器 amp; 监听器 amp; 拦截器相关推荐

  1. java中过滤器、监听器、拦截器的区别

    1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的actio ...

  2. 【转载】Spring Boot 过滤器、监听器、拦截器的使用

    关注"Java后端技术全栈" 回复"面试"获取全套大厂面试资料 在开发中用到过滤器.监听器.拦截器的场景非常多,今天就来聊聊这三者在日常开发中是如何使用的. 概 ...

  3. 【Spring Boot】 过滤器、监听器、拦截器的使用

    概念和使用场景 监听器 listener是servlet规范中定义的一种特殊类.用于监听servletContext.HttpSession和servletRequest等域对象的创建和销毁事件. 实 ...

  4. Servlet,过滤器,监听器,拦截器的区别

    由于最近两个月工作比较清闲,个人也比较"上进",利用工作空余时间,也继续学习了一下,某天突然想起struts2和struts1的区别的时 候,发现为什么struts1要用servl ...

  5. springBoot的过滤器,监听器,拦截器

    概述 在开发中,我们经常要考虑一些问题,对敏感词进行过滤,用户是否已经登录,是否需要对他的请求进行拦截,或者领导问现在在线人数有多少人?我们如何实现这些功能哪 @WebFilterpackage co ...

  6. 杨老师带你分析 过滤器、监听器和拦截器的区别

    过滤器: Filter 监听器:Listener 拦截器:Interceptor 过滤器:是在javaWeb中,前台传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后 ...

  7. JavaEE基础(05):过滤器、监听器、拦截器,应用详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Listener监听器 1.概念简介 JavaWeb三大组件:Servlet,Listener,Filter.监听器就是指在应用程序中监听 ...

  8. JAVA incept_java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例

    java 过滤器Filter: package com.sun.test.aircraft.filter; import javax.servlet.*; import java.io.IOExcep ...

  9. 关于拦截器与过滤器使用场景、拦截器与过滤器的区别整理

    拦截器与过滤器的区别总结: 过滤器在web.xml中配置: (1)因为一开始在过滤器中映射的url-pattern填写路径是*.action.所有的action要经过它的过滤.<url-patt ...

  10. Java自定义异常、全局捕获异常、拦截器 实现动态控制登录超时

    Java自定义异常.全局捕获异常.拦截器 实现动态控制登录超时 参考文章: (1)Java自定义异常.全局捕获异常.拦截器 实现动态控制登录超时 (2)https://www.cnblogs.com/ ...

最新文章

  1. 使用 diff 查找文件的差异并生成补丁文件修补
  2. 神回答:编程到底难在哪里?
  3. 黑龙江2020计算机一级考试时间,黑龙江2020年计算机等级考试报名时间汇总
  4. $$和$BASHPID区别
  5. POJ - 1026 Cipher(置换群的幂)
  6. 转——C# DataGridView控件 动态添加新行
  7. oracle注入过滤了单引号,sql绕过单引号限制继续注入的解决方法
  8. C#LeetCode刷题-位运算
  9. vs2010下载链接中国简体(中国含msdn)
  10. python写的软件怎么逆向_python逆向工程:通过代码生成类图
  11. 数据统一管理--企业决策分析之刚需
  12. OpenGL基础8:SOIL库
  13. linux 子进程exit6,linux 惊群有关问题
  14. Python | 类和对象
  15. select *和select 字段名
  16. C语言之求两个数的最大公因数和最小公倍数
  17. Word 分节符的删除(不改变文章格式)
  18. java实现旅行商问题_Java中旅行商问题的强力算法
  19. tianchai 12023 水管工游戏(DFS搜索)
  20. 推荐一款MD5解密在线网站

热门文章

  1. 记录一次Tomcat内存泄露原因的追溯
  2. apache的开源项目-模板引擎(Velocity)(转)
  3. 调用新浪微博显示用户信息
  4. svn add后的数据如何取消-svn revert??--zz
  5. MD5算法的C++实现
  6. php yii 控件分页,yii2.0-分页应用实例
  7. spool文件命名引用两个变量_Python 中命名空间与作用域介绍
  8. c语言进度条窗口,【C语言】进度条实现
  9. python中pickle模块_python标准库学习之pickle模块
  10. matlab做三次拉格朗日插值多项式_买菜必用的MATLAB拉格朗日插值函符号解输出