如果沒有勾選任何一個(gè)復(fù)選框,則不會(huì)向服務(wù)器Servlet傳送任何數(shù)據(jù)。所以如果直接接收可能會(huì)發(fā)生空指針異常,必須判斷是否接收到的字符串?dāng)?shù)組有數(shù)據(jù)(hobbies!=null)。
重要:
現(xiàn)在,我們?cè)僦匦禄氐?input type="text" name="user" /> 上,如果我們輸入的是中文數(shù)據(jù),點(diǎn)擊提交之后會(huì)是怎樣?
在控制臺(tái)看到的結(jié)果:
結(jié)果就是出現(xiàn)了中文亂碼問題。這是瀏覽器在發(fā)送時(shí)通常要看當(dāng)時(shí)的編碼,如:
或者:
但是??!
在Servlet收到request請(qǐng)求對(duì)象發(fā)來的數(shù)據(jù)時(shí),通過getParameter方法是默認(rèn)查詢“ISO-8859-1”碼表的,所以造成了編碼不一致!
解決方式也很簡(jiǎn)單,只要在Servlet中將獲取的request對(duì)象選擇正確的解碼方式即可,只要在代碼前添加一句:
request.setCharacterEncoding("UTF-8");
就可以獲取表單中正確的中文數(shù)據(jù)了:
注意,對(duì)于響應(yīng)對(duì)象的setCharacterEncoding方法只對(duì)HTTP協(xié)議的POST方式有效,對(duì)GET方式無效。
如果我們將表單提交方式改為GET,那么提交表單中有中文數(shù)據(jù)的話依然在Servlet中會(huì)出現(xiàn)亂碼。
如果想使GET方式也不會(huì)出現(xiàn)中文亂碼,并沒有好的捷徑方法。先要通過getParameter獲取請(qǐng)求數(shù)據(jù)(這時(shí)在Servlet中以ISO8859碼表進(jìn)行解碼),然后再通過ISO8859進(jìn)行編碼成字節(jié)數(shù)組,最后通過創(chuàng)建字符串對(duì)象的方式選擇UTF-8解碼表解出最開始客戶端編碼的數(shù)據(jù)。
代碼如下:
String userTemp = request.getParameter("user");
String username = new String(userTemp.getBytes("ISO8859-1"),"utf-8");
即可。
當(dāng)然這種方式對(duì)POST方式也是有效的。
另外一種對(duì)GET方式是修改Tomcat中的配置文件(這種方式只適合GET方式,用POST方式還是會(huì)亂碼)。通過Tomcat服務(wù)器的首頁,選擇“Configuration”查看配置文檔,選擇“Connector”下的“HTTP”:
在這個(gè)文檔中有一個(gè)URIEncoding屬性,是指可以在server.xml文件中配置這個(gè)屬性,如果沒有這個(gè)屬性,則Tomcat默認(rèn)采用ISO8859-1編碼:
通過在server.xml文件中的標(biāo)簽中添加設(shè)置即可:
由于是在Tomcat中修改server.xml文件,所以服務(wù)器需要重啟。
經(jīng)過這種方式,就無需在代碼中再設(shè)置任何編碼表,所有在服務(wù)器端都會(huì)采用“URIEncoding”屬性設(shè)置的碼表。但這個(gè)方式不建議使用。
同樣在“Configuration”的配置文檔中的“Connector”下的“HTTP”說明文檔中,有useBodyEncodingForURI這么個(gè)屬性:
當(dāng)在server.xml文件中的標(biāo)簽中添加設(shè)置了這個(gè)屬性,還未完成:
還必須在Servlet中同時(shí)調(diào)用了響應(yīng)對(duì)象的setCharacterEncoding方法,就能再次使GET方式不會(huì)出現(xiàn)亂碼:
request.setCharacterEncoding("utf-8");
String username = request.getParameter("user");
同樣,這種配置server.xml文件的方式依然不建議采用。
最后說明一點(diǎn),在HTML編程中,我們也可以使用超鏈接來提交數(shù)據(jù),當(dāng)然這樣的方式屬于HTTP中的GET方式,原理類似于在瀏覽器地址URL后手動(dòng)添加參數(shù),比如如下代碼:
用戶名為中文
跟隨的參數(shù)為中文??!
兩種解決方式:
1、在這個(gè)超鏈接上必須將這個(gè)中文進(jìn)行URL編碼,必須在JSP中進(jìn)行編寫(在后面的篇章中會(huì)介紹如何使用);
2、或者使用上述GET處理中文亂碼的第一種方式,進(jìn)行雙次編碼:
String userTemp = request.getParameter("user");
String username = new String(userTemp.getBytes("ISO8859-1"),"utf-8");
關(guān)于使用HttpServletRequest對(duì)象的作用有哪些就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
本文題目:使用HttpServletRequest對(duì)象的作用有哪些
標(biāo)題路徑:http://weahome.cn/article/psjsgs.html