listener跟filter

本文详细解析了Servlet体系中的Listener与Filter的区别、作用、实现方式以及具体功能,帮助开发者深入了解这两种组件的底层原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  一直忙着项目功能的开发,对于项目开发中使用中知识点没有系统的学习总结。今日得闲,看博客的时候看到 listener跟filter。想到之前朋友去面试,面试官问过这样一个问题。

知道listener跟filter吗?知道。了解他们的底层实现吗。嗯............。  很多情况下,我们对知识都只是一知半解,知道怎么使用,而不清楚怎么实现的。下面说一说我自己的见解,有什么理解不清楚的地方,还望各位指点跟拍砖!!!!!

  listener跟filter都属于servlet体系,两者用途不同,所以实现方式也不一样。

 listener:监听器。一般在web开发,在web.xml配置我们所需要的listener

<listener><listener-class>xxxxxx</listener-class></listener>  查看源码不难发现所有listener类都间接或直接实现interface EventListener 。EventListener中没有初始方法。

该类的作用只是告诉servlet容器这是一个listener。我们常用的有HttpSessionListener  有两个方法 sessionCreate ,SessionDestory。

filter:过滤器。在web.xml配置我们所需的filter不是 针对对应的url-mapping

<filter>

<filter-name>xxxxx</filter-name>

<filter-class>xxxx</filter-class>

<init-param>
<param-name>xxx</param-name>
<param-value>xxx</param-value>
</init-param>

</filter>

<filter-mapping>

        <filter-name>xxx</filter-name>

<url-pattern>xxx</url-pattern>

</filter-mapping>

<init-param>可以要,可以不要。

所有的filter都实现interface Filter

public interface Filter {

public void init(FilterConfig filterConfig) throws ServletException;


       public void doFilter ( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException;


public void destroy();

}

可以看到默认声明三个方法

这个三个方法执行的顺序是 ,当servlet启动的时候会初始化init    filter 客户端有请求的时候我们执行dofilter,  destory()销毁改servlet

filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).

一个Filter包括:

1)、在servlet被调用之前截获;

2)、在servlet被调用之前检查servlet request;

3)、根据需要修改request头和request数据;

4)、根据需要修改response头和response数据;

5)、在servlet被调用之后截获.

 服务器每次只调用setFilterConfig方法一次准备filter 的处理;调用doFilter方法多次以处理不同的请求.FilterConfig接口有方法可以找到filter名字及初始化参数信息.服务器可以设置 FilterConfig为空来指明filter已经终结。

每一个filter从doFilter()方法中得到当前的request及response.在这个方法里,可以进行任何的针对request及 response的操作.(包括收集数据,包装数据等).filter调用chain.doFilter()方法把控制权交给下一个filter.一个 filter在doFilter()方法中结束.如果一个filter想停止request处理而获得对response的完全的控制,那它可以不调用下 一个filter。

可以通过filter来转换请求的编码


内容概要:本文档详细介绍了在三台CentOS 7服务器(IP地址分别为192.168.0.157、192.168.0.158192.168.0.159)上安装配置Hadoop、Flink及其他大数据组件(如Hive、MySQL、Sqoop、Kafka、Zookeeper、HBase、Spark、Scala)的具体步骤。首先,文档说明了环境准备,包括配置主机名映射、SSH免密登录、JDK安装等。接着,详细描述了Hadoop集群的安装配置,包括SSH免密登录、JDK配置、Hadoop环境变量设置、HDFSYARN配置文件修改、集群启动与测试。随后,依次介绍了MySQL、Hive、Sqoop、Kafka、Zookeeper、HBase、Spark、ScalaFlink的安装配置过程,包括解压、环境变量配置、配置文件修改、服务启动等关键步骤。最后,文档提供了每个组件的基本测试方法,确保安装成功。 适合人群:具备一定Linux基础大数据组件基础知识的运维人员、大数据开发工程师以及系统管理员。 使用场景及目标:①为大数据平台搭建提供详细的安装指南,确保各组件能够顺利安装配置;②帮助技术人员快速掌握Hadoop、Flink等大数据组件的安装与配置,提升工作效率;③适用于企业级大数据平台的搭建与维护,确保集群稳定运行。 其他说明:本文档不仅提供了详细的安装步骤,还涵盖了常见的配置项解释故障排查建议。建议读者在安装过程中仔细阅读每一步骤,并根据实际情况调整配置参数。此外,文档中的命令配置文件路径均为示例,实际操作时需根据具体环境进行适当修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值