JAVA中的Filter过滤器和listener监听器

  • A+
所属分类:Java JavaWeb

Filter过滤器

概述

web服务器端有三大技术:Servlet Filter Listener

Servlet:本质上是一个类,这个类需要实现Servlet接口规范
作用:可以做浏览器和服务器之间的交互请求和响应
Filter:本质上是一个类,这个类需要实现Filter接口规范
作用:对浏览器访问服务器资源时的一种拦截,符合条件才放行  不符合条件不放行访问资源
资源:项目里面的资源 比如:Servlet html jsp  js jpg...

作用

主要作用:拦截浏览器访问服务器的请求的

ps:也会拦响应,但是企业主要用于拦请求

filter的使用

1 xml配置文件方式(掌握)

创建一个java类,实现filter的接口
在web.xml中配置filter要拦截的资源

2 注解配置方式(了解)

在自定义的filter类上添加注解:
@WebFilter(urlPatterns = "/sd1")

filter的细节

1.filter不是对所有资源都拦截,需要拦截哪些资源都需要配置filter
2.如果多个filter都对同一个资源拦截,那多个filter都会执行
        配置文件中:多个filter的执行顺序是web.xml的上下配置顺序
        注解中:    执行的顺序是按照filter文件名的自然排序顺序  
3.如果filter放行,找的是看看有没有下一个过滤器执行,如果没有下一个过滤器才会执行服务器的资源          

filter的生命周期(了解)

JAVA中的Filter过滤器和listener监听器

从filter的出生到filter的死亡 有3个方法伴随:init() destory() dofilter()
服务器启动创建filter对象执行init方法
浏览器访问到了匹配到的资源 执行dofilter方法 访问一次执行一次
当服务器关闭的时候 执行destory方法 销毁当前filter
关注点:doFilter核心过滤方法

filter生命周期方法中参数(了解)

方法:init(FilterConfig config) 参数:filterConfig 当前filter的配置对象 作用

1 可以获取到当前filter的名称   getFilterName()
2 可以获取到ServletContext对象 getServletContext()

方法:doFilter(ServletRequest req, ServletResponse resp, FilterChain filterchain) 参数:request response filterchain 作用 1.request response之前怎么用 在filter中还怎么用 2.FilterChain:过滤器链对象 作用:维护过滤器的执行顺序的 核心放行方法: chain.dofilter(req,res)

Filter的配置

1.filter的资源路径配置(面试题) 有3种方式来配置filter的拦截路径

1.完全路径匹配: 以/开始  例如:/sd1  /a/b/c/sd1   匹配单一资源的匹配 
         注意:<url-pattern>标签可以出现多个
2.目录匹配:以/开始 以*结尾  例如:/*   /a/b/*     匹配目录下的所有资源 
3.扩展名匹配:不以/开始 以.结尾  例如:*.jsp  *.jpg  *.html  匹配一类资源的

2.filter的拦截方式配置 默认:filter只拦截浏览器过来的请求 不拦截服务器内部的请求(请求转发) 配置filter拦截服务器内部的请求

JAVA中的Filter过滤器和listener监听器

xml方式配置
在<filter-mapping>的标签中添加标签<dispatcher>FORWARD</dispatcher>
但是这种配置将filter默认的拦截方式给覆盖了 只会拦截服务器内部的请求 不会再拦截默认的浏览器请求了
想让filter拦截服务器内部的请求又拦截浏览器过来的请求:
<filter-mapping>
        <filter-name>MyFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>REQUEST</dispatcher>
</filter-mapping>

注解方式配置
@WebFilter(dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})
该注解配置filter既会拦截浏览器过来的请求 又会拦截服务器内部的请求

总结filter

filter概述:本质上是一个类,实现了filter接口规范
fitler作用:可以对浏览器访问服务器的请求进行拦截
filter的快速入门:xml方式 注解方式
xml方式:1 创建1个类型实现filter接口 2 在web.xml中进行拦截资源的配置
注解方式:直接在当前的filter类上添加注解 @webFilter(url-pattern="路径")
filter细节
1 filter不是对所有资源都拦截,需要拦截哪个要创建且配置
2 多个filter拦截了同一个资源,多个filter都执行
3 filter放行之后,会找下一个filter执行,直到没有filter了才会去找资源
filter的生命周期
服务器一启动就会创建当前的filter对象执行init方法
当访问到要匹配的资源时,filter的dofilter核心拦截方法执行 访问一次执行那一次
当服务器关闭的时候,filter的destory销毁方法执行
filter拦截方式
filter默认只对浏览器的请求进行拦截 不对服务器的内部跳转请求进行拦截
如果想配置可以在web.xml中进行配置
<filter-mapping>
        <filter-name>MyFilter2</filter-name>
        <url-pattern>/*</url-pattern>
        <!--让当前filter拦截内部的请求转发-->
        <dispatcher>FORWARD</dispatcher>
        <!--让当前filter拦截浏览器过来的请求-->
        <dispatcher>REQUEST</dispatcher>
</filter-mapping>
filter路径配置方式:三种(面试题)
1 完全路径匹配 例如:/sd1 /sd2  针对单一资源的 但是<url-pattern>可以写多分
2 目录匹配 例如: /*   /a/b/*  针对指定目录下的所有资源你的
3 扩展名匹配  例如: *.jsp  *.html  针对一种类型的所有资源的

案例一:统一解决所有servlet的乱码问题

案例二:非法字符的过滤

listener--监听器

概述

listener:本质上是一个类,需要实现监听器的接口

作用

监听器可以去监听到域对象的状态变化(ServletContext request session)

状态变化:创建和销毁

提供的监听器:

ServletContextListener: 监听ServletContext创建和销毁(掌握)

ServletRequestListener: 监听request 创建和销毁

HttpSessionListener: 监听session创建和销毁

listener的使用

java提供了各种各样的监听器,每个监听器都有自己的作用

1.ServletContextListener监听器:监听ServletContext对象的创建和销毁的(掌握)

listener监听器的创建

xml方式:(掌握)
1 创建一个java类,实现java提供的指定监听器的接口
2 在web.xml中进行配置
注解方式: 
在编写的listener类上加上注解  @WebListener
  • 资源分享QQ群
  • weinxin
  • 官方微信公众号
  • weinxin
沙海
TripodCloud:性价比最高的CN2 GIA服务器
C语言速查手册
C语言项目源码分享
美女讲师教你学C语言

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: