目录

  • Filter

    • Filter概述
    • Filter的作用
    • Filter的应用
    • Filter的开发和使用
    • Filter的细节
  • Listener

    • Listener概述
    • Listener编写步骤
    • ServletContextListener
    • 加载配置文件

Filter概述

跳转到目录
过滤器:一个拥有过滤/拦截功能的东西,过滤掉一些不想要的,不和谐的东西.
生活中的过滤器:香烟过滤嘴,滤纸,净水器,空气净化器,丈母娘,土匪等. 大多数都是单向过滤器.
Web中的过滤器(Filter):Web中的一个组件/程序,就好比Servlet,过滤器就是一个特殊的类. 双向,拦截请求,拦截响应.

Filter的作用

跳转到目录
过滤器可以对所有的请求或者响应做拦截操作.

  1. 以常规的方式调用资源(Servlet/JSP);
  2. 利用修改过的请求信息调用资源;
  3. 调用资源之后,但在响应到客户端之前,对响应做出修改;
  4. 阻止当前资源调用,代之转到其他资源.

过滤器的应用

跳转到目录
完成通用的操作

在开发中两个重要的思想:

  • DRY原则: Don’t Repeat Yourself. 开发中拒绝代码重复(因为重复会带来巨大的维护成本)
  • 责任分离原则: 各自做各自最擅长的事情.

一、可以对请求中的字符做编码

二、登录验证过滤器

三、敏感字符处理

Filter的开发和使用

跳转到目录

Servlet的开发和使用

Servlet的开发和使用:
1):定义类实现javax.servlet.Servlet接口,并覆盖该接口中的方法.
2):在service方法中编写处理请求和响应的代码.
3):在web.xml中,配置Servlet,告诉Tomcat来管理当前Servlet.

  <servlet><servlet-name>ABC</servlet-name><servlet-class>Servlet的全限定名称</servlet-class></servlet><servlet-mapping><servlet-name>ABC</servlet-name><url-pattern>/资源名</url-pattern></servlet-mapping>

注意:此时url-patternt,表示外界访问Servlet的名称.

Filter的开发和使用

Filter的开发和使用:
1):定义类实现javax.servlet.Filter接口,并覆盖该接口中的方法.
2):在doFilter方法中编写处理过滤请求和过滤响应的代码.
3):在web.xml中,配置Filter,告诉Tomcat来管理当前的Filter.

<filter><filter-name>ABC</filter-name><filter-class>Filter的全限定名称</filter-class>
</filter>
<filter-mapping><filter-name>ABC</filter-name>              <url-pattern>/资源名</url-pattern>
</filter-mapping>

注意:此时url-patternt,表示对哪些资源做过滤/拦截.

