解決ssm項目表單數據提交到數據庫亂碼問題

問題:在ssm整合的項目裏,從前臺頁面獲取表單數據存到數據庫中亂碼html

先說解決辦法而後分析:問題出在form表單的提交方式上,個人web.xml配置過濾器都已經指定了編碼集,爲何沒有生效?緣由是,對於在web.xml中配置的過濾器指定編碼集只是對錶單的post提交方式有效,而個人jsp頁面form表單沒有指定method,而對於表單沒有指定提交方式,默認是get方式,也就是在瀏覽器的地址欄能夠看到你提交的表單數據,指定form表單的提交方式爲post就行了,不會出現亂碼。不過在這以前要保證數據庫編碼集和鏈接數據庫的url後面加上指定的編碼集。
web

以前沒有遇到這個問題,正常的在jsp頁面的表單中添加數據,點擊提交,ssm項目中form表單的action配置的是controller中的mapping路徑,ssm項目的流程是用戶提交數據會根據用戶的action中的路徑找到controller中的mapping配置對應的方法,注意,這時候controller中的方法中的形參(通常是一個對象)就已經有值了,這裏是spring mvc強大之處了,只要你的表單中的name屬性和對象中的屬性名一致,spring mvc就會將這些數據自動裝入對象中,也就是在controller中方法的形參(一個對象)在從jsp頁面跳轉過來的時候就已經有值了。說了這麼多看下圖,當你從jsp頁面過來的時候,在方法中輸出對象的信息,是能夠輸出對象的屬性值的。spring


在web.xml中都已經配置了過濾器用來指定編碼集,jsp頁面也指定了編碼集。數據庫

問題就出如今了這裏,在逐步的排查中,根據瀏覽器的調試頁面查看錶單傳過來的數據發現沒有亂碼,懷疑是數據庫那裏亂碼,可是全部的字段包括數據庫都是utf-8的編碼集,不可能有錯,懷疑是在controller的addUser方法中調用了service中的方法的時候,在spring注入的時候亂碼,可是當我寫下上圖中的代碼(在方法的第一句輸出對象的屬性值)的時候,控制檯輸出的信息就是亂碼的(一堆問號),問題的位置肯定了,也就是在spring mvc裝入屬性值的時候就已經亂碼,致使後來存入數據庫的數據亂碼。瀏覽器

在咱們配置的web.xml文件中的過濾器只對post方式提交有效,若是是get方式是不起做用的,若是想用get方式就須要到Tomcat根目錄下找到conf中的server.xml文件,在Connector標籤中加入URIEncoding="UTF-8",以下mvc

<Connector port="8080" protocol="HTTP/1.1"   
           connectionTimeout="20000"   
           redirectPort="8443" URIEncoding="UTF-8" />
其實在表單提交上仍是用post提交好些,像表單參數沒有展現出來,還有就是沒有url長度的限制,在之前看到的get請求的長度限制是255個字節,其實遠遠比這個長,不一樣的瀏覽器還有不一樣的長度限制,因此還不如指定post方式提交。
相關文章
相關標籤/搜索