CharacterEncodingFilter类的学习

web.xml内代码:

 <!-- 字符集过滤器 -->
  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class><span style="color:#ff0000;">org.springframework.web.filter.CharacterEncodingFilter</span></filter-class>
    <init-param>
      <param-name><span style="color:#ff0000;">encoding</span></param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name><span style="color:#ff0000;">forceEncoding</span></param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

org.springframework.web.filter.CharacterEncodingFilter源码:

<span style="font-family: Arial, Helvetica, sans-serif;">package org.springframework.web.filter;</span>
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet 2.3/2.4 Filter that allows one to specify a character encoding for
 * requests. This is useful because current browsers typically do not set a
 * character encoding even if specified in the HTML page or form.
 *
 * <p>This filter can either apply its encoding if the request does not
 * already specify an encoding, or enforce this filter's encoding in any case
 * ("forceEncoding"="true"). In the latter case, the encoding will also be
 * applied as default response encoding on Servlet 2.4+ containers (although
 * this will usually be overridden by a full content type set in the view).
 *
 * @author Juergen Hoeller
 * @since 15.03.2004
 * @see #setEncoding
 * @see #setForceEncoding
 * @see javax.servlet.http.HttpServletRequest#setCharacterEncoding
 * @see javax.servlet.http.HttpServletResponse#setCharacterEncoding
 */
public class CharacterEncodingFilter extends OncePerRequestFilter {

	private String <span style="color:#ff0000;">encoding</span>;

	private boolean <span style="color:#ff0000;">forceEncoding </span>= false;

	/**
	 * Set the encoding to use for requests. This encoding will be passed into a
	 * {@link javax.servlet.http.HttpServletRequest#setCharacterEncoding} call.
	 * <p>Whether this encoding will override existing request encodings
	 * (and whether it will be applied as default response encoding as well)
	 * depends on the {@link #setForceEncoding "forceEncoding"} flag.
	 */
	public void setEncoding(String encoding) {
		this.encoding = encoding;
	}

	/**
	 * Set whether the configured {@link #setEncoding encoding} of this filter
	 * is supposed to override existing request and response encodings.
	 * <p>Default is "false", i.e. do not modify the encoding if
	 * {@link javax.servlet.http.HttpServletRequest#getCharacterEncoding()}
	 * returns a non-null value. Switch this to "true" to enforce the specified
	 * encoding in any case, applying it as default response encoding as well.
	 * <p>Note that the response encoding will only be set on Servlet 2.4+
	 * containers, since Servlet 2.3 did not provide a facility for setting
	 * a default response encoding.
	 */
	public void setForceEncoding(boolean forceEncoding) {
		this.forceEncoding = forceEncoding;
	}

