文档章节

Spring MVC过滤器-字符集过滤器(CharacterEncodingFilter)

丶Lion
 丶Lion
发布于 2015/08/29 16:53
字数 659
阅读 44
收藏 0

Spring的字符集过滤通过用于处理项目中的乱码问题,该过滤器位于org.springframework.web.filter包中,指向类CharacterEncodingFilter,CharacterEncodingFilter源代码如下:

/*
 * Copyright 2002-2007 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.web.filter;

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 encoding;

	private boolean forceEncoding = 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 (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
			request.setCharacterEncoding(this.encoding);
			if (this.forceEncoding) {
				response.setCharacterEncoding(this.encoding);
			}
		}
		filterChain.doFilter(request, response);
	}

}

 

        上述代码显示,在配置字符集过滤器时可设定两个参数的值,如下:

        l  encoding:字符集,即将过滤到的request的字符集设置为encoding指定的值,如UTF-8等,相当于:

request.setCharacterEncoding

    l  forceEncoding:字面意思是强制字符集,但你大可不必按字面意思理解,因为这个参数的值只不过是指定response的字符集是否也设置成encoding所指定的字符集,所以你可以选择设置为true或false,当值为true时,相当于

request.setCharacterEncoding(“”);
response.setCharacterEncoding(“”);

        当值为false时,相当于:

request.setCharacterEncoding(“”);

    默认值为false。

        示例:

        <filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

        以上代码放置在web.xml中,相当于servlet中的:

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

 

© 著作权归作者所有

丶Lion

丶Lion

粉丝 64
博文 42
码字总数 29826
作品 1
济南
后端工程师
私信 提问
web.xml/servlet过滤器之CharacterEncodingFilter

配置CharacterEncodingFilter过滤器,你可以强制将请求或者相应设置成utf-8,规避乱码的风险。 <filter> <filter-name>SetCharacterEncoding</filter-name> <filter-class>org.springframewo......

cjun1990
2015/10/24
284
0
org.springframework.web.filter.CharacterEncodingFilter

感谢:http://blog.csdn.net/heidan2006/article/details/3075730 很简单很实用的一个过滤器,当前台JSP页面和JAVA代码中使用了不同的字符集进行编码的时候就会出现表单提交的数据或者上传/...

随智阔
2014/04/02
78
0
springMVC面试问题整理一

一:springMVC方面的 1;如何搭建springMVC框架 1):下载spring源包 spring-framework-3.1.0.RELEASE-with-docs.zip 下载spring的依赖包spring-framework-3.0.5.RELEASE-dependencies.zip 2......

四月李
2015/12/19
795
4
Spring字符集过滤器CharacterEncodingFilter

spring中的字符集过滤器可以很方便的为我们解决项目中出现的中文乱码问题,而且使用方法也很简单,只需要在web.xml文件中配置一下该过滤器,设置两个重要的参数(encoding和forceEncoding)即...

JackMo2015
2016/11/28
15
0
spring mvc 乱码问题解决办法汇总

第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。 从.java->.class过程是,先编写.java文件并按某种编码方式保存,然后用...

dinggosumsung
2016/10/11
43
0

没有更多内容

加载失败,请刷新页面

加载更多

009、Linux 文件权限管理

Linux 文件权限管理

北岩
3分钟前
1
0
Kafka学习笔记(三)—Kafka消息丢失,消费重复

一、数据传输事务的定义 最多一次(at most once):消息不会被重复发送,但是可能丢失 最少一次 (at least once)消息可能会被重复发送,但是不会漏发送 精确一次(exactly once) 不会少发...

Algoric
7分钟前
1
0
ajax设置请求头部时遇到的问题

w3c规定 当请求的header包含以下字段时 会被zhong'zhi Accept-Charset Accept-Encoding Connection Content-Length Cookie Cookie2 Content-Transfer-Encoding Date Expect Host Keep-Alive......

Bing309
31分钟前
3
0
总结:Linux

一、目录 目录 作用 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。 /etc /home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,...

浮躁的码农
34分钟前
4
0
什么是 happens-before 原则?

Java 中 happens-before 原则,是在 JSR-133 中提出的。 原文摘要: • Each action in a thread happens-before every subsequent action in that thread. • An unlock on a monitor happe......

ConstXiong
47分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部