zoukankan      html  css  js  c++  java
  • SpringMVC编码拦截配置

    jsp中处理乱码会使用request、response对象进行设置,具体方法见:
    http://blog.csdn.net/qq_36330228/article/details/78001736


    在SpringMVC框架中可以直接在web.xml配置一个过滤器对访问的编码进行过滤,会对get和post访问方式直接进行编码设置,配置如下

    <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>
            <!--forceEncoding属性默认值为false,强制改为true,让所有访问使用自己编码encoding  -->
                <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>
    
        <servlet>
            <servlet-name>studentMvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>studentMvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

    org.springframework.web.filter.CharacterEncodingFilter这个类是继承GenericFilterBean和OncePerRequestFilter,也就是说,这个过滤器就是针对于每次浏览器请求进行过滤的,然后再其之上添加了父类没有的功能即处理字符编码。可以关联源码,或者查看API


    下面看下CharacterEncodingFilter类源码
    这里写图片描述

    注意这个属性forceEncoding,它的默认值为false,当过滤器中编码为null时,默认不会给访问处理我们给的编码的,因而这里强制给true


    下面是org.springframework.web.filter.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);
        }
    
    }
    
  • 相关阅读:
    xshell 使用命令上传、下载文件
    linux extglob模式 和rm反选,除了某个文件外的其他文件全部删除的命令
    vscode
    win10文件夹共享
    jquery-自适应全屏背景轮播动画
    jquery-抖动图组轮播动画
    jquery-leonaScroll-1.2-自定义滚动条插件
    jquery-leonaScroll-1.1-自定义滚动条插件
    JavaScript-JQ实现自定义滚动条插件1.0
    JavaScript-JQ初探实现自定义滚动条
  • 原文地址:https://www.cnblogs.com/wangqilong/p/9417522.html
Copyright © 2011-2022 走看看