	@Override
	protected void doFilterInternal(
			HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
			throws ServletException, IOException {

		if (<span style="color:#ff0000;">this.encoding</span> != null && (<span style="color:#ff0000;">this.forceEncoding</span> || request.getCharacterEncoding() == null)) {
			<span style="color:#ff0000;">request.setCharacterEncoding(this.encoding);</span>
			if (this.forceEncoding) {
				<span style="color:#ff0000;">response.setCharacterEncoding(this.encoding);</span>
			}
		}
		filterChain.doFilter(request, response);
	}

}

CharacterEncodingFilter类可以通过简单配置来帮实现字符集转换的功能,参数encoding用于指定编码类型,参数forceEncoding设为true时,强制执行request.setCharacterEncoding(this.encoding)和reponse.setCharacterEncoding(this.encoding)中的方法。

时间: 2024-11-05 16:14:28

CharacterEncodingFilter类的学习的相关文章

初探C++类模版学习笔记

类模板 实现:在定义类的时候给它一个或多个参数,这个些参数表示不同的数据类型.                              -->抽象的类. 在调用类模板时, 指定参数, 由编译系统根据参数提供的数据类型自动产生相应的模板类                   -->具体的类. 类模板的定义 C++的类模板的写法如下: template <类型参数表> //类型参数表的写法就是:class 类型参数1, class 类型参数2, - class 类模板名 { 成员函数

2015-08-26 php大力力019.php分页类的学习

2015-08-26 php大力力019.php分页类的学习 [2014]兄弟连高洛峰 PHP教程14.2.1 分页需求分析 14:18 [2014]兄弟连高洛峰 PHP教程14.2.2 分页类中分页的编写 19:10 [2014]兄弟连高洛峰 PHP教程14.2.3 分页类中列表页的编写 28:10 [2014]兄弟连高洛峰 PHP教程14.2.4 分页类的优化 23:36 [2014]兄弟连高洛峰 PHP教程14.2.5 <细说PHP>分页类的使用  15:26 其它: jQuery Aj

JavaScript匿名类整理学习

以下为总结在开源的JavaScript框架中能看到很多这样语法结构(function(){})()比如我最近看的jQuery,及chediter.刚开始的时候我看到这样的结果有点奇怪,它是怎么执行的,并且这是什么样的语法结构,最近偶尔看闭包的时候,才发现原来这是JavaScript种匿名函数(看到这个有点汗,java的匿名类见过,就从来没想到JavaScript中会有匿名函数,也是学的不够牢固).现在我们了解到以上是JavaScript匿名函数的语法结构,怎么声明函数,匿名函数JavaScrip

2015年11月26日 Java基础系列(三)ThreadLocal类初级学习

序,ThreadLocal类是为了解决多线程的安全问题.线程安全的意思也就是说每个线程操作自己的变量,不要对其他线程的值造成影响. 在很多情况下,ThreadLocal比直接使用synchronized同步机制解决线程安全问题更简单,更方便,且结果程序拥有更高的并发性. 1 ThreadLocal解决多线程安全问题的思路是通过ThreadLocalMap进行管控,就像一个Map中存在多个键值对,ThreadLocalMap可以对比Map进行理解. 2 一般通过覆盖ThreadLocal的init

UML类图学习

学习设计模式的时候每个模式都会有一个UML类图,一般这些类图都还是比较容易看懂的,但是当自己设计UMl类图的时候,就头大了.dependency,composition,aggregation,association有什么区别?还有那些0……*,0……1,1……*都是什么意思?让我们一起来学习一下.所有UML类图都使用PowerDesigner绘制. 一般化.泛化——Generalization 用在两个类或者两个接口之间就是继承,类和接口之间就是实现,箭头指向被继承或被实现者 依赖——Depe

枚举类的学习

我一直不知道枚举有数量的差别,64个以下(包括)的的枚举是使用了RegularEnumSet,64个以上的使用了JumboEnumSet.最近看编写高质量代码这本书才发现枚举是有数量的限制,不过其实一般的项目还真用不到一个枚举类里面放这么多的枚举数量,不过既然学习了我就随便把它的源码拿出来看看吧,也弥补一下自己确实在枚举这一块的不足. 原谅我见识少,我竟然不知道有EnumMap和EnumSet枚举类的集合,这种时候就是学习的机会了.先看一下这个2个集合类的定义: public class Enu

Guava库学习:Guava中Obejects实用工具类的学习

链接地址:http://www.xx566.com/detail/128.html Java中的Object类是所有Java类的超类(也就是祖先),所有对象都实现Object类中的方法,在日常的工作中,我们经常需要重写其中的几个 方法, 如:equals.toString.hashCode等方法,而在工作中,我们实现这些方法有时候也比较痛苦,如equals方法判断非空. toString调试信息不完整等等,在Guava中,其提供了Objects类帮助我们简化了这些常用方法的实现,接下来,我们一起

(21)UML类图学习

UML类图的学习和使用 1.参考博客http://www.uml.org.cn/oobject/201211231.asp

jvm 类文件结构学习

本文以代码示例来学习 java 类文件的结构,其中对类文件结构的学习均来自周志明先生所著的 <深入理解 Java 虚拟机>一书,在此表示诚挚的感谢. 代码如下: 1 package com.reycg.jvm; 2 3 public class ReferenceCountingGC { 4 5 public Object instance = null; 6 7 public static void testGC() { 8 ReferenceCountingGC objA = new Re