参数从jsp页面传送到controller层的时候经常会发生乱码的问题,在页面编码为UTF-8的前提下,解决方案有二:
一)
controller接收数据时,将类型强制转换
String keyword = new String(request.getParameter("keyword").getBytes("ISO-8859-1"), "utf-8");
二)
查看tomcat的配置文件编码,tomcat的默认编码是iso8859-1,而程序的默认编码为UTF-8,这里出现了冲突,所以修改tomcat下的conf/server.xml文件。
找到如下代码:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
这段代码规定了Tomcat监听HTTP请求的端口号等信息。
修改为如下情况:
<Connector port="8080" URIEncoding="UTF-8" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
第二种方法,是目前这个项目,应用服务器为tomcat,用的是自己的。遇到问题的时候,首先想到的是第一种方法,确实也是这么解决的。在本地是解决了,但是代码提交之后,在服务器上测试,问题并没有解决,到网上查了一下,才知道是tomcat的问题。
修改tomcat的配置文件时,先是修改的tomcat安装路径下的配置文件,重启项目之后并没有效果,再次查看tomcat的配置文件,修改过的代码又还原回去了。
最后在下图的位置修改的配置文件,启动之后,就可以了。
除此之外还想说一个ssm框架插入mysql数据库中文乱码问题解决:
1. 检查web.xml
<!-- 编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2. 检查建表脚本:
CREATE TABLE `t_user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(40) NOT NULL COMMENT '用户名',
`password` varchar(255) NOT NULL COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';
3. 检查项目工程及jsp/java/xml文件
4. 检查jdbc.properties
url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8