web.xml还不会配置编码过滤器?
生活随笔
收集整理的這篇文章主要介紹了
web.xml还不会配置编码过滤器?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景
當出現中文亂碼問題,Spring中可以利用CharacterEncodingFilter過濾器解決。
實現
打開web.xml
<!-- 編碼過濾器 --><!-- 其中兩個的filter-name要一致 --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><async-supported>true</async-supported><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>驗證 filter-class是否添加正確,按住ctrl,鼠標左鍵懸浮上去,出現鏈接下劃線,并且能定位過去,則沒問題。
定位過去的源碼為:
/** Copyright 2002-2016 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;import org.springframework.util.Assert;/*** Servlet 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 (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 forceRequestEncoding = false;private boolean forceResponseEncoding = false;/*** Create a default {@code CharacterEncodingFilter},* with the encoding to be set via {@link #setEncoding}.* @see #setEncoding*/public CharacterEncodingFilter() {}/*** Create a {@code CharacterEncodingFilter} for the given encoding.* @param encoding the encoding to apply* @since 4.2.3* @see #setEncoding*/public CharacterEncodingFilter(String encoding) {this(encoding, false);}/*** Create a {@code CharacterEncodingFilter} for the given encoding.* @param encoding the encoding to apply* @param forceEncoding whether the specified encoding is supposed to* override existing request and response encodings* @since 4.2.3* @see #setEncoding* @see #setForceEncoding*/public CharacterEncodingFilter(String encoding, boolean forceEncoding) {this(encoding, forceEncoding, forceEncoding);}/*** Create a {@code CharacterEncodingFilter} for the given encoding.* @param encoding the encoding to apply* @param forceRequestEncoding whether the specified encoding is supposed to* override existing request encodings* @param forceResponseEncoding whether the specified encoding is supposed to* override existing response encodings* @since 4.3* @see #setEncoding* @see #setForceRequestEncoding(boolean)* @see #setForceResponseEncoding(boolean)*/public CharacterEncodingFilter(String encoding, boolean forceRequestEncoding, boolean forceResponseEncoding) {Assert.hasLength(encoding, "Encoding must not be empty");this.encoding = encoding;this.forceRequestEncoding = forceRequestEncoding;this.forceResponseEncoding = forceResponseEncoding;}/*** 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;}/*** Return the configured encoding for requests and/or responses* @since 4.3*/public String getEncoding() {return this.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>This is the equivalent to setting both {@link #setForceRequestEncoding(boolean)}* and {@link #setForceResponseEncoding(boolean)}.* @see #setForceRequestEncoding(boolean)* @see #setForceResponseEncoding(boolean)*/public void setForceEncoding(boolean forceEncoding) {this.forceRequestEncoding = forceEncoding;this.forceResponseEncoding = forceEncoding;}/*** Set whether the configured {@link #setEncoding encoding} of this filter* is supposed to override existing request 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.* @since 4.3*/public void setForceRequestEncoding(boolean forceRequestEncoding) {this.forceRequestEncoding = forceRequestEncoding;}/*** Return whether the encoding should be forced on requests* @since 4.3*/public boolean isForceRequestEncoding() {return this.forceRequestEncoding;}/*** Set whether the configured {@link #setEncoding encoding} of this filter* is supposed to override existing response encodings.* <p>Default is "false", i.e. do not modify the encoding.* Switch this to "true" to enforce the specified encoding* for responses in any case.* @since 4.3*/public void setForceResponseEncoding(boolean forceResponseEncoding) {this.forceResponseEncoding = forceResponseEncoding;}/*** Return whether the encoding should be forced on responses.* @since 4.3*/public boolean isForceResponseEncoding() {return this.forceResponseEncoding;}@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {String encoding = getEncoding();if (encoding != null) {if (isForceRequestEncoding() || request.getCharacterEncoding() == null) {request.setCharacterEncoding(encoding);}if (isForceResponseEncoding()) {response.setCharacterEncoding(encoding);}}filterChain.doFilter(request, response);}}?
總結
以上是生活随笔為你收集整理的web.xml还不会配置编码过滤器?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中使用PIL快速实现二值图
- 下一篇: SSM整合的Maven项目中引入Boot