request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");

这是在Servlet里面设置字符编码的代码,但是通常情况下Servlet不止一个,所以我们需要在每一个Servlet中都写上上面的代码,这样的话,不仅麻烦,而且容易搞混淆。

所以我们对于这类多个Servlet中会执行相同的代码的时候,我们通常可以使用过滤器来帮我们完成操作:


过滤器:

如果想要使用过滤器,首先需要实现Filter类,并重写三个需要的方法:

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter(filterName = "TestFilter2",urlPatterns = "/*")
public class TestFilter2 implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {chain.doFilter(req, resp);}public void init(FilterConfig config) throws ServletException {}}

init方法:    容器在创建当前过滤器的时候自动调用;

destroy方法:  容器在销毁当前过滤器的时候自动调用

doFilter方法:  过滤器的主要代码写在这个地方

1 @WebFilter(filterName = "TestFilter2",urlPatterns = "/*")

这一行代码的意思是添加一个注解,通过这行代码就不需要再去web.xml中注册了

其中 filterName 代表的是这个过滤器的名字,后面那个urlPatterns 代表的是过滤的路径 /* 代表所有路径,意味着访问所有的路径的时候都会先访问这个过滤器

chain.doFilter(req, resp);

这一行代码代表的是如果还有其他的过滤器就调用其它的过滤器,但是需要注意,这一行代码必须写在doFilter方法的最后面

 1 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
 2         //这样在每个Servlet执行的时候都会先进行这个
 3         HttpServletRequest request = (HttpServletRequest) req;
 4         HttpServletResponse response = (HttpServletResponse) resp;
 5
 6         request.setCharacterEncoding("utf-8");
 7         response.setContentType("text/html;charset=utf-8");
 8
 9         //因为有可能不止这一个过滤器,所以需要将所有的过滤器执行
10         //注意 这一行代码一定要写到最后
11         chain.doFilter(req, resp);
12     }

其中3-7行代码就是设置编码

由于doFilter传递进来的默认是ServletRequest对象 而设置字符集的是在HttpServetRequest 所以我们需要强制转换一下

转换过后我们就可以进行设置了。

下面附上我另外一个测试过滤器的代码:

 1 import javax.servlet.*;
 2 import javax.servlet.annotation.WebFilter;
 3 import javax.servlet.http.HttpServletRequest;
 4 import javax.servlet.http.HttpServletRequestWrapper;
 5 import javax.servlet.http.HttpServletResponse;
 6 import java.io.IOException;
 7 import java.io.UnsupportedEncodingException;
 8
 9 /**
10  * urlPatterns代表的是需要将那些路径进行过滤器过滤  这里为* 代表所有的路径都需要进入这个过滤器
11  */
12 @WebFilter(filterName = "TestFilter",urlPatterns = "/*")
13 public class TestFilter implements Filter {
14     public void destroy() {
15     }
16
17     /**
18      * 在这里面写的任何代码  在执行Servlet JSP 等前 都会被执行
19      */
20     public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
21         //这样在每个Servlet执行的时候都会先进行这个
22         HttpServletRequest request = (HttpServletRequest) req;
23         HttpServletResponse response = (HttpServletResponse) resp;
24
25         request.setCharacterEncoding("utf-8");
26         response.setContentType("text/html;charset=utf-8");
27
28         //因为有可能不止这一个过滤器,所以需要将所有的过滤器执行
29         //注意 这一行代码一定要写到最后
30         chain.doFilter(req, resp);
31     }
32
33     public void init(FilterConfig config) throws ServletException {
34
35     }
36
37     //通过重写getParameter方法,实现get方法自动转码
38     class MyWrapper extends HttpServletRequestWrapper{
39         private HttpServletRequest request;
40         public MyWrapper(HttpServletRequest request) {
41             super(request);
42             this.request = request;
43         }
44
45         @Override
46         public String getParameter(String name) {
47             String value = this.request.getParameter(name);
48             if(value == null){
49                 return null;
50             }
51
52             //如果是get方法提交过来的
53             if(this.request.getMethod().equalsIgnoreCase("get")){
54                 try {
55                     // 进行转码
56                     value = new String(value.getBytes("ISO-8859-1"),"utf-8");
57                 } catch (UnsupportedEncodingException e) {
58                     e.printStackTrace();
59                 }
60             }
61
62             //屏蔽尖括号 换成 > <
63             value = value.replace(">",">");
64             value = value.replace("<","&lt;");
65
66             return value;
67         }
68     }
69 }

