`

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请求参数与响应结果全局加密和解密详解 在本文中,我们将详细介绍Spring MVC请求参数与响应结果全局加密和解密的相关知识点,包括请求参数的加密和解密、响应结果的加密和解密、ContentType的处理等。 ...

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

    这样,Spring在初始化StringHttpMessageConverter时,我们的处理器会自动运行,确保其支持UTF-8编码,从而避免乱码问题。 通过使用BeanPostProcessor,我们可以在不修改原有Controller代码的情况下,实现对Spring ...

    spring mvc过滤器实现

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

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

    在开发Java Web应用程序时,Spring MVC框架经常遇到中文乱码问题,这主要涉及到字符编码的处理。本篇文章将深入探讨如何彻底解决Spring MVC中的中文乱码问题,以便于开发者能够流畅地处理中文数据。 首先,当用户...

    Spring MVC 文件上传下载

    // 其他辅助方法,如编码文件名以避免乱码问题 private String encodeFileName(String fileName) { // 实现文件名的编码逻辑 } } ``` 在控制器类中,你可以定义处理文件上传和下载的接口。例如,对于文件上传,...

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

    本篇文章将详细讲解如何在Spring MVC项目中整合IReport来生成PDF,并解决可能出现的中文不显示和乱码问题。 首先,我们需要了解Spring MVC的基本概念。Spring MVC是Spring框架的一部分,它提供了一个模型-视图-控制...

    Spring MVC 复习笔记.rar

    **Spring MVC 中的编码与乱码问题** 在处理中文字符时,可能会遇到乱码问题。为解决这个问题,可以在 Web.xml 中配置 DispatcherServlet 的初始化参数,例如设置编码方式为 UTF-8: ```xml &lt;param-name&gt;...

    spring mvc maven mysql 增删改查

    7. **处理乱码问题**:为了防止乱码,需要在Controller中设置字符编码,例如,`@RequestMapping(value = "/save", method = RequestMethod.POST, consumes = "application/x-www-form-urlencoded; charset=UTF-8")`...

    spring mvc 入门介绍

    - 配置 CharacterEncodingFilter,解决中文乱码问题。 **4. 实现登录逻辑** - 编写控制器类 (LoginController.java),负责处理登录请求。 - 通过 @RequestMapping 注解指定请求映射路径。 - 在控制器的方法中...

    spring mvc 自學筆記

    - **设置字符编码过滤器**:通过配置一个全局的字符编码过滤器来解决所有请求的乱码问题。 ```java @WebFilter(urlPatterns = "/*") public class CharacterEncodingFilter implements Filter { private String ...

    Spring MVC注解开发总结

    2. **乱码处理**:可以通过自定义Filter来处理编码问题,例如设置请求和响应的字符编码。 3. **其他注解**:Spring MVC还有许多其他注解,如`@PathVariable`用于处理URI模板变量,`@RequestParam`用于处理请求参数...

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

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

    spring mvc 使用教程

    8. **处理乱码问题** 为了避免乱码,我们需要在控制器中设置请求和响应的编码方式,或者在 `web.xml` 中配置过滤器。 9. **CRUD(增删改查)操作** Spring MVC 提供了丰富的注解支持,如 `@Autowired` 自动注入...

    spring MVC 上传 &下载

    - `defaultEncoding`:设置编码格式,默认为UTF-8,以防止中文乱码问题。 - `maxUploadSize`:设置允许上传的最大文件大小。需要注意的是,这里的限制指的是所有文件的总大小,而不是单个文件的大小。 3. **异常...

    Spring MVC 入门教程

    - **CharacterEncodingFilter**:设置全局的字符编码,避免乱码问题。 - **DispatcherServlet**:作为Spring MVC的核心组件,处理所有HTTP请求,将其分发到相应的控制器上。 2. **`applicationContext.xml`**:这...

    spring MVC所需jar包和filter的配置

    - `CharacterEncodingFilter`:确保请求和响应的字符编码一致,防止乱码问题。配置示例: ```xml &lt;filter-name&gt;characterEncodingFilter &lt;filter-class&gt;org.springframework.web.filter....

    一个简单的spring mvc实例.docx

    3. **filter**:`CharacterEncodingFilter` 过滤器确保所有的HTTP请求都以指定的编码(这里是UTF-8)进行处理,防止乱码问题。 4. **filter-mapping**:将 `encodingFilter` 过滤器应用于所有以 `.do` 结尾的URL,...

    spring3 MVC GET提交方式乱码解决

    总结,解决Spring 3 MVC中GET提交方式乱码问题,主要涉及服务器端的字符编码过滤器配置、Controller方法的参数接收以及前端页面的编码设置。理解HTTP协议和字符编码原理,以及正确配置Spring MVC,将有助于避免此类...

    spring mvc controller间跳转 重定向 传参

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

Global site tag (gtag.js) - Google Analytics