Tomcat中GET和POST請(qǐng)求時(shí)亂碼問(wèn)題及解決
Tomcat中GET和POST請(qǐng)求時(shí)亂碼
自從Tomcat5.x開(kāi)始,GET和POST方法提交的信息,Tomcat采用了不同的方式來(lái)處理編碼。
對(duì)于POST請(qǐng)求,Tomcat會(huì)仍然使用request.setCharacterEncoding方法所設(shè)置的編碼來(lái)處理,如果未設(shè)置,則使用默認(rèn)的iso-8859-1編碼。
而GET請(qǐng)求則不同,Tomcat對(duì)GET請(qǐng)求并不會(huì)考慮使用request.setCharacterEncoding方法設(shè)置的編碼,而會(huì)永遠(yuǎn)使用iso-8859-1編碼,因此,tomcat將會(huì)使用iso-8859-1將提交的字節(jié)轉(zhuǎn)換成字符串。
一般的處理亂碼的方式都是用
request.setCharacterEncoding("utf-8");但是這種方法只對(duì)POST方法提交的表單才有效果。
提供一下四種解決方法
1. 將GET請(qǐng)求改成POST請(qǐng)求,然后就可以使用request.setCharacterEncoding("utf-8");方法設(shè)置編碼,并使用request.getParameter方法直接獲得中文請(qǐng)求參數(shù)了,這種方法簡(jiǎn)單明了。
2.不用改GET請(qǐng)求,在Servlet中使用如下的代碼來(lái)得到中文請(qǐng)求參數(shù)。
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "utf-8");3.對(duì)于GET方法,還可以通過(guò)修改Tomcat的配置來(lái)搞定,方法如下:
在conf/server.xml里的<Connector />標(biāo)簽內(nèi)加URIEncoding="GBK",或者是UTF-8。
如:
<Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>
4.在使用get傳輸參數(shù)時(shí),將參數(shù)中的中文轉(zhuǎn)換成url格式,也就是使用urlEncode和urlDecode來(lái)傳輸,使用這種方式就是把中文轉(zhuǎn)換成以%開(kāi)頭的編碼在url中傳輸。
使用這種方法時(shí),要注意兩點(diǎn):
- 1.前臺(tái)使用urlencode,在后臺(tái)相應(yīng)的使用urldecode。
- 2.使用urlencode的內(nèi)容是參數(shù)內(nèi)空。千萬(wàn)要注意,他是會(huì)把等于號(hào)等符號(hào)也給轉(zhuǎn)換了。所以,最好是先把參數(shù)傳換后再進(jìn)行拼接。而不是把url拼接好再去轉(zhuǎn)換。
對(duì)于POST方法提交的表單,上面的方法二仍然有效,個(gè)人建議使用方法二,因?yàn)榉椒ǘ拇a是利用了Java的編碼能力,對(duì)于所有的Web服務(wù)器都會(huì)有效,而setCharacterEncoding方法是通過(guò)Web服務(wù)器支持的,并不是所有的Web服務(wù)器都會(huì)對(duì)該方法有很好的支持。
Tomcat無(wú)法響應(yīng)get post請(qǐng)求
這是一個(gè)新手很容易犯的錯(cuò)誤,因?yàn)槲沂窃贐站跟著尚硅谷學(xué)的servlet,它的代碼PrintWriter對(duì)象用完之后居然沒(méi)有關(guān)閉?。?!
導(dǎo)致我在idea運(yùn)行的時(shí)候是可以正常運(yùn)行的,然后自己導(dǎo)出war包部署項(xiàng)目就出現(xiàn)tomcat無(wú)法響應(yīng)請(qǐng)求。
doGet和doPost正確方法:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
// Hello
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>" + message + "</h1>");
out.println("</body></html>");
out.flush();
out.close();
}一定要記得加入out.close()啊。
-----------------------------分割線--------------------
我發(fā)現(xiàn)還有一個(gè)錯(cuò)誤,就是windows下的tomcat控制臺(tái)需要按回車(chē)鍵程序才能繼續(xù)執(zhí)行,解決方法:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- tomcat異常解決(Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986)
- 關(guān)于Tomcat出現(xiàn)The origin server did not find a current representation for the target resourc...的問(wèn)題
- 解決Tomcat修改get提交請(qǐng)求亂碼問(wèn)題
- tomcat6下jsp出現(xiàn)getOutputStream() has already been called for this response異常的原因和解決方法
相關(guān)文章
Tomcat使用https配置實(shí)戰(zhàn)教程
這篇文章主要介紹了Tomcat使用https配置實(shí)戰(zhàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
解決tomcat 靜態(tài)頁(yè)面(html)中文亂碼的解決終極篇
這篇文章主要介紹了解決tomcat 靜態(tài)頁(yè)面(html)中文亂碼的解決終極篇,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Apache?Tomcat如何高并發(fā)處理請(qǐng)求
本文主要介紹了Apache?Tomcat如何高并發(fā)處理請(qǐng)求,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
一次因信號(hào)量引發(fā)的tomcat異常退出解決
這篇文章主要給大家介紹了一次因信號(hào)量引發(fā)的tomcat異常退出的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
eclipse配置Tomcat和Tomcat出現(xiàn)無(wú)效端口解決辦法
本文主要介紹了eclipse配置Tomcat和Tomcat出現(xiàn)無(wú)效端口解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12

