參數從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