转载于:https://www.cnblogs.com/adversary/p/5983145.html

JAVA过滤器的使用(Filter)相关推荐

  1. java过滤器怎么写_java过滤器怎么写

    1.java过滤器中实现Filter的类怎么写 web.xml配置文件 SessionFilter com.qhit.system.tools.SessionFilter SessionFilter ...

  2. java过滤器命名_JAVA过滤器的使用(Filter)

    整理一下今天讲解的java过滤器的使用 request.setCharacterEncoding("utf-8"); response.setContentType("t ...

  3. Java过滤器Filter使用详解

    <div id="post_detail"> 转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6374212.html 在我的项目 ...

  4. Java过滤器Filter讲解(Java基础)

    你好我是辰兮,很高兴你能来阅读,本篇文章小结了Java过滤器的知识点,献给初学者,分享获取新知,希望我们一起进步. 文章目录 一.什么是过滤器 二.如何编写过滤器 三. 过滤器的配置 四.Filter ...

  5. java过滤器(Filter)

    目录 1 过滤器简介 2 Filter详细介绍 3 Filter的用法 3.1 用法1 3.2 用法2 1 过滤器简介 filter也称之为过滤器,它是javaWeb三大组件之一(Servlet程序. ...

  6. Java 过滤器解决URLSQL注入漏洞、跨站漏洞、框架注入漏洞、链接注入漏洞

    一. 漏洞描述 1. 检测到目标URL存在SQL注入漏洞 很多WEB应用中都存在SQL注入漏洞.SQL注入是一种攻击者利用代码缺陷进行攻击的方式,可在任何能够影响数据库查询的应用程序参数中利用.例如u ...

  7. Java IO: ByteArray和Filter

    转载自  Java IO: ByteArray和Filter 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中字节数组 ...

  8. JAVA WEB篇4——Filter、Listener

    JAVA WEB篇4--Filter.Listener 1.Filter Filter本意为"过滤"的含义,是JavaWeb的三大组件之一,三大组件为:Servlet.Filter ...

  9. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求 Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断 ...

  10. 布隆过滤器(Bloom Filter)- 原理、实现和推导

    目录 算法背景 布隆过滤器–概念 布隆过滤器-原理 布隆过滤器-缺点 布隆过滤器-实现 布隆过滤器-应用 布隆过滤器-公式推导 算法背景 问题: 在开发中,经常要判断一个元素是否在一个集合中. 实现方 ...

最新文章

  1. python3 redis 设置连接超时
  2. 在麻省理工读计算机专业,看美国的计算机教育(转载)
  3. 【刷题】LOJ 6014 「网络流 24 题」最长 k 可重区间集
  4. 通过JSR250规范 提供的注解@PostConstruct 和@ProDestory标注的方法
  5. puppet成长日记二 Package资源详细介绍及案例分析
  6. 高级Linux Kernel Inline Hook技术分析与实现
  7. php3.2接口分页,thinkphp3.2.3分页完整实例
  8. URI 、URL 和 URN
  9. CefSharp 中过滤图片 RequestHandler
  10. 四元数与欧拉角的转换关系
  11. ERP - 国际贸易术语(Incoterm)总结
  12. python输出边长为n的正方形_将一个正方形分成N个较小的正方形并求N个较小正方形的中心坐标...
  13. SA299学习笔记 第一章 描述接口配置(3)
  14. Windows下运行python脚本报错“ImportError: No Module named ...”的解决方法
  15. 【微服务】服务调用----Ribbon
  16. Android Platform Architecture 安卓平台架构
  17. windows10 RocketMQ启动 mqbroker 异常
  18. 用Verilog实现串并转换
  19. NORDIC52832 TWI(I2C) 特点 (2)驱动CHT8305C 温湿度传感器
  20. Java(计算机底层——二进制到汇编)(先导课)

热门文章

  1. Movavi Picverse for mac(AI智能修图工具)
  2. Mac项目流程管理工具:OmniPlan Pro 4.4
  3. leetcode397. Integer Replacement
  4. Logstash配置方法
  5. 中文文档列表 - Oracle Database (文档 ID 1533057.1)
  6. 在 RAID 磁盘上面架构 LVM 系统
  7. drupal7 payment module:把支付form元素注入到form中
  8. Upgrade to Spring Boot 1.4
  9. oracle错误代码及解决办法整合
  10. Spring声明式事务管理示例——MyBatis学习笔记之十六