Spring's character set filtering is used to handle garbled problems in projects. The filter is located in the Org.springframework.web.filter package, pointing to the class Characterencodingfilter,characterencodingfilter source code as follows:
[Java]View PlainCopy
- /*
- * Copyright 2002-2007 The original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * You are not a use this file except in compliance with the License.
- * Obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable or agreed to writing, software
- * Distributed under the License is distributed on a "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 allows one to specify a character encoding for
- * requests. This is useful because current browsers typically does 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
- * ("forceencoding" = "true"). In the latter case, the encoding would also be
- * Applied as Default response encoding on Servlet 2.4+ containers (although
- * This'll usually is 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'll is passed into a
- * {@link javax.servlet.http.httpservletrequest#setcharacterencoding} call.
- * <p>whether This encoding would override existing request encodings
- * (and whether it'll 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. does 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 would only is set on Servlet 2.4+
- * containers, since Servlet 2.3 didn't 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);
- }
- }
The code above shows that you can set the value of two parameters when configuring a character set filter, as follows:
L Encoding: CharSet, the character set of the request to be filtered to encoding the specified value, such as UTF-8, is equivalent to:
[Java]View PlainCopy
- Request.setcharacterencoding
L forceencoding: Literal meaning is mandatory character set, but you do not have to understand the literal meaning, because the value of this parameter is simply to specify whether the character set of the response is also encoding the specified set of characters, so you can choose to set to TRUE or false, When the value is true, the equivalent
[Java]View PlainCopy
- Request.setcharacterencoding ("");
- Response.setcharacterencoding ("");
When the value is false, it is equivalent to:
[Java]View PlainCopy
- Request.setcharacterencoding ("");
The default value is False.
Example:
[Java]View PlainCopy
- <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>
The above code is placed in Web. XML, equivalent to the servlet:
[Java]View PlainCopy
- Request.setcharacterencoding ("UTF-8");
- Response.setcharacterencoding ("UTF-8");
Spring MVC Filter-Character set filter (Characterencodingfilter)