EL表达式取值中文再发送请求时会乱码

 问题描述:

在网站底部进行评论,点击提交按钮时,后台tomcat报错,通过火狐浏览器的firebug看到发送的POST请求体中,有一个title参数是乱码,

导致该字段超长违反了数据库字段的长度约束:

这个title字段的应该是文章的标题(中文):

tomcat报错信息:

2017-06-15 16:15:50,448 DEBUG [modules.cms.dao.CommentDao.findList] - <==      Total: 1
============乱码部分内容===========&auml;&cedil;&shy;&aring;&curren;&reg;&ccedil;&not;&not;&aring;&auml;&cedil;&aring;&middot;&iexcl;&egrave;&sect;
&ccedil;&raquo;&aring;&eacute;&egrave;&yen;&iquest;&ccedil;&aring;&sect;&aring;&eacute;&brvbar;&aring;&middot;&iexcl;
&egrave;&sect;&amp;ldquo;&aring;&aring;&curren;&acute;&ccedil;&amp;rdquo;&aelig;&aring;&micro; 2017-06-15 16:17:12,911 DEBUG [modules.cms.dao.CommentDao.get] - ==> Preparing:
SELECT a.id AS "id", a.category_id AS "category.id", a.content_id AS "contentId", a.title AS "title", a.content AS "content", a.name AS "name",
a.ip AS "ip", a.create_date AS "createDate", a.audit_user_id AS "auditUser.id", a.audit_date AS "auditDate", a.del_flag AS "delFlag"
FROM cms_comment a WHERE a.id = ? 2017-06-15 16:17:12,912 DEBUG [modules.cms.dao.CommentDao.get] - ==> Parameters: 0(String) 2017-06-15 16:17:12,913 DEBUG [modules.cms.dao.CommentDao.get] - <== Total: 0 2017-06-15 16:17:12,917 DEBUG [modules.cms.dao.CommentDao.insert] - ==> Preparing:
INSERT INTO cms_comment( id, category_id, content_id, title, content, name, ip, create_date, audit_user_id, audit_date, del_flag )
VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) 2017-06-15 16:17:12,924 DEBUG [modules.cms.dao.CommentDao.insert] - ==>
Parameters:

  dd82abcfbd4d4176b8400dce7b8a0dd0(String),
  106c3f5a9d354d69946304ba1003e85e(String),
  9948c62c9ab4491daadccfe23032534b(String),

  &auml;&cedil;&shy;&aring;&curren;&reg;&ccedil;&not;&not;&aring;&auml;&cedil;&aring;&middot;&iexcl;&egrave;&sect;
  &ccedil;&raquo;&aring;&eacute;&egrave;&yen;&iquest;&ccedil;&aring;&sect;&aring;&eacute;&brvbar;&aring;&middot;
  &iexcl;&egrave;&sect;&amp;ldquo;&aring;&aring;&curren;&acute;&ccedil;&amp;rdquo;&aelig;&aring;&micro;(String),

  测试评论(String),
  小李(String),
  0:0:0:0:0:0:0:1(String),
  2017-06-15 16:17:12.916(Timestamp),
  null,
  null,
  2(String)
2017-06-15 16:17:13,035 ERROR [500.jsp] - ### Error updating database. Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'title' at row 1 ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: INSERT INTO cms_comment( id, category_id, content_id, title, content, name, ip, create_date,
audit_user_id, audit_date, del_flag ) VALUES (
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ### Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'title' at row 1 ; SQL []; Data truncation: Data too long for column 'title' at row 1; nested exception is com.mysql.jdbc.MysqlDataTruncation:
Data truncation: Data too long for column 'title' at row 1 org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'title' at row 1 ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL:
    INSERT INTO cms_comment(id, category_id, content_id, title, content, name, ip, create_date,
                  audit_user_id, audit_date, del_flag )

    VALUES (
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ### Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'title' at row 1 ; SQL []; Data truncation: Data too long for column 'title' at row 1; nested exception is com.mysql.jdbc.MysqlDataTruncation:
               Data truncation: Data too long for column 'title' at row 1 at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:102) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:74) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:399) at com.sun.proxy.$Proxy27.insert(Unknown Source)

通过提示可以看出,执行SQL语句时报字段超长的错误,文章的中文标题在乱码之后,超出了title字段所允许的长度,因为数据库中title字段的长度为255:

 

解决办法:

打开tomcat的conf目录下的server.xml文件,在Connector标签中添加 URIEncoding="utf-8" 即可:

 

重启tomcat,再次测试,评论提交成功,也不再乱码了:

 

附jsp页面中EL表达式取值部分代码:

 

如果觉得本文对您有帮助,不妨扫描下方微信二维码打赏点,您的鼓励是我前进最大的动力:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值