过滤器和监听器的学习

过滤器

什么是过滤器

过滤器JavaWeb三大组件之一,过滤器起到了过滤,拦截的作用,过滤请求和响应。servlet是拦截并处理请求,而过滤器只拦截请求并不处理。

过滤器的原理

当浏览器index2.jsp向服务器发送请求时,过滤器会根据web.xml配置的url-pattern匹配到对应的url的请求,如果改过滤器须放行会执行filterChain.doFilter(servletRequest,servletResponse),如果执行该方法后后面没有过滤器会进入到服务器(servlet),处理请求;如果执行该方法后还有过滤器就会进入下一个过滤器。当servlet处理完请求向浏览器发出响应(Response)时,也会再次通过过滤器回到浏览器。
在这里插入图片描述

过滤器的生命周期

init(FilterConfig):初始化
当过滤器创建的时候创建,只执行一次

doFilter(ServletRequest req,ServletResponse res,FilterChain chain):
执行过滤操作,处理具体的过滤方法,请求一次执行一次

destroy():销毁
在过滤器销毁前执行

FilterConfig,设置中文统一编码

首先需要到web.xml中配置好过滤器的路径和拦截的路径,并在里面配置初始化参数
在这里插入图片描述
随后创建一个过滤器codeFilter实现Filter接口里的方法,定义一个全局的字符串变量(encode)以便接收web.xml中的参数值,其次在初始化方法init(FilterConfig filterConfig)里通过filterConfig.getInitParameter(“code”)来获取配置在web.xml里的值(),拿到后赋值给
encode
在这里插入图片描述
最后把拿到的encode在过滤方法(doFilter)中设置请求和响应的统一中文编码setCharacterEncoding、setContentType,设置后在放行到Servlet
在这里插入图片描述

多个过滤器执行的顺序

一个目标资源可以定义多个过滤器,过滤器的执行是在web.xml中部署顺序执行。

四种拦截方式

默认情况下,过滤器拦截的是地址栏输入的url的地址,这种拦截的方式叫做拦截请求的方式:REQUEST
如果想拦截转发可以在web.xml中添加FORWARD
REQUEST : 拦截请求
FORWARD : 拦截转发
INCLUDE : 拦截包含
ERROR : 拦截异常

REQUEST:包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST;
FORWARD:包括RequestDispatcher#forward()方法、jsp:forward标签都是转发访问;
INCLUDE:包括RequestDispatcher#include()方法、jsp:include标签都是包含访问;
ERROR:当目标资源在web.xml中配置为中时,并且真的出现了异常,转发到目标资源时,会执行过滤器。

监听器

监听作用

监听是3个作用域的操作:request、session、servletContext(application)
当我们3个作用域,一旦做了某些操作,就立刻监听对应做某些操作

三大域的生命周期及方法使用

ServletContext
生命周期监听:ServletContextListener,它有两个方法,一个在出生时调用,一个在死亡时调用;
void contextInitialized(ServletContextEvent sce):创建SErvletcontext时
void contextDestroyed(ServletContextEvent sce):销毁Servletcontext时

属性监听:ServletContextAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。

void attributeAdded(ServletContextAttributeEvent event):添加属性时;
void attributeReplaced(ServletContextAttributeEvent event):替换属性时;
void attributeRemoved(ServletContextAttributeEvent event):移除属性时;

HttpSession
生命周期监听:HttpSessionListener,它有两个方法,一个在出生时调用,一个在死亡时调用;

void sessionCreated(HttpSessionEvent se):创建session时
void sessionDestroyed(HttpSessionEvent se):销毁session时

属性监听:HttpSessioniAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。

void attributeAdded(HttpSessionBindingEvent event):添加属性时;
void attributeReplaced(HttpSessionBindingEvent event):替换属性时
void attributeRemoved(HttpSessionBindingEvent event):移除属性时

ServletRequest
生命周期监听:ServletRequestListener,它有两个方法,一个在出生时调用,一个在死亡时调用;

void requestInitialized(ServletRequestEvent sre):创建request时
void requestDestroyed(ServletRequestEvent sre):销毁request时

属性监听:ServletRequestAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。

void attributeAdded(ServletRequestAttributeEvent srae):添加属性时
void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时
void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值