springMVC乱码问题
第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文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");都可以使用这个 不论哪里,有乱码就是用
springMVC乱码问题相关推荐
- JAVA_OA(五)(番外篇):SpringMVC乱码解决(post,get)
get:字符转换: 1).xxx =new String(name.getBytes("iso8859-1"),"utf-8"); 2).web.html中&l ...
- springmvc 全局编码_Java SpringMVC乱码问题排查和解决
Java是 Unicode 编码的,稍微不注意,就会出现乱码的问题,乱码的根本原因就是对文本进行编码的时候和解码的时候,所使用的编码字符集不一致导致的.像SpringMVC搭建的Web服务这类事,输入 ...
- 解决springmvc乱码问题
最近用springmvc+mysql给公司写了一个办公软件,前台保存汉字到mysql正常显示,但读取数据库到前台时出现乱码,一堆问号,上网查说这不是乱码问题,几番波折最终解决,直接上代码: <! ...
- SSMSSH项目中 springmvc 乱码问题解决
需要在web.xml文件中配置过滤器: <!-- 过滤器 过滤乱码 --><filter><filter-name>characterEncodingFilter& ...
- springMvc 乱码问题
https://blog.csdn.net/kalision/article/details/46441081
- SpringMVC学习日记总结
SpringMVC 1.回顾MVC 1.1.什么是MVC? MVC是模型,视图,控制器的简写,是一种软件设计规范 MVC主要作用是降低了视图与业务逻辑间的双向耦合 MVC不是设计模式,是架构模式 1. ...
- Spring、SpringMVC、SpringBoot及其插件学习笔记集合(持续更新中....)
笔记目录 语言 1.MyBatis 1.1 普通用法 1.1.1 配置文件 1.1.2 mapper文件 1.2 通用mapper文件 2.Thymeleaf 2.1 命名空间 2.2 依赖 2.3 ...
- MySQL数据库事务、mybatis框架、spring框架、springmvc框架、永和大王门店管理系统(框架第二部分)
第十二章 MySQL数据库事务 一. 事务及四大特性 1.什么是事务 数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行 ...
- java乱码问题解决总结
一.编码的基础概念 首先,要想解决java中文乱码问题就有必要了解一下什么是字符,字符集,编码的概念. 字符:是文字与符号的总称,包括文字.图形符号.数学符号等. 字符集:就是一组抽象字符的集合.字符 ...
最新文章
- dbcp 连接池参数说明
- 为什么大多数IOC容器使用ApplicationContext,而不用BeanFactory
- CSDN在文章头部添加目录
- solr 启动时指定 solr.home
- Linux-C实现GPRS模块发送短信
- 【Python学习】 - sklearn学习 - 自带数据集sklearn.datasets.x
- 中国什么时候才能全面普及 1 Gbps 下行的网速?
- 工业时序大数据质量管理
- Laravel核心解读--Facades
- python之pymysql的使用
- 迅雷java_Java实现迅雷地址转成普通地址
- 中国移动手机支付开放平台网站服务协议
- IBM SPSS Modeler简单案例
- 海思3559a平台 MIPI YUV 驱动开发
- 243.STAMP图形界面微生物组分析软件
- 在BAT工作是什么样的?来听听在职员工们的说法
- ​微信小程序 获取地理位置(显示地图并显示经纬度)​
- linux查询socket资源,TCP的socket资源被耗尽的问题
- Redis——Redis事务性原理
- 计算机组成与设计ch3,计算机体系结构总结
热门文章
- python源代码-Python 源码深度剖析
- python实现http下载文件-Python HTTP下载文件并显示下载进度条功能的实现
- python语言学了有用吗-转行学习Python开发有什么优势
- python使用字典格式化字符串-4.2.3Python下字典的格式化字符串
- python利器怎么用-Python爬虫利器二之Beautiful Soup的用法
- python读取大文件-python读取大文件
- 以下用于数据存储领域的python第三方库是-Python 二级选择题
- python简单编程例子-python简单实例训练(21~30)
- python编程题-python编程练习题目
- python中文意思k-对python中的*args与**kwgs的含义与作用详解