记一次SSH中文乱码解决方案

前言:项目中有中文乱码是因为乱码编码产生。

近期在用SSH写OA系统的时候遇到中文乱码问题,解决之余写下一丢丢心得,每天进步一小步,又与大神靠近一大步嘛!^_^!

SSH是否还有公司在使用,SSH还配不醅称为三大框架这里先按下不表,这里只是给出某次博主遇到问题的解决方案。

1.数据库的编码。我的项目默认的用的是utf-8,那么在创建数据库的时候一定也要使用utf-8编码,创建数据库的关键语句:

--创建数据库的sql语句--
create database oa default character set utf8;

--查询数据库编码的sql语句--
show create database oa;

2.项目的编码。新建工程,类型为Web Project,设置默认编码为UTF-8。右键项目名称->Properties->Resource->Text file encoding,选择utf-8,点击Apply应用。
这里写图片描述

3.jsp编码:使用utf-8编码,最好还是在struts.xml配置文件添加过滤编码:

    <!--解决乱码    -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>

这时候我用debug模式在后台接收参数,得到的编码居然还是乱码,用firebug查看浏览器发起的请求url地址:

http://localhost:8080/MyOa1.0/department_edit.action?id=5&parentId=0&name=%E7%B3%BB%E7%BB%9F%E7%A0%94%E5%8F%91%E9%83%A8&description=%E7%B3%BB%E7%BB%9F%E7%A0%94%E5%8F%91%E9%83%A8&x=36&y=10

url传过去本来就是乱码的,才记得,貌似这种方法对get请求不起作用,只对post起作用,于是把我的form表单换成post请求,这时候后台拿到了正确的内容。

<c:if test="${department.id == null}">
    <form action="department_add.action" method="post">
</c:if>
<c:if test="${department.id != null }">
    <form action="department_edit.action" method="post">
</c:if>

上面是jstl的标签,部门管理模块,可是后台拿到正确的内容不表表插入数据库中也正确,这时候向数据库插入的居然还是乱码,一大堆的????

4.配置Hibernate的编码。在jdbc.proties加上以下后缀:

useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull

于是jdbcUrl变成下面的格式:

jdbcUrl     = jdbc:mysql:///oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull

oa是数据库名称,useUnicode=true和character=utf8相信你见名知意,后面的zeroDateTimeBehavior是什么意思呢?意思是如果有某个字段的时间戳是00000–000 00:00:00的时候,那么返回回来的是null,比如数据库有两个字段有时间有关,creattime和updatetime,在insert的时候,如果你只给createtime赋值,没有给updatetime赋值,那么updatetime就是0年0时0分,这时候用上面提示的后缀会将它映射为null。不然在mybatis中,会报格式错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值