浏览器和web服务器通信,请求是输入的信息流,响应是输出的信息流,它们走的是服务器的同一个端口。当我们想对信息流做统一处理时,可以使用端口后面的过滤器,它就是Servlet API定义的Filter接口;我们只需写一个类,实现Filter接口,相当于加入一根滤芯。它的核心方法是doFilter,以chain.doFilter(request, response)为分界线,前面的代码过滤请求,后面的代码过滤响应。

1.动手写一个Filter

在之前的JavaWebDemo项目上,找到src目录,右键:New / Filter填写类名和包名:把Filter mappings改为/*,过滤所有的请求:接下来,在自动生成的代码上写个例子:从请求中取QueryString,追加到响应中,同时设置编码方式、避免中文乱码。

package filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;/** * 演示 Servlet Filter 的使用 */@WebFilter("/*")public class demo implements Filter {  public void destroy() {    // TODO Auto-generated method stub  }  /**   * 过滤请求和响应   */  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)      throws IOException, ServletException {    // 设置请求和响应的编码格式    request.setCharacterEncoding("utf-8");    response.setContentType("text/html;charset=UTF-8");        // 从请求中取数据    String name = request.getParameter("name");    // pass the request along the filter chain    chain.doFilter(request, response);    // 响应中追加数据    response.getWriter().append(" & "+name);  }  public void init(FilterConfig fConfig) throws ServletException {    // TODO Auto-generated method stub  }}

运行项目,在url后面加上参数,效果如下:

2.用UrlPattern指定请求

Pattern的含义是模式,看到这个单词很容易想到:设计模式、正则表达式。它通常描述有规律的重复现象。那么,Url的规律是什么呢?①文件后缀:形如 1.js/2.js/3.js,你会想到 *.js 代表所有js文件;同样,在设计servlet的url时,也经常会以 .do 做后缀。因此,我们可以用 *.后缀 来匹配同一类型的请求。②父目录:形如 user/card,user/identification,你可以猜到user模块下的url都是 user/* 这样的格式。因此,我们可以用 父目录/* 来匹配同一模块下的所有请求。③精确匹配:这个没啥好说的,就是具体的url。④全部匹配:这个也没啥好说的,就是用 /* 匹配所有url。

3.多个Filter

一个净水器中有多个滤芯,有的过滤杂质、有的过滤离子;我们也可以写多个Filter类,各自对信息做不同的处理。这时带来一个问题:多个Filter类的逻辑,谁先执行、谁后执行?换句话说,信息流先流过谁、后流过谁?请看下图:很明显,对于请求流,排在前面的Filter类先执行;对于响应流,则完全相反。Filter接口没有约定顺序的属性,目前只能有配置节 在web.xml中的先后次序决定:

servlet中文乱码_Servlet入门 信息过滤相关推荐

  1. 页面跳转之转发和重定向+Servlet中文乱码问题

    页面跳转之转发和重定向+Servlet中文乱码问题 一.页面跳转 <?xml version="1.0" encoding="UTF-8"?> &l ...

  2. servlet中文乱码处理

    servlet中文乱码处理 如果是post 设置req.setCharacterEncoding("utf-8"); 如果是get,不去修改服务器配置的情况下 new String ...

  3. servlet中文乱码_10分钟快速掌握Servlet相关基础知识

    Servlet的学习路线 1. 创建Servlet 2. Servlet的相关配置 3. Servlet的生命周期 4. HttpServletRequest接口 5. HttpServletResp ...

  4. jsp,servlet中文乱码问题

    在jsp页面中设置了编码为UTF-8 ,从网上看以下方法,用filter也可以解决传递参数的中文乱码问题 这里再介绍一种方法: request.setCharacterEncoding("U ...

  5. Servlet 中文乱码问题及解决方案剖析

    一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得 ...

  6. Servlet 中文乱码处理

    1.为什么使用中文乱码 我们在实现登录时候 ,需要进行前台的数据.获得数据以后可能会出现中文乱码,那应该如何处理呢? 2.get方式和Post提交方式的区别 [1]get数据的传输是不安全的 ,pos ...

  7. mysql jsp servlet 中文乱码问题。

    google一下..你可以找一大堆解决方案..但是我觉得都没有从根本上解决问题..是不是? 我觉得要想根本解决..最主要的方法是统一编码方案..说出来很简单..原因也很简单..但你真的做到了吗.. 首 ...

  8. 解决Servlet中文乱码问题

    一.出现乱码的原因 由于浏览器默认使用UTF-8码表进行编码,而servlet使用ISO-8859-1码表进行编码,传输和接收方编码不一致导致乱码的产生. 二.乱码的类型以及解决办法 1. respo ...

  9. 树莓派linux系统中文乱码,树莓派入门,软件安装,中文显示

    最近入手raspberry 3B 打算搭建一个LAMP环境,制作一个workpress个人博客于是有了一下教程: 此教程跳过烧录系统,烧录的系统是2016.4.26之前在官方网站下载的raspbian ...

最新文章

  1. 中山大学计算机学院运动会,中山大学2019年运动会.PDF
  2. linux挂载分区失败,Ubuntu分区挂载错误与Grub引导错误的修复
  3. RESTful 规范
  4. springcloud 并发_SpringCloud-Zuul高并发请求下的限流处理
  5. C++源码的调用图生成
  6. 用Python处理图片九宫格
  7. Vue 3 都 RC 了,前端的你还不来看看
  8. 7.2 伪逆和线性方程 $A\mathbf{x}=\mathbf{b}$
  9. PHP不读取Excel空行,phpexcel中遇到空单元格不跳过
  10. Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)2
  11. mysql 分库分表 建表,mysql 分库分表 建表MySQL常用操作
  12. python构造函数_Python构造函数
  13. 《罗辑思维》让知识交融做爱
  14. 五年高考三年模拟暗部软件库_小老弟,你的《五年高考三年模拟》掉高速上了……...
  15. 部署Azkaban多节点分布式模式
  16. 数模算法:模糊综合评价模型
  17. koreader下载_koreader安卓下载
  18. t检验的p值对照表_第十讲 R-两独立样本t检验
  19. 怎么搜索百度网盘的资源
  20. 荒野乱斗好友系统分析

热门文章

  1. 【Mac】mac 安装Axure RP 8 点不开 就一直跳-后闪退-报错Expected an Int64 but got a System.UInt64
  2. 95-130-348-源码-source-kafka相关-Handover
  3. Docker 安装 Tomcat
  4. scala学习-12-scala读取java项目下Src目录下的properties文件
  5. liunx centos 如何添加一个新的网卡
  6. 天天在用Redis,那你对Redis的AOF持久化到底了解多少呢?
  7. tfhpple解析html中的图片,图文详解使用TFHpple解析html方法
  8. SpringGateway与Zookeeper的Maven冲突
  9. 洛谷 P1313 计算系数 —— 水题
  10. SpringBoot整合freemarker中自定义标签获取字典表的数据