过滤器的概述以及一些应用

当浏览器有一个请求的时候 。不管是请求html jsp servlet 我们都可以在请求到达之前就拦截。做统一的处理
当有返回的时候,在,到达浏览器之前。我们也可以拦截一下。 做你想要的处理

其实这个拦截器跟servlet 类似 也是由服务器自动调用。也是配置拦截的路径。

如何写一个filter

编写
1,实现接口 Filter 是 java.servlet的接口
2,要在web.xml中配置 和servlet类似 servlet-name 。。。。 都变成filter-name 与servlet区分

特点
3,接口中一共就三个方法 init 在服务器启动的时候用于初始化,对象被创建并且调用了这个方法。也是单例的。
4,主要的是dofilter 这个方法,在每次拦截的时候调用一次。 里面一共三个对象 req res 和 filterChain

应用
5,filterChain 的doFilter(req,res)把请求传给filter 链的下一个filter ,你过时最后一个就是执行了
6,如果是多个filter 拦截同一个路径,看filter-mapping 在web.xml中的配置先后,先配置,先执行。

这个filterchain 也就是doFilter 方法的递归调用,顺序就是递归的顺序

forward<> dispatcher一共是四种选项, request 直接请求 include 页面包含 error 也就是 diapatcher 可以配置多个。也就是多种多拦截

jsp中
<jsp:include page="/test.jsp"> include 可以拦截

/test.jsp error可以拦截

应用一:
可以禁用浏览器的缓存;
在dofilter 方法中
将response
setHeader

应用二:
跟上边类似,在request.setCharacterEncoding("utf-8);

应用三
校验有些页面需要校验登录
需要用
uncheckedurls , sessionkey 重定向的页面路径 /login/login.jsp

获取请求的路径
request.getRequestURL() 浏览器请求的路径
request.getRequestURI() /项目名/login/login.jsp
request.getServletPath() /login/login.jsp

在 filter的init 方法中 也就是在服务器启动的时候只获取这么一次。
getFilterConfig().getServletContext().getInitParameter("上面param-name中配置的”
把那三个都赋值filter的全局变量中。

第一判断是不是需要拦截 不写else 默认就是else
Arrays.asList(uncheckurls.split(",")) 这是一个 list
list.contains(url)就是我们getServletPath 就直接dofilter return;
到这证明需要拦截,看看session有没有
request.getSession().getAttribute(sessionkey) 如果是null就 response.sendRedirect(redirecturl); return;
到这证明session不是null
dofilter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值