最近在除錯乙個介面。然後,就被中文亂碼給坑了。
事情的經過是這樣的,領導讓我跟其他伺服器的介面進行對接,簡單點就是我這邊暴露乙個http的請求位址給對方,然後對方發請求到我這邊。然後,對方請求時,使用的是gbk編碼的get請求,然後,中文到我這邊就亂碼了。
最初,我這邊的tomcat使用的是utf-8編碼。然後,接到對方請求後,怎麼轉都轉不過來中文。當初不想改tomcat的配置,我就將(gbk、utf-8、gb2312、ios-8895-1)這四種編碼來迴轉啊!怎麼就轉不過來。
後來,沒辦法。那就只能改我這邊tomcat的編碼了。把server.xml裡面的uriencoding設定成了gbk編碼的格式。然後我就歡天喜地的去找對方除錯,並信誓旦旦的說沒問題了。但是,請求過來以後,悲劇又來了。還是沒有轉過來。還是繼續亂碼,當時跳樓的心都有了(公司是6樓,摔得可疼)。
然後,接下來就是繼續找資料,查方法。最後,就把問題的解決點放在了struts2的國際化,預設編碼格式了。struts2的核心包裡面有乙個default.properties檔案,裡面有乙個struts.i18n.encoding=utf-8的設定。也就是說,struts2預設,utf-8。悲了個劇的,接下來就是要把這個預設的更改過來。具體的更改方法有兩種:
第一,直接用壓縮軟體開啟你的struts核心包,然後找到default.properties檔案,將裡面的配置改了。但是這個方法不夠靈活,因為如果想換其他的格式就悲了個劇了。
第二,在classpath下,增加乙個配置檔案struts.properties,在這個檔案裡面你可以設定很多配置來覆蓋struts的預設配置。這個也是最靈活的修改
。然後,接下來兩個配置都改了,興奮的去接收請求,還是會有亂碼。然後,有研究了一番。最終接收gbk格式的get請求的接收方法如下:
但是,問題又來了。utf編碼格式的有亂碼了,繼續研究,然後針對utf-8的接收是這樣的,
最後,總結。上面標紅的是需要修改內容。由於我這邊的系統,是可以明確知道是什麼型別什麼編碼請求過來,所以我做了乙個配置,對於不同的請求使用不同的引數獲取方法。但是,對於一些系統。不知道請求的具體格式。我這種方法就不適用。所以,這個後期還是需要繼續優化研究的。如果,哪位大神有好的解決方法,也請多多噴水告知。在下細聽便是。
貪吃的jetty被撐死了
在大量請求並且請求處理時間較長的情況下,jetty的nio模式會導致容器執行緩慢。用apache ab對jetty容器發出大規模持續的併發請求,用命令 jstat gcutil h 10 pid 1000 檢視gc情況,等到young old區到100 時停止施壓。用 jmap histo pid ...
SpringMVC中文亂碼踩坑記錄
目錄 使用springmvc在返回乙個字串時發生了中文亂碼問題。produces屬性無效 新增常用的過濾器org.springframework.web.filter.characterencodingfilter依然無法解決 characterencodingfilter org.springfr...
Tomcat下被忽略的中文亂碼問題GET請求
在web開發下一直使用的filter進行轉碼的。request.setcharacterencoding utf 8 發現傳遞之後一直是亂碼。必須用new string request.getparameter role getbytes iso 8859 1 utf 8 進行轉換。原來tomcat...