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; } }
相关推荐
- `defaultEncoding`:设置编码格式,默认为UTF-8,以防止中文乱码问题。 - `maxUploadSize`:设置允许上传的最大文件大小。需要注意的是,这里的限制指的是所有文件的总大小,而不是单个文件的大小。 3. **异常...
Spring MVC 是一个强大的 web 应用开发框架,它提供了丰富的功能来处理用户请求,包括文件上传和下载。本文将深入探讨如何使用 Spring MVC 实现文件的上传与下载。 首先,要实现文件上传,我们需要引入一些必要的...
在开发Java Web应用程序时,Spring MVC框架经常遇到中文乱码问题,这主要涉及到字符编码的处理。本篇文章将深入探讨如何彻底解决Spring MVC中的中文乱码问题,以便于开发者能够流畅地处理中文数据。 首先,当用户...
配置 CharacterEncodingFilter (filter 标签), 否则你会发现中文乱码. 因为我的 jsp 和 html 文件都是 UTF-8 编码的, 所以我在 param-value 标签中设置了 UTF-8. 估计你使用的是 GB2312 或者 GBK, 立即转到 UTF-8 ...
### Spring框架中注解出现中文乱码的问题解析与解决方案 #### 问题背景 在Spring框架的应用开发中,尤其是在处理HTTP请求时,经常会遇到通过JSON格式传递数据的情况。然而,在某些场景下,开发者可能会遇到中文...
本篇文章将详细讲解如何在Spring MVC项目中整合IReport来生成PDF,并解决可能出现的中文不显示和乱码问题。 首先,我们需要了解Spring MVC的基本概念。Spring MVC是Spring框架的一部分,它提供了一个模型-视图-控制...
在Spring MVC框架中,开发者经常遇到ResponseBody返回的字符串出现乱码的问题,特别是当字符串中包含中文字符时。这是因为Spring MVC默认使用了StringHttpMessageConverter来处理Response Body中的字符串,而这个...
Spring MVC请求参数与响应结果全局加密和解密详解 在本文中,我们将详细介绍Spring MVC请求参数与响应结果全局加密和解密的相关知识点,包括请求参数的加密和解密、响应结果的加密和解密、ContentType的处理等。 ...
spring mvc 过滤器,实现url过滤,权限模块经常用到的,很不错
在Spring MVC框架中,文件上传是一项常见的功能,它允许用户通过表单提交文件,并将这些文件与其他参数一起处理。在本文中,我们将深入探讨如何在Spring MVC中实现这个功能,同时携带其他参数。 首先,我们需要引入...
在 Web 开发中,参数传递中文乱码问题是一个常见的问题,特别是在使用 Spring MVC 框架时。这篇文章将详细介绍 Spring MVC 参数传递中文乱码解决方法,并提供了多种解决方案。 一、GET 方式中文乱码解决方案 在 ...
在 Spring MVC 中处理中文乱码通常有两种方法: - **设置字符编码过滤器**:通过配置一个全局的字符编码过滤器来解决所有请求的乱码问题。 ```java @WebFilter(urlPatterns = "/*") public class ...
- 配置 CharacterEncodingFilter,解决中文乱码问题。 **4. 实现登录逻辑** - 编写控制器类 (LoginController.java),负责处理登录请求。 - 通过 @RequestMapping 注解指定请求映射路径。 - 在控制器的方法中...
**Spring MVC 中的编码与乱码问题** 在处理中文字符时,可能会遇到乱码问题。为解决这个问题,可以在 Web.xml 中配置 DispatcherServlet 的初始化参数,例如设置编码方式为 UTF-8: ```xml <param-name>...
在Spring MVC3中处理JSON数据的中文乱码问题是一个常见需求,而解决中文乱码的关键在于正确设置字符编码。在当前的IT技术环境下,尤其是在Web开发中,处理数据编码是基本技能之一。当在Web页面上显示中文时,可能会...
7. **处理乱码问题**:为了防止乱码,需要在Controller中设置字符编码,例如,`@RequestMapping(value = "/save", method = RequestMethod.POST, consumes = "application/x-www-form-urlencoded; charset=UTF-8")`...
2. **乱码处理**:可以通过自定义Filter来处理编码问题,例如设置请求和响应的字符编码。 3. **其他注解**:Spring MVC还有许多其他注解,如`@PathVariable`用于处理URI模板变量,`@RequestParam`用于处理请求参数...
该程序使用eclipse作为开发工具,mysql作为数据库。...dwz框架中的乱码问题不用太管,spring mvc自带的过滤器已经配置好了,网页发布到tomcat服务器后查看不会有乱码。 希望能帮到大家。也感谢给我帮助过的人。
总结,解决Spring 3 MVC中GET提交方式乱码问题,主要涉及服务器端的字符编码过滤器配置、Controller方法的参数接收以及前端页面的编码设置。理解HTTP协议和字符编码原理,以及正确配置Spring MVC,将有助于避免此类...
Spring MVC 是一个基于 Java 的轻量级Web应用框架,它主要负责处理后端的业务逻辑,与前端进行交互。在本教程中,我们将深入探讨如何使用 Spring MVC 进行开发。 1. **Spring MVC 概述** Spring MVC 是 Spring ...