`

spring mvc 乱码问题

阅读更多

tomacat对GET和POST请求处理方式是不同的

POST: 加过滤器, 即可解决

GET: 加过滤器, 还需要改tomcat的server.xml配置文件(特别注意: eclipse下的 Servers下的server.xml也要改

 

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

 改为:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"  useBodyEncodingForURI="true"/>

 

 

过滤器的几种加法: 

 

方法一: 自定义过滤器,  

	<!-- 自定义编码过滤器 -->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>com.lw.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>characterEncoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>enabled</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 实现方法:

package com.lw.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncodingFilter implements Filter {

    private String characterEncoding; //编码方式配置在web.xml文件中
    private boolean enabled;   //是否启用此Filter,配置在web.xml中

    @Override
    public void destroy() {
        characterEncoding = null;
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {
        if (enabled || characterEncoding != null) {
            request.setCharacterEncoding(characterEncoding);
            response.setCharacterEncoding(characterEncoding);
        }
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
        characterEncoding = config.getInitParameter("characterEncoding");
        enabled = "true".equalsIgnoreCase(config.getInitParameter("enabled").trim());
    }
}

 

方法二: spring mvc 自带过滤器

	<!-- spring mvc 自带编码过滤器  -->
	<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>  
	</filter>  
	<filter-mapping>  
	    <filter-name>CharacterEncodingFilter</filter-name>  
	    <url-pattern>/*</url-pattern>  
	</filter-mapping>

 

方法三: 集成到spring mvc 核心过滤器,   实现org.springframework.web.servlet.DispatcherServlet

    <!-- 集成过滤到核心拦截器中。  自定义过滤, EncodingDispatcherServlet实现核心拦截器DispatcherServlet, -->
	<servlet>  
	 <servlet-name>springMVC</servlet-name>  
	 <servlet-class>com.lw.filter.EncodingDispatcherServlet</servlet-class>  
	 <load-on-startup>1</load-on-startup>
		 <init-param>  
		  <param-name>encoding</param-name>  
		  <param-value>UTF-8</param-value>  
		 </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </init-param>
	</servlet>

 实现方法:

package com.lw.filter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.DispatcherServlet;

public class EncodingDispatcherServlet extends DispatcherServlet {

	private String encoding;

	public void init(ServletConfig config) throws ServletException {
		encoding = config.getInitParameter("encoding");
		super.init(config);
	}

	protected void doService(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		request.setCharacterEncoding(encoding);
		response.setCharacterEncoding(encoding);
		super.doService(request, response);
	}

}

 

附:

很多人说get请求乱码处理办法如下, 但本人测试好像不太奏效

 

<Connector port="8080" maxHttpHeaderSize="8192"    
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"    
               enableLookups="false" redirectPort="8443" acceptCount="100"    
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" /> 

 

 

0
3
分享到:
评论
1 楼 Gozs_cs_dn 2015-04-30  
较简单的方式就是 修改server.xml > URIEncoding="UTF-8"
否则 springMVC 中配置的 CharacterEncodingFilter 对于GET请求无效

相关推荐

    Spring MVC 入门实例

    首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求交给一个名为 helloController ...

    spring mvc过滤器实现

    spring mvc 过滤器,实现url过滤,权限模块经常用到的,很不错

    彻底解决Spring MVC中文乱码问题的方案

    主要介绍了彻底解决Spring MVC中文乱码问题的方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    Spring MVC中默认的ResponseBody为String的乱码问题.pdf

    Spring MVC中默认的ResponseBody为String的乱码问题.pdfSpring MVC中默认的ResponseBody为String的乱码问题.pdf

    dwz+spring mvc+mybatis框架集结使用

    该程序使用eclipse作为开发工具,mysql作为数据库。...dwz框架中的乱码问题不用太管,spring mvc自带的过滤器已经配置好了,网页发布到tomcat服务器后查看不会有乱码。 希望能帮到大家。也感谢给我帮助过的人。

    Spring MVC整合IReport生成PDF及中文不显示、乱码解决

    Spring MVC整合IReport生成PDF及中文不显示、乱码解决

    spring mvc maven mysql 增删改查

    spring mvc maven mysql 增删查改,简单demo,可用,不会出现乱码

    spring mvc controller间跳转 重定向 传参

    这种方式可以实现带参数的重定向,但是有弊端,即传中文可能会有乱码问题。 2. 使用 RedirectAttributes RedirectAttributes 是 Spring MVC 框架提供的一个工具类,可以帮助我们实现带参数的重定向。 attr....

    Spring MVC 复习笔记.rar

    《Spring MVC 复习笔记》博客附件。 博客地址:https://blog.csdn.net/Supreme_Sir/article/details/109349332

    详解Spring MVC3返回JSON数据中文乱码问题解决

    本篇文章主要介绍了Spring MVC3返回JSON数据中文乱码问题解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    springmvc:Spring MVC教程

    Spring MVC教程 教程学习: 本教程完整地讲解了Spring MVC的每个知识点,包括独立运行的Demo示例,欢迎一起交流学习。Java学习交流群:239126529 教程软件版本说明: ...Spring MVC Post中文乱码 @RequestPara

    Spring MVC参数传递中文乱码解决方法分享

    主要介绍了Spring MVC参数传递中文乱码解决方法分享,具有一定借鉴价值,需要的朋友可以参考下。

    spring3 MVC GET提交方式乱码解决

    NULL 博文链接:https://lin-zy.iteye.com/blog/1679831

    基于java的企业级应用开发:整合环境搭建.ppt

    请简述如何解决中文文件名称下载时的乱码问题。 预习检查 SSM框架整合思路是什么? SSM框架整合需要哪些Jar包? 学习目标 掌握 了解 熟悉 SSM框架整合应用程序的编写 1 3 SSM框架的整合思路 2 SSM框架整合时的 配置...

    spring框架 jdbcTemplate

    spring mvc框架 jdbcTemplate 里面有查询,删除,修改,增加操作。 jdbcTemplate dataSOURCE

    SpringMVC+Mybatis JAVA配置 非XML

    1,搭建SpringMVC 2,加载properties配置文件 3,集成mybatis ...7,解决@ResponseBody return String的中文乱码问题 8,配置静态资源映射ResourceHandlers 9,配置ViewControllers 10,配置filter 11,配置拦截器

    springmvc思维导图

    springmvc的概念、springmvc的运行原理(前端控制器、处理器映射器、处理器适配器、处理器、视图解析器)、同步请求的...乱码、请求参数的类型转换、静态资源的方向、文件上传、视图解析器、拦截器、全局异常处理器、

    Spring 实现远程访问详解——jms和activemq

    前几章我们分别利用spring rmi、httpinvoker、httpclient、webservice技术实现不同服务器间的远程访问。本章我将通过spring jms和activemq实现单Web项目服务器间异步访问和多Web项目...6) Spring mvc配置 7) 实例测试

    springmvc-ajax

    项目介绍 这是一个 springmvc + ...也配置了转成json解决乱码的问题 &lt;!-- 1、支持HandlerMapper和HandlerAdapter --&gt; &lt;mvc&gt; &lt;!-- 转成json 为UTF-8 --&gt; &lt;mvc:message-converters register-default

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE ...15.11 解决Spring的中文乱码问题 15.12 运行验证程序 15.13 小结

Global site tag (gtag.js) - Google Analytics