`
json20080301
  • 浏览: 166256 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

SPRING MVC上传的中文乱码问题

 
阅读更多

spring-mvc-showcase中有关于文件上传的代码,但代码都是基于英文编写,对于中文的乱码问题却没有提及,这个让中国的IT民工相当郁闷;把我也郁闷了一阵,仔细地看了看他的源码;问题得到了解决;先直接给出解决方案,后面再对照源码看他是如何处理编码问题的。

 

1.首先对所有request设置强制编码:(WEB.XML)

  <filter>  

 <filter-name>Set Character Encoding</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>Set Character Encoding</filter-name>  

   <url-pattern>/*</url-pattern>  

</filter-mapping> 

 

2.在JSP页面进行页面编码:(spring-mvc-showcase-master/src/main/webapp/WEB-INF/views/fileupload.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

或者 <form action="form_action.asp" accept-charset="UTF-8">

 

只需要这两条就可以解决乱码问题,如果是GBK,把对应的位置更换成GBK即可;

 

=============================================================================

文件上传时编码优先级别如下:

//fileItem.getContentType() 第一优先级

 

request.getCharacterEncoding() 第二优先级 (可以通过过滤器设置)

 

> FileUpload().getHeaderEncoding 第三优先级 (通过配置CommonsMultipartResolver 的setDefaultEncoding() )配置代码如下:

<beans:property name="defaultEncoding" value="UTF-8" />

 

> WebUtils.DEFAULT_CHARACTER_ENCODING 第四优先级 (如果上面都没有配置那么就是ISO-8859-1)

 

//表单元素的编码规则:fileItem.getContentType() >  determineEncoding(request) = request.getCharacterEncoding()> FileUpload().getHeaderEncoding > WebUtils.DEFAULT_CHARACTER_ENCODING

 

 

public class MyMultipartResolver extends CommonsMultipartResolver {
	private static final Log log = LogFactory.getLog(MyMultipartResolver.class);

	//fileItem.getContentType() >request.getCharacterEncoding()> FileUpload().getHeaderEncoding > WebUtils.DEFAULT_CHARACTER_ENCODING
	//表单元素的编码规则:fileItem.getContentType() >  determineEncoding(request) = request.getCharacterEncoding()> FileUpload().getHeaderEncoding > WebUtils.DEFAULT_CHARACTER_ENCODING
	@Override
	protected String determineEncoding(HttpServletRequest request) {
		String encoding = request.getCharacterEncoding();
		log.debug(" request.getCharacterEncoding --->" + encoding );
		if (encoding == null) {
			encoding = getDefaultEncoding();
			log.debug(" getDefaultEncoding --->" + encoding );
		}
		return encoding ; 
	}

	// CUSTOM  Encoding
	@Override
	protected String getDefaultEncoding() {
		String encoding = getFileUpload().getHeaderEncoding();
		log.debug(" getFileUpload().getHeaderEncoding --->" + encoding );
		if (encoding == null) {
			encoding = WebUtils.DEFAULT_CHARACTER_ENCODING;
			log.debug(" WebUtils.DEFAULT_CHARACTER_ENCODING --->" + encoding );
		}
		return encoding;
	}
	
	@SuppressWarnings("unchecked")
	protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
		String encoding = determineEncoding(request);
		log.debug(" determineEncoding --->" + encoding );
		FileUpload fileUpload = prepareFileUpload(encoding);
		try {
			List<FileItem> fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);
			return parseFileItems(fileItems, encoding);
		}
		catch (FileUploadBase.SizeLimitExceededException ex) {
			throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex);
		}
		catch (FileUploadException ex) {
			throw new MultipartException("Could not parse multipart servlet request", ex);
		}
	}

	 
	protected FileUpload prepareFileUpload(String encoding) {
		FileUpload fileUpload = getFileUpload();
		FileUpload actualFileUpload = fileUpload;

		// Use new temporary FileUpload instance if the request specifies
		// its own encoding that does not match the default encoding.
		if (encoding != null && !encoding.equals(fileUpload.getHeaderEncoding())) {
			actualFileUpload = newFileUpload(getFileItemFactory());
			actualFileUpload.setSizeMax(fileUpload.getSizeMax());
			actualFileUpload.setHeaderEncoding(encoding);
		}
		log.debug(" actualFileUpload  HeaderEncoding--->" + actualFileUpload.getHeaderEncoding() );
		return actualFileUpload;
	}


}

 

 
分享到:
评论

相关推荐

    spring MVC 上传 &下载

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

    Spring MVC 文件上传下载

    Spring MVC 是一个强大的 web 应用开发框架,它提供了丰富的功能来处理用户请求,包括文件上传和下载。本文将深入探讨如何使用 Spring MVC 实现文件的上传与下载。 首先,要实现文件上传,我们需要引入一些必要的...

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

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

    Spring MVC 入门实例

    配置 CharacterEncodingFilter (filter 标签), 否则你会发现中文乱码. 因为我的 jsp 和 html 文件都是 UTF-8 编码的, 所以我在 param-value 标签中设置了 UTF-8. 估计你使用的是 GB2312 或者 GBK, 立即转到 UTF-8 ...

    spring注解出现中文乱码

    ### Spring框架中注解出现中文乱码的问题解析与解决方案 #### 问题背景 在Spring框架的应用开发中,尤其是在处理HTTP请求时,经常会遇到通过JSON格式传递数据的情况。然而,在某些场景下,开发者可能会遇到中文...

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

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

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

    在Spring MVC框架中,开发者经常遇到ResponseBody返回的字符串出现乱码的问题,特别是当字符串中包含中文字符时。这是因为Spring MVC默认使用了StringHttpMessageConverter来处理Response Body中的字符串,而这个...

    Spring MVC请求参数与响应结果全局加密和解密详解

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

    spring mvc过滤器实现

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

    spring mvc实现文件上传并携带其他参数的示例

    在Spring MVC框架中,文件上传是一项常见的功能,它允许用户通过表单提交文件,并将这些文件与其他参数一起处理。在本文中,我们将深入探讨如何在Spring MVC中实现这个功能,同时携带其他参数。 首先,我们需要引入...

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

    在 Web 开发中,参数传递中文乱码问题是一个常见的问题,特别是在使用 Spring MVC 框架时。这篇文章将详细介绍 Spring MVC 参数传递中文乱码解决方法,并提供了多种解决方案。 一、GET 方式中文乱码解决方案 在 ...

    spring mvc 自學筆記

    在 Spring MVC 中处理中文乱码通常有两种方法: - **设置字符编码过滤器**:通过配置一个全局的字符编码过滤器来解决所有请求的乱码问题。 ```java @WebFilter(urlPatterns = "/*") public class ...

    spring mvc 入门介绍

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

    Spring MVC 复习笔记.rar

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

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

    在Spring MVC3中处理JSON数据的中文乱码问题是一个常见需求,而解决中文乱码的关键在于正确设置字符编码。在当前的IT技术环境下,尤其是在Web开发中,处理数据编码是基本技能之一。当在Web页面上显示中文时,可能会...

    spring mvc maven mysql 增删改查

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

    Spring MVC注解开发总结

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

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

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

    spring3 MVC GET提交方式乱码解决

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

    spring mvc 使用教程

    Spring MVC 是一个基于 Java 的轻量级Web应用框架,它主要负责处理后端的业务逻辑,与前端进行交互。在本教程中,我们将深入探讨如何使用 Spring MVC 进行开发。 1. **Spring MVC 概述** Spring MVC 是 Spring ...

Global site tag (gtag.js) - Google Analytics