转自: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. Python socket 通信功能简介

    常用的地址家族AF_UNIX:基于文件,实现同一主机不同进程之间的通信AF_INET:基于网络,适用于IPv4AF_INET6:基于网络,使用于IPv6 常见的连接类型SOCK_STREAM:即TCP ...

  2. [WEB安全]XSS命令总结

    一:正常构造方式: 1.无过滤,直接写: <script>alert(1)</script> 2.正常截断: "> <script>alert(1) ...

  3. Nginx 所使用的 epoll 模型是什么?

    对于 Nginx,相信有过 Web 服务部署经验的同学都不陌生,它有以下特点: 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 相较于 A ...

  4. OpenFOAM显示残差

    本文主要讲解两种方法用来显示OpenFOAM的计算残差,一种是采用OpenFOAM自带的foamMonitor来输出残差,另一种就是大家经常看见的采用pyFoam来输出残差.不管采用哪一种方法都必须安 ...

  5. 2018-2019-2 网络对抗技术 20165212 Exp 8 Web基础

    2018-2019-2 网络对抗技术 20165212 Exp 8 Web基础 原理与实践说明 1.实践内容概述 1.Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GE ...

  6. ubuntu之路——day11.6 多任务学习

    在迁移学习transfer learning中,你的步骤是串行的sequential process 在多任务学习multi-task learning中,你试图让单个神经网络同时做几件事情,然后这里 ...

  7. wrod: 突然无法输入汉字

    “文件”-“选项”-“高级”-“去掉 输入法控制处于活动状态复选框”.

  8. 为什么要监控sql语句?如何监控?

    01 为什么要监控sql语句? ① 因为程序大了以后,sql语句有可能被多个地方调用 .你不能确认当前时间是不是只执行了你需要的那条语句 . ② 有的持久层框架采用linq的语法来写sql , 程序中 ...

  9. linux内核是在哪里创建1号进程的?

    1. 请看rest_init的完整代码(不看也没关系,内核版本为5.2, init/main.c) noinline void __ref rest_init(void) { struct task_ ...

  10. YII2 输出 执行的 SQL 语句,直接用程序输出

    $query = User::find() ->,,,]) ->select(['username']) // 输出SQL语句 $commandQuery = clone $query; ...