url-pattern的文本内容, 如:
1: /hello.jsp --------------------> 当前Filter就仅仅只对hello.jsp资源做拦截.
2: /index --------------------> 当前Filter就仅仅只对/index资源做拦截.
3:/* --------------------> 当前Filter就对所有资源做拦截.访问任意的资源,都会先进入该过滤器器.
4:/system/* --------------------> 当前Filter就对以/system/打头的资源做拦截.
/system , /system/a, /system/a/b/c, /systema.

注解配置: @WebFilter("/*")

过滤器细节

跳转到目录

1. 过滤器执行流程
  1. 请求先经过过滤器
  2. 经过过滤器过滤后再请求资源
  3. 请求完资源后再回到过滤器

注:两个经过过滤器会对request对象请求数据进行增强,对response对象响应数据进行增强(即过滤数据)

2. 生命周期方法
  • init(Filterconfig):代表filter对象初始化方法 filter对象创建时执行
  • doFilter(ServletRequest,ServletResponse,FilterChan) :代表filter执行过滤的核心方法,如果某资源在已 经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行
  • doFilter方法 destory() :代表是filter销毁方法 当filter对象销毁时执行该方法
@WebFilter("/*")
public class FilterDemo3 implements Filter {/*** 每一次请求被拦截资源时,会执行* @param req* @param resp* @param chain* @throws ServletException* @throws IOException*/public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("FilterDemo3.doFilter..执行..");chain.doFilter(req, resp);System.out.println("FilterDemo3.doFilter..放行..");}/*** 在服务器启动后,会创建Filter对象,然后调用init方法. 只会执行一次. (加载资源)* @param config* @throws ServletException*/public void init(FilterConfig config) throws ServletException {System.out.println("FilterDemo3.init");}/*** 在服务器关闭后,Filter对象被销毁.如果服务器是正常关闭,则执行destroy方法 (释放资源)*/public void destroy() {System.out.println("FilterDemo3.destroy");}
}
3. 过滤器配置详解
  • 【1】拦截路径配置

    • 具体资源路径:/index.jsp ==> 只有访问index.jsp资源时,过滤器才会被执行
    • 拦截目录:/user/* ==> 访问/user下的所有资源时,过滤器都会被执行
    • 后缀名拦截:*.jsp ==> 访问所有后缀名问jsp资源时,过滤器都会被执行
    • 拦截所有资源:/* ==> 访问任何资源,过滤器都会被执行
  • 【2】拦截方式的配置

    • 注解配置(设置配置文件的 dispatcherTypes 属性)
      REQUEST:默认值,浏览器直接请求资源
      FORWARD:转发访问资源
      INCLUDE:包含访问资源
      ERROR:错误跳转资源
      ASYNC:异步访问资源
    • web.xml配置
      配置<dispatcher></dispatcher>标签即可
    //浏览器直接请求index.jsp资源时,该过滤器会被执行
    //@WebFilter(value = "/index.jsp",dispatcherTypes = DispatcherType.REQUEST)//只有转发index.jsp资源时,该过滤器才会被执行
    //@WebFilter(value = "/index.jsp",dispatcherTypes = DispatcherType.FORWARD)//浏览器直接请求index.jsp资源,转发index.jsp资源时,该过滤器会被执行
    @WebFilter(value = "/index.jsp",dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})
4. 过滤器链(配置多个过滤器)

璐璐从广州开车到长沙,途径韶关收费站,株洲收费站。韶关收费站收的是路过韶关的费用,株洲收费站收的是路 过株洲的费用。如果这二座收费站业务通过了,方可到达长沙,只要其中一个收费站的业务没有通过,那么就不能 到达长沙。而且,只有通过了韶关收费站,才能到达株洲收费站。
同样,我们java代码中,有时需要对同一个请求,进行多次不同业务的过滤,所以我们java代码中需要多个过滤 器。只有所有的过滤器都对请求进行了放行,请求才能访问到目标资源,只要多个过滤器中只有一个过滤器不放行 请求,那么这个请求都不能够访问到目标资源。多个过滤器组成的一个整体我们称为过滤器链。而且,过滤器链中 的过滤器是一个一个的执行的,一个过滤器执行完毕之后,会执行下一个过滤器,后面没有过滤器了,才会访问到 目标资源。只要其中一个过滤器没有放行,那么这个过滤器后面的过滤器也都不会执行了。

  • 【1】执行顺序

    1. 过滤器1
    2. 过滤器2
    3. 资源执行
    4. 过滤器2
    5. 过滤器1
  • 【2】过滤器先后顺序

    1. 注解配置:按照类名的字符串比较规则进行比较,值小的先执行
      eg:AFilter 和 BFilter,AFilter 先执行
    2. web.xml:<filter-mapping>中谁定义在上面就先执行谁

Listener

跳转到目录
Web中的一个组件/程序,类似于Servlet/Filter;监听器就是监听某个对象的的状态变化的组件 监听器的相关概念.

事件源:被监听的对象 ----- 主要三个域对象 request session servletContext
监听器:监听事件源对象 事件源对象的状态的变化都会触发监听器
响应行为:监听器监听到事件源的状态变化时 所涉及的功能代码

Web中的监听器 : 主要用于监听作用域对象的创建; 监听作用域对象属性的添加/删除/替换;

一、监听作用域对象的创建和销毁

ServletReuestListener: 监听请求对象的创建和销毁.
HttpSessionListener: 监听会话对象(session)的创建和销毁.
ServletContextListener: 监听应用的创建和销毁.

二、监听作用域对象的属性的添加/删除/替换

ServletReuestAttributeListener: 监听request作用域中属性的添加/删除/替换
HttpSessionAttributeListener: 监听session作用域中属性的添加/删除/替换
ServletContextAttributeListener: 监听application作用域中属性的添加/删除/替换

监听器的编写步骤

跳转到目录

  1. 编写一个监听器类去实现监听器接口
  2. 覆盖监听器的方法
  3. 需要在web.xml(注解)中进行配置
    web.xml配置

     <listener><!--全限定类名--><listener-class>com.sunny.web.listener.ContextLoaderListener</listener-class></listener>
    

注意: Listener没有自己的初始化参数. Listener如果需要使用初始化参数,只能使用全局的初始化参数.<context-param>

ServletContextListener

跳转到目录
ServletContextListener:用于监听ServletContext域的创建与销毁的监听器

应用场景:服务器启动时,加载配置信息

ServletContext域的生命周期:

  • 何时创建:服务器启动创建
  • 何时销毁:服务器关闭销毁
  • 作用范围:整个web应用

加载配置文件

跳转到目录

  • web.xml
  <!--设置全局的初始化参数--><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/applicationContext.xml</param-value></context-param>
  • 使用ServletContextListener来加载配置文件
public class ContextLoaderListener implements ServletContextListener {/*** 监听ServletContext对象创建的. ServletContext对象服务器启动后自动创建** 在服务器启动后自动调用* @param servletContextEvent*/@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {// 加载资源文件//1. 获取ServletContext对象ServletContext servletContext = servletContextEvent.getServletContext();//2. 加载资源文件String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation");//3. 获取真实路径String realPath = servletContext.getRealPath(contextConfigLocation);//4. 加载进内存try {FileInputStream fis = new FileInputStream(realPath);System.out.println(fis);} catch (FileNotFoundException e) {e.printStackTrace();}System.out.println("Web系统启动了...........");}/*** 在服务器关闭后,ServletContext对象被销毁. 当服务器正常关闭后该方法被调用* @param servletContextEvent*/@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {System.out.println("Web系统关闭了...........");}

Filter Listener——概述、应用、Filter的使用 细节相关推荐

