博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC过滤器-字符集过滤器(CharacterEncodingFilter)
阅读量:7251 次
发布时间:2019-06-29

本文共 4393 字,大约阅读时间需要 14 分钟。

hot3.png

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. * * 

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.  * 

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.  * 

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.  * 

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。

        示例:

        
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
characterEncodingFilter
/*

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

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

 

转载于:https://my.oschina.net/glorylion/blog/499000

你可能感兴趣的文章
word的多级列表&自动编号
查看>>
SSH之密钥登陆
查看>>
批量上传公钥到Linux服务器
查看>>
关于日立存储更换故障硬盘
查看>>
从程序员到技术领导者
查看>>
squid的配置及应用
查看>>
pycharm,vim,items2常用快捷键
查看>>
数据支撑环境的改造
查看>>
ifconfig 命令用来查看和配置网络设备
查看>>
symbol AP5131重置密码和恢复出厂设置
查看>>
自定义一个jdbc框架
查看>>
yarn上手体验
查看>>
BPMN 2.0规范详解
查看>>
每天学习一个LINUX命令:pwd 显示当前目录(Print-Working-Directory)
查看>>
2.27linux和windows互传文件 3.1 用户配置文件和密码配置文件 3.2 用户组管理
查看>>
linux下yum三种搭建方法
查看>>
QTP对日前控件的处理
查看>>
前端技术/前端冷知识集锦
查看>>
RGW Usage类解析
查看>>
模板引擎缓存
查看>>