filter过滤器_JavaWeb之 Filter(过滤器)

FIlter作用

过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的。
当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。
其实可以这样理解,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的Filter,然后是否“放行”由Filter来决定。可以理解为,Filter来决定是否调用Servlet!当执行完成Servlet的代码后,还会执行Filter后面的代码。

FIlter实现步骤

1.创建AFilter类实现javax.servlet.Filter接口

2.添加@WebFilter("/*")注解或者添加web.xml配置

<

3.已经完成了

4.@WebFilter参数说明

484d6c9e63dd5db7902a23250414be75.png

编写简单一个Filter

package 

FIlter说明

Filter是单例的! void init(FilterConfig)
创建之后,马上执行;Filter会在服务器启动时就创建!
FilterConfig-->与ServletConfig相似
  • 获取初始化参数:getInitParameter()
  • 获取过滤器名称:getFilterName()
  • 获取appliction:getServletContext()

void destory()
销毁之前执行!在服务器关闭时销毁void doFilter(ServletRequest,ServletResponse,FilterChain)
每次过滤时都会执行
FilterChain

  • doFilter(ServletRequest, ServletResponse):放行!
    执行目标资源就相当于调用了目标Servlet的service()方法!,或是执行下一个过滤器!如果没有下一个过滤器那么执行的是目标资源,如果有,那么就执行下一个过滤器!

多个过滤器执行顺序

1.<filter-mapping>的配置顺序决定了过滤器的执行顺序!

2.过滤时遵守先进先出

3d762a16f8d15a5cbc3e8019b8f922ff.png

过滤器的N种拦截方式

<

应用场景

执行目标资源之前做预处理工作,例如设置编码,这种试通常都会放行,只是在目标资源执行之前做一些准备工作
通过条件判断是否放行,例如校验当前用户是否已经登录,或者用户IP是否已经被禁用
在目标资源执行后,做一些后续的特殊处理工作,例如把目标资源输出的数据进行处理

设置目标资源

/ :所有资源 /xx/xx/ :xx/xx/下的所有资源
/aaa/bbb/ccc/Servlet:具体AServlet

案例

案例一【分ip统计网站的访问次数】

分析

统计工作需要在所有资源之前都执行,那么就可以放到Filter中了。
我们这个过滤器不做拦截操作!因为我们只是用来做统计的。
用什么东西来装载统计的数据。Map<String,Integer>
整个网站只需要一个Map即可!
Map什么时候创建(使用ServletContextListener,在服务器启动时完成创建,并只在到ServletContext中),Map保存到哪里!(Map保存到ServletContext中!!!)
Map需要在Filter中用来保存数据
Map需要在页面使用,打印Map中的数据

代码实现

Listener

package 

Filter

package 

jsp

<%

效果

b508e192bebec39af487c21609cb73f6.png


image.png

案例二【粗粒度权限过滤】

只有文字描述步骤

游客、会员、管理员三个粒度

1.创建一个Fileter,过滤会员下的资源访问,这是保安1号 ,doFilter里检查session中权限标记,第一道检查工序,不是管理员=> 放行,第二道检查工序,不是会员=> 打回到登录/注册页面,如果是会员就放行!

2.创建一个Fileter,过滤管理员下的资源访问,这是保安2号 ,doFilter里检查session中权限标记,查看是不是管理员,不是管理员=>打回到登录/注册页面,如果是管理员就放行!

案例三【解决全站字符乱码(POST和GET中文编码问题)】

工具类

package 

只要配置了这个过滤器 即可使用

<

案例四【页面静态化 改日补充】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值