  1. JavaWeb笔记:第07章 MVC |EL |JST |Filter |Listener |JQuery |AJAX |Maven |JSON |Redis |Linux |Nginx

    JavaWeb笔记:第07章 MVC |EL |JST |Filter |Listener |JQuery |AJAX |Maven |JSON |Redis |Linux |Nginx 1. MVC ...

  2. DW-CHEN的Java点滴记录JavaWeb之HTTP协议/Servlet/Cookie/Session/JSP/EL/JSTL/Filter/Listener

    JavaEE规范 JavaEE(Java Enterprise Edition):Java企业版,早期叫J2EE(J2EE的版本从1.0到1.4结束):现在Java版本从JavaEE 5开始 Java ...

  3. servlet/filter/listener/interceptor区别与联系

    2019独角兽企业重金招聘Python工程师标准>>> servlet/filter/listener/interceptor区别与联系 博客分类: java 由于最近两个月工作比较 ...

  4. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference 转载于:https://www.cnblogs.com/Jeremy2001 ...

  5. Spring Boot注册Servlet三大组件(Servlet, Filter, Listener)

    Spring Boot默认使用的Tomcat的Servlet容器,这个容器我们可以自己替换,比如替换成支持JSP的Servlet容器,这个容器已经帮我们注册好了一个Servlet(Dispatcher ...

  6. springmvc整合redis_111 SpringBoot整合Servlet JSP Filter Listener

    1. SpringBoot介绍 (1) 什么是Spring Boot? (2) Spring Boot有哪些特点? Spring Boot 设计目的是用来简化新 Spring 应用的初始搭建以及开发过 ...

  7. Listener监听器与Filter过滤器

    1.Listener     [1]监听器简介         > Listener是JavaWeb的三大组件之一,Servlet.Filter.Listener         > Li ...

  8. java nodefilter类,Java Servlet Filter过滤器概述

    Java Servlet Filter过滤器概述 Filter是Servlet的过滤器,是Servlet 2.3规范中新增加的一个功能,主要用于完成一些通用的操作,如编码的过滤.判断用户的登录状态等. ...

  9. javaweb(11) Listener监听器与Filter过滤器

    javaweb(11) Listener监听器与Filter过滤器 Listener监听器 什么是Listener监听器 Listener 监听器它是 JavaWeb 的三大组件之一.JavaWeb ...

最新文章

  1. php偶尔500,python – 偶尔500错误
  2. Dell R240 1U机架式服务器 资料
  3. C# 获取utc时间,以及utc datetime 互相转化
  4. 《VMware vCAT权威指南:成功构建云环境的核心技术和方法》一3.8 多站点考虑因素...
  5. bzoj4237稻草人
  6. 华为触摸提示音怎么换_抖音苹果iPhone手机怎么改微信消息提示音 自定义换声音教程...
  7. python教程文件 txt_Python读写txt文本文件的操作方法全解析
  8. SVN篇:Shell脚本实现SVN启动,停止,重启
  9. 《王道计算机考研》:数据链路层
  10. 小波去噪程序c语言,else - 小波去噪c语言程序
  11. 射频(RF)和微波电路发展简史(一)
  12. scala安装与配置
  13. php fatal 和php error,从PHP Fatal error: Uncaught Error: Class '' not found in php:说起
  14. win10自带sftp服务器_高手亲自解决win10系统下怎么使用OpenSSH设置SFTP服务器的完全操作办法...
  15. DDR存储颗粒度大小
  16. canvas实现聚光灯效果(js)
  17. 微信小程序——tabBar使用
  18. java springboot 32位的UUID
  19. 外汇天眼:随着美元贬值所有世界货币,每个国家都在为自己着想
  20. win7此更新不适用计算机,安装Win7补丁遭遇“此更新不适用于你的计算机”

热门文章

  1. 小陈学JS 筛选数组
  2. windows 前端工作环境搭建指北
  3. python socket + tkinter实现网络聊天室
  4. 十款PHP开发框架横向比较
  5. iPhone 存高危漏洞秒变木马
  6. 使用ZeroMQ+GDI+Opencv实现电脑远程画面
  7. 易语言之WebshellBrute神器打造
  8. UIView 渐渐出现 和渐渐消失了动画效果
  9. SQ01SQ02相关处理与增强
  10. 湖北武汉高新计算机osta培训学校,在哪里报考OSTA高新计算机信息证书