转自:https://www.jianshu.com/p/2ea2b0e4d1f2

过滤器通常 在 web 服务端用的比较多,有要功能

  • 在客户端的请求访问后端资源之前,拦截这些请求。
  • 在服务器的响应发送回客户端之前,处理这些响应。

过滤器的应用场景

1.执行目标资源之前做"预处理"工作,例如设置编码,这种通常都会放行,只是在目标资源执行之前做一些准备工作。(例如:几乎是所有的Servlet中都需要写request.setCharacteEncoding(),可以把它放入到一个Filter中。)这种过滤器没有拦截功能。

2.通过条件判断是否放行,例如校验当前用户是否已经登录,或者用户IP是否已经被禁用。(有拦截操作) (粗粒度权限控制,会员有会员的权利、游客有游客的权利)

3.在目标资源执行后,做一些后续的特殊处理工作。例如把目标资源输出的数据进行处理。

案例1:分IP统计网站的访问次数

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

案例2:解决全站字符乱码问题

  一般我们通过jsp页面请求转发到servlet时,若请求方式为POST且请求参数包含中文参数时,我们需要在servlet的doPost()方法中设置POST请求编码问题:request.setCharacterEncoding("utf-8");设置响应编码问题:response.setContentType("text/html;charset=utf-8");

这样便可以解决post请求即响应编码问题;而对于GET请求,若传递的请求参数包含中文参数时设置请求编码就比较麻烦,需要在servlet的doGet()方法中设置响应编码:response.setContentType("text/html;charset=utf-8");以及请求编码:首先获得传递给servlet的请求参数:String username=request.getParameter("username")假设传递的请求参数为username,然后再输入代码username=new String(username.getBytes("ISO8859-1"),"utf-8");,这样通过jsp页面转发到servlet的参数便解决了编码问题。即可以通过response.getWrite().prinltn(username)正常显示在网页上。

试想:以后的开发中往往会用到很多的servlet,那我们岂不是要在每一个servlet的doPost()和doGet方法中都写上上述的解决编码代码?这时候我们就可以通过过滤器来解决了。

过滤器( filter )的使用的更多相关文章

  1. Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例

    Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...

  2. 网站过滤器Filter

    实际上,Filter与Servlet及其相似,区别只是FIlter的doFilter()方法里多了一个FilterChain的参数,通过该参数可以控制是否放行用户的请求.网站有了过滤器十分的方便,可以 ...

  3. paip.输出内容替换在Apache 过滤器filter的设置

    paip.输出内容替换在Apache 过滤器filter的设置 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...

  4. java Servlet中的过滤器Filter

    web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...

  5. [ionic开源项目教程] - 第6讲 过滤器filter的使用

    过滤器filter的使用 1.回顾 再熟悉一下tab1.html的代码: <div class="list"> <a ng-repeat="item i ...

  6. selvert的过滤器filter处理中文乱码

    注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处 ...

  7. MVC之 自定义过滤器(Filter)

    MVC之 自定义过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...

  8. Servlet中的过滤器Filter用法

    1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ...

  9. Servlet中的过滤器Filter详解

    加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...

  10. AngularJS的过滤器$filter

    过滤器(filter)主要用于数据的格式上,通过某个规则,把值处理后返回结果.例如获得数据集,可排序后再返回. ng内置的共有九种过滤器: currency 货币 使用currency可以将数字格式化 ...

随机推荐

  1. JS-选项卡制作解释部分

    <!DOCTYPE html> <html> <head> <meta name="author" content "郭菊锋,7 ...

  2. CF1205题解

    B 最高有\(64\)位,当\(n\le 128\)时,最坏情况形成不了三元环,\(floyed\)暴力做 否则直接输出\(3\) C 题意的\(n\)均为奇数,设\((i,j)\),把\(i+j\) ...

  3. 小程序input组件失焦的使用

    失去焦点就开始做数据请求判断电话号码是正确 <view class='register-input-box'> <input class='register-input' place ...

  4. python统计apache、nginx访问日志IP访问次数并且排序(显示前20条)【转】

    前言:python统计apache.nginx访问日志IP访问次数并且排序(显示前20条).其实用awk+sort等命令可以实现,用awk数组也可以实现,这里只是用python尝试下.   apach ...

  5. Flutter -------- Http库 网络请求封装(HttpController)

    http库 再次封装的网络请求类 HttpController 1.添加依赖 dependencies: http: ^0.12.0 #latest version 2.导入库 import 'pac ...

  6. Gradle基础:11:使用Kotlin的Gradle(转)

    Gradle基础及进阶(转) https://blog.csdn.net/liumiaocn/article/category/8369185 Gradle基础:1: 简介与安装 Gradle基础:2 ...

  7. 利用OpenGL固定流水线绘制球体

    在OS X上的一个OpenGL简单demo.所附赠的代码是绘制半个球体.开启了深度缓存和多重采样,采样数是4. 详细下载地址请见:http://www.cocoachina.com/bbs/read. ...

  8. osg 渲染ifc数据-测试

    直接使用osg渲染ifc数据,提高渲染速度. #include "teslamanage.h" #include <QtWidgets/QApplication> #i ...

  9. dtypes.py", line 499 _np_qint8 = np.dtype([("qint8", np.int8, (1,)])

    Traceback (most recent call last): File "<stdin>", line 1, in <module> File &q ...

  10. pcm、wav、amr说明

    wav比pcm多44个字节(在文件头位置多)