自定义抽象的 HttpFilter类, 实现自 Filter 接口

  1. package com.lanqiao.javaweb;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13.  
  14. // 自定义的 HttpFilter, 实现自 Filter 接口
  15.  
  16. public abstract class HttpFilter implements Filter {
  17.  
  18. // 用于保存 FilterConfig 对象.
  19.  
  20. private FilterConfig filterConfig;
  21.  
  22. // 不建议子类直接覆盖. 若直接覆盖, 将可能会导致 filterConfig 成员变量初始化失败
  23.  
  24. @Override
  25. public void init(FilterConfig filterConfig) throws ServletException {
  26. this.filterConfig = filterConfig;
  27. init();
  28. }
  29.  
  30. //供子类继承的初始化方法. 可以通过 getFilterConfig() 获取 FilterConfig 对象.
  31. protected void init() {}
  32.  
  33. // 直接返回 init(ServletConfig) 的 FilterConfig 对象
  34.  
  35. public FilterConfig getFilterConfig() {
  36. return filterConfig;
  37. }
  38.  
  39. /**
  40. * 原生的 doFilter 方法, 在方法内部把 ServletRequest 和 ServletResponse
  41. * 转为了 HttpServletRequest 和 HttpServletResponse, 并调用了
  42. * doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
  43. *
  44. * 若编写 Filter 的过滤方法不建议直接继承该方法. 而建议继承
  45. * doFilter(HttpServletRequest request, HttpServletResponse response,
  46. * FilterChain filterChain) 方法
  47. */
  48. @Override
  49. public void doFilter(ServletRequest req, ServletResponse resp,
  50. FilterChain chain) throws IOException, ServletException {
  51. HttpServletRequest request = (HttpServletRequest) req;
  52. HttpServletResponse response = (HttpServletResponse) resp;
  53.  
  54. doFilter(request, response, chain);
  55. }
  56.  
  57. //抽象方法, 为 Http 请求定制. 必须实现的方法.
  58.  
  59. public abstract void doFilter(HttpServletRequest request, HttpServletResponse response,
  60. FilterChain filterChain) throws IOException, ServletException;
  61.  
  62. //空的 destroy 方法。
  63. @Override
  64. public void destroy() {}
  65.  
  66. }

