java中的过滤器与监听器_JavaWeb中的监听器和过滤器

1.监听器

为了能够在Servlet/JSP应用程序中进行事件驱动编程,Servlet API提供了一整事

件类和监听器接口。监听器有三个级别:ServletContext、HttpSession、

HttpServletRequest,其对应的监听器接口如下图:

0818b9ca8b590ca3270a3433284dd417.png

让监听器生效也很简单,只要实现上述相应的接口中的方法即可,并用

@WebListener标注实现类,或在部署描述符中使用listener元素。

2.过滤器

过滤器是指拦截请求,并对传给被请求资源的ServletRequest和ServletResponse进

行处理的一个对象。过滤器可用于登录、加密和解密、会话检查、图片转换等等。过滤

器可以配置为拦截一个或多个资源。

过滤器配置可以通过注解或部署描述符完成。如果同一个资源或同一组资源应用了

多个过滤器,则其调用顺序有时候显得比较重要,这时候就需要用到部署描述符。

过滤器类必须实现javax.servlet.Filter接口,这个接口为每个过滤器暴露三个生

命周期方法:init、doFilter、destroy.

当应用程序启动之后,资源被请求之前,Servlet容器就会调用init方法,这个方法

只调用一次,并且包含该过滤器的初始化代码:

void init(FilterConfig config)

每次调用与过滤器相关的资源时,Servlet容器都会调用filter实例的doFilter方法:

void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)

filterChain对象是filter接口中最重要的一个对象,它也提供了一个doFilter方法

,开发人员可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web

资源的service方法,即web资源就会被访问,否则web资源不会被访问。

chain.doFilter(req,resp)

Filter中的最后一个生命周期是destroy,由Servlet容器调用,一般发生在应用程

序停止的时候。

除非一个过滤器类在部署描述符的多个filter元素进行了声明,否则Servlet容器将

只给每一个过滤器创建一个实例。由于Web应用程序通常是多用户的应用程序,因此可以

同时通过多个线程访问一个过滤器实例,但必须谨慎处理好多线程问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值