`

spring mvc 表单提交乱码

 
阅读更多
解决方法:web.xml中加入下面代码

<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>
   <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>

 

PS:
第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。

从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码保存则要带encoding参数指明实际编码,否则出错,生成的.class文件存为系统默认编码。

从.jsp->.java->.class,先存为某种编码的.jsp文件,然后tomcat根据pageEncoding读取并转化为servlet存为系统默认编码,然后同上面.java->.class过程。

第二,IDE的encoding为对系统下文件打开的解码方式或保存的编码方式。特例:如果.jsp文件有<%@ page language="java" pageEncoding="UTF-8"%>,则eclipse会自动存为UTF-8方式,不管eclipse的encoding是什么,这也是eclipse的聪明之处。

第三,
pageEncoding="UTF-8"表示此文件的编码方式,必须与此文件存储方式一致(所以eclipse会首选根据它来存文件),tomcat根据这个来读此.jsp文件并编译为servlet。
contentType="text/html;charset=UTF-8"表示当浏览器得到此文件时以什么方式解码。例如:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=iso8859-1"%>
<html>
<head>
<title>test</title>
</head>
<body>
我是个好人
</body>
</html>
会产生乱码,因为存为UTF-8的文件被解码为iso8859-1,这样 如有中文肯定出乱码。

至此,页面应为:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
<title>中文问题</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
</html>

第四,
request.setCharacterEncoding("UTF-8")是把提交内容的字符集设为UTF-8
response.setCharacterEncoding("UTF-8")可以把页面中的<%@ page contentType="text/html;charset=iso8859-1"%>换为charset=UTF-8,是给告诉浏览器我这个文件的编码方式。

第五,表单提交:无论何种表单提交都可以在后台的java文件中通过String des = new String(s.getBytes("iso8859-1"),"UTF-8");来转换成你想要的UTF-8编码方式。但如果每处都加词句太麻烦,故分post和get两种方式区分提交(tomcat5以后分开处理,之前处理方式一样,即都可以用request.setCharacterEncoding("UTF-8")方法处理,不过tomcat5以后get提交方法用此语句无效)。
1,post提交的数据:
程序加上org.springframework.web.filter.CharacterEncodingFilter过滤器.
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

因为规范要求浏览器提交数据都要用utf8编码,所以这里设置编码方式为UTF8.

特别注意:
a,这个过滤器只是简单的调用:request.setCharacterEncoding(this.encoding);
在这个语句之前不能调用任何的request.getParameter()方法,否则会设置tomcat的缺省字符集为"ISO-8859-1",并且使setCharacterEncoding的调用失效.所以在这个过滤器之前的过滤器中不能有对getParameter这类方法的调用,比较安全的做法就是把这个过滤器尽量靠前放.
b,在server.xml中不能加上<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
这个value也设置tomcat的缺省字符集为"ISO-8859-1",使setCharacterEncoding的调用失效.可能其他的value也有这个问题,我没有测试过.
如果要观察http请求参数,可以考虑用过滤器或者其他工具,例如ethereal([url]http://www.ethereal.com/[/url])

2,get提交的数据:
两种情况:
a,如果从地址栏直接输入汉字,则一般编码为"GBK",需要用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出
b,如果是页面超连接连接中带的汉字,则编码根据页面编码的不同而不同,如果页面的
content="text/html; charset=utf-8",则在tomcat/conf/server.xml中的配置文件中:
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" />

加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容.
如果content="text/html; charset=GBK",需用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出,其他情况类似.

总结:
1,所有页面使用utf8编码,
2,服务器加上过滤器,
3,server.xml中不要使用
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
4,server.xml文件加上useBodyEncodingForURI="true"
这样应该可以搞定大多数前台的中文问题.至于地址栏输入中文,不支持也罢,一般的程序很少要求
从这里输入.

第六,连接数据库

1、mysql配置文件:
修改mysql在windows\my.ini里default-character-set=utf-8

2、mysql里数据库和表也都设为utf8_unicode_ci

3、数据库连结:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
注意,关键就在于此:此句中间是'&'不是'&'这是因为数据库连结时,在.jsp和.java文件中应该用&号,而XML文件中需要用&

对于Web容器来说,如果你不设置,默认是ISO8859-1
String des = new String(s.getBytes("iso8859-1"),"UTF-8");都可以使用这个 不论哪里,有乱码就是用
 
分享到:
评论

相关推荐

    spring mvc 入门介绍

    - 设置表单的 action 属性指向“login.do”,表示表单提交时的数据会发送到这个 URL。 **3. 配置 web.xml 文件** - 配置 ContextLoaderListener,确保在应用程序启动时加载 Spring 应用上下文。 - 配置 ...

    Spring MVC 文件上传下载

    在 `src/context/dispatcher.xml` 配置文件中,我们需要创建一个名为 `multipartResolver` 的 bean,指定为 `CommonsMultipartResolver` 类型,这样 Spring 就能够解析多部分表单数据。配置如下: ```xml class=...

    Spring MVC注解开发总结

    POST请求时,参数通常来自表单提交,形参名与表单字段名一致。 四、配置类和扫描范围 1. **@ComponentScan**:类级别注解,用于指定Spring自动扫描的包,以便发现并注册带有特定注解(如`@Controller`)的类。 2....

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

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

    spring mvc 使用教程

    Spring MVC 提供了 `form:form`、`form:input` 等标签简化表单处理,例如: ```jsp ... ``` 以上就是 Spring MVC 的基础使用教程,通过这些知识,你可以构建一个完整的后端应用。继续学习和实践,你将...

    spring MVC 上传 &下载

    ### Spring MVC 文件上传详解 #### 一、Spring MVC与文件上传概述 在现代Web应用开发中,文件上传是一项常见的需求。Spring MVC框架提供了强大的支持来处理这类操作,它利用了Apache Commons FileUpload库来实现...

    一个简单的spring mvc实例.docx

    【Spring MVC基本概念】 Spring MVC 是 Spring 框架的一部分,专门用于构建Web应用程序的控制器层。它提供了一个模型-视图-控制器(MVC)架构,帮助开发者将业务逻辑、数据处理和用户界面分离,使得应用更易于管理...

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

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

    springMVC比较常见的配置以API

    `BaseCommandController`是Spring MVC中用于处理表单提交的控制器,它继承自`AbstractCommandController`,并提供了处理命令对象(Command Object)的基础功能。然而,Spring 3.0之后,推荐使用`@ModelAttribute`...

    Spring MVC面试宝典1.pdf

    - 解析用户输入(如表单提交)。 - 调用业务逻辑层处理业务。 - 准备视图数据。 - 将视图数据返回给前端展示。 ##### 1.5 SpringMVC的控制器单例模式,怎么解决线程安全问题? 在SpringMVC中,控制器通常被定义为...

    解决表单post,get到springMVC后台乱码的问题

    在 Spring MVC 框架中,处理表单提交数据时可能会出现乱码问题,尤其是在使用 POST 或 GET 请求时。这篇文章将分享解决表单post,get到springMVC后台乱码的问题的方法,并对相关知识点进行详细的解释。 乱码问题的...

    MySpringMVC-字符乱码处理.rar

    例如,当用户通过表单提交非ASCII字符时,如果服务器端的字符编码设置不正确,就可能导致乱码。 1. **HTTP请求参数编码**: Spring MVC默认使用ISO-8859-1作为HTTP请求参数的编码,这可能无法正确处理中文等非...

    Spring MVC的文件下载实例详解

    Spring MVC是Java开发中常用的Web框架,它基于Servlet API构建,提供了模型-视图-控制器(MVC)架构。本文将深入解析如何在Spring MVC中实现文件下载功能,包括文件读取、响应头设置、以及如何处理不同浏览器的兼容...

    EXT异步提交FORM表单

    ### EXT异步提交FORM表单...通过以上内容,我们不仅了解了EXT异步提交FORM表单的具体实现细节,还深入探讨了其与Struts2/Spring2.5框架的集成方法。这将有助于开发者更好地利用这些技术栈构建高效稳定的Web应用程序。

    传值 乱码 处理 jsp 处理表单时

    3. **国际化支持**:考虑使用Spring MVC等框架提供的国际化支持,便于管理多语言环境下的编码问题。 综上所述,在JSP开发中遇到乱码问题时,最重要的是要确保各个环节的字符编码一致性。通过上述方法可以有效地避免...

    JAVA框架面试题汇总.docx

    10. **自动绑定**:Spring MVC能自动将表单参数注入到方法参数,与表单name属性匹配。 11. **Bean注入**:Spring框架支持自动注入Bean属性,简化了代码。 12. **HTTP请求处理**:可以通过HttpServletRequest和...

    JAVA框架面试题汇总编程资料

    2. **方法参数绑定**:Spring MVC会自动将表单参数注入到方法参数中,要求方法参数名称与表单元素的`name`属性相匹配。 3. **自动注入Bean属性**:如果方法参数是一个JavaBean类型,Spring MVC会自动将表单参数与...

    03.SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢.zip

    总结,解决Spring MVC中的POST和GET请求中文乱码问题,关键在于确保整个系统从客户端到服务器端的字符编码一致性,包括过滤器、控制器参数、表单提交以及服务器配置等。遵循以上步骤,可以有效避免中文乱码的出现。...

    SpringMVC(九)文件上传和下载

    在Spring MVC中,文件上传通常涉及到前端表单提交和后端控制器处理。前端使用HTML5的`&lt;input type="file"&gt;`元素来选择用户想要上传的文件,然后通过AJAX或者传统的HTTP POST方式提交到服务器。在后端,Spring MVC...

    spring boot xss防御

    4. Spring MVC的Filter配置: - 自定义Filter实现`Filter`接口,对请求和响应进行拦截,对敏感数据进行处理。 - 使用`CharacterEncodingFilter`确保所有请求和响应都使用UTF-8编码,防止乱码问题,同时也对输入...

Global site tag (gtag.js) - Google Analytics