建立一个Filter类,其继承于父类HttpFilter

  1. package com.atguigu.javaweb.encoding;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.FilterChain;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9.  
  10. import com.atguigu.javaweb.HttpFilter;
  11.  
  12. public class EncodingFilter extends HttpFilter{
  13.   //配置参数
  14. private String encoding;
  15.  
  16. @Override
      //获取web.jsp文件里配置和映射里的encoding属性
  17. protected void init() {
  18. encoding = getFilterConfig().getServletContext().getInitParameter("encoding");
  19. }
  20.  
  21. @Override
  22. public void doFilter(HttpServletRequest request,HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException {
  23. //System.out.println(encoding);
  24. request.setCharacterEncoding(encoding);
  25. filterChain.doFilter(request, response);
  26. }
  27.  
  28. }

WEB-INF下的web.xml文件的配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  3.  
  4. <filter>
  5. <filter-name>encodingFilter</filter-name>
  6. <filter-class>com.lanqiao.javatest.encoding.EncodingFilter</filter-class>
  7. </filter>
  8.  
  9. <filter-mapping>
  10. <filter-name>encodingFilter</filter-name>
  11. <url-pattern>/encoding/*</url-pattern>
  12. </filter-mapping>

  <context-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
  </context-param>

  1. </web-app>

在WebContent下的encoding文件里的login.jsp和index.jsp页面:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10.  
  11. <form action="login.jsp" method="post">
  12. username:<input type="text" name="username"/><br><br>
  13. <input type="submit" name="tt" />
  14.  
  15. </form>
  16. </body>
  17. </html>
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. hello:${param.username }
  11. </body>
  12. </html>

字符编码的过滤器Filter(即输入的汉字,能在页面上正常显示,不会出现乱码)的更多相关文章

  1. 过滤器(Filter)的应用

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

  2. 过滤器 Filter

    Filter(过滤器)简介 Filter 的基本功能是对发送到 Servlet 的请求进行拦截, 并对响应也进行拦截. Filter 程序是一个实现了 Filter 接口的 Java 类,与 Serv ...

  3. java之过滤器Filter

    Java三大器之过滤器(Filter)的工作原理和代码演示   一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对w ...

  4. java过滤器Filter笔记

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静 ...

  5. springboot配置字符编码

    这边主要有两种方式 方式一.使用传统的Spring提供的字符编码过滤器(Filter的方式) 因为,字符编码过滤器在框架中已经有了,所以我们不需要自己写了.直接进行配置类的实现: @Configura ...

  6. 【java web】过滤器filter

    一.过滤器简介 过滤器filter依赖于servlet容器 所谓过滤器顾名思义是用来过滤的,Java的过滤器能够为我们提供系统级别的过滤,也就是说,能过滤所有的web请求, 这一点,是拦截器无法做到的 ...

  7. MyEclipse2016统一字符编码

    MyEclipse一般没做修改,默认的字符编码是GBK,但是在实际的开发中常用的是utf-8,为了避免出现乱码等情况,我们需要把开发工具的编码都统一设置成utf-8,修改步骤如下: 1.打开MyEcl ...

  8. 07-Python入门学习-字符编码与文件处理

    字符编码 人操作计算机使用人类认识的字符,而计算机存放都是二进制数字所以人在往计算机里输入内容的时候,必然发生: 人类的字符------(字符编码表)-------->数字 比如我输入一个‘上’ ...

  9. SpringMVC 过滤器Filter使用解析

    SpringMVC框架是一个成熟的优秀java web开发框架,学习研究框架设计有助于我们更好的理解和掌握spring MVC,设计和写出更符合的结构和代码. 本节主要是研读SpringMVC框架中的 ...

随机推荐

  1. Java基础之读文件——使用通道读取混合数据1(ReadPrimesMixedData)

    控制台程序,本例读取Java基础之写文件部分(PrimesToFile2)写入的Primes.txt. 方法一:可以在第一个读操作中读取字符串的长度,然后再将字符串和二进制素数值读入到文本中.这种方式 ...

  2. SqlServer2008根据现有表,获取该表的分区创建脚本

    *============================================================== 名称: [GetMSSQLTableScript] 功能: 获取cust ...

  3. java io读书笔记(4)字符数据

    Number只是java程序中需要读出和写入的一种数据类型.很多java程序需要处理有一大堆的字符组成的text,因为计算机真正懂得的只有数字,因此,字符按照某种编码规则,和数字对应. 比如:在ASC ...

  4. Iterator和ListIterator主要区别(转)

    Iterator和ListIterator主要区别有: 一.ListIterator有add()方法,可以向List中添加对象,而Iterator不能. 二.ListIterator和Iterator ...

  5. G面经prepare: BuyGoods

    给你一部分钱和一些不同价钱的商品,如何在最多买K件商品的情况下尽可能多的花掉手里的钱. 举例:口袋里的钱数: 10; K=2 产品价格: [3, 6, 8, 7, 9] 输出 3, 7 Backtra ...

  6. Lintcode: Sort Colors II

    Given an array of n objects with k different colors (numbered from 1 to k), sort them so that object ...

  7. 树形DP(01组合背包The Ghost Blows Light HDU4276)

    题意:有n个房间,之间用n-1条道路连接,每个房间都有一个定时炸弹,在T时间后会一起爆炸,第i个房间有pi价值的珠宝,经过每条道路都需要花费一定的时间,一个人从1房间开始 ,从n房间出去,保证再不炸死 ...

  8. [转] JVM 调优系列 & 高并发Java系列

    1.JVM调优总结(1):一些概念:http://www.importnew.com/18694.html 2.JVM调优总结(2):基本垃圾回收算法:http://www.importnew.com ...

  9. JavaScript读写脚txt文件

    1.cmd切换到“C:\Windows\System32>”下,执行“regsvr32 Scrrun.dll” 2.JavaScript读写txt文本代码如下,注意要发布到服务器上 <!D ...

  10. paper 44 :颜色矩和颜色相关图(color correlogram)