一、在web.xml中的配置
<!-- characterencodingfilter字符编码过滤器 --> <filter> <filter-name>characterencodingfilter</filter-name> <filter-class>org.springframework.web.filter.characterencodingfilter</filter-class> <init-param> <!--要使用的字符集,一般我们使用utf-8(保险起见utf-8最好)--> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> <!--是否强制设置request的编码为encoding,默认false,不建议更改--> <param-name>forcerequestencoding</param-name> <param-value>false</param-value> </init-param> <init-param> <!--是否强制设置response的编码为encoding,建议设置为true,下面有关于这个参数的解释--> <param-name>forceresponseencoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterencodingfilter</filter-name> <!--这里不能留空或者直接写 ' / ' ,否者不起作用--> <url-pattern>/*</url-pattern> </filter-mapping>
二、characterencodingfilter过滤器类浅析
打开该类源码,可以看到该类有三个类属性
private string encoding; //要使用的字符集,一般我们使用utf-8(保险起见utf-8最好) private boolean forcerequestencoding = false; //是否强制设置request的编码为encoding private boolean forceresponseencoding = false; //是否强制设置response的编码为encoding
主要方法只有一个,也就是下面这个,代码逻辑很简单,如注释所解释
@override protected void dofilterinternal(httpservletrequest request, httpservletresponse response, filterchain filterchain) throws servletexception, ioexception { string encoding = getencoding(); if (encoding != null) { //如果设置了encoding的值,则根据情况设置request和response的编码 //若设置request强制编码或request本身就没有设置编码 //则设置编码为encoding表示的值 if (isforcerequestencoding() || request.getcharacterencoding() == null) { request.setcharacterencoding(encoding); } //若设置response强制编码,则设置编码为encoding表示的值 if (isforceresponseencoding()) { //请注意这行代码,下面有额外提醒 response.setcharacterencoding(encoding); } } filterchain.dofilter(request, response); }
if (isforceresponseencoding()) { response.setcharacterencoding(encoding); }
是在
filterchain.dofilter(request, response);
- 转载与
网友评论