在Servlet的學(xué)習(xí)過程中罕扎,獲取請(qǐng)求參數(shù)是個(gè)非常重要的知識(shí)點(diǎn)憎夷。上節(jié)小傅老師在講解HttpServletRequest抽象類常用方法時(shí)佛舱,也提到了參數(shù)的取得掏膏,本節(jié)我們深入學(xué)習(xí)其原理和亂碼問題。
數(shù)據(jù)存儲(chǔ)方式
請(qǐng)求參數(shù)提交到容器后链蕊,數(shù)據(jù)會(huì)以Map的方式保存事甜。其key是請(qǐng)求參數(shù)的名稱是字符串類型,value就是對(duì)應(yīng)的值是字符串?dāng)?shù)據(jù)類型滔韵。通過高層方法getParameter()與getParameterValues()分別取得單值與多值的參數(shù)逻谦,還可利用Map的知識(shí)點(diǎn)直接取得。
取得參數(shù)值
一般我們約定好請(qǐng)求參數(shù)才能取得其值陪蜻,在請(qǐng)求參數(shù)不定或未知的情況下邦马,可以利用操作Map的方式來取得所有的參數(shù)。
我們先看以下代碼
1)
2)
3)
很明顯第一段的編程效率高,第二段是對(duì)第一段的底層實(shí)現(xiàn)的解釋滋将。第三段代碼充份利用Map的特性邻悬,先取得key然后取得對(duì)應(yīng)的value。第二随闽、三段看的還不是很明白的學(xué)員父丰,借此機(jī)會(huì)正好復(fù)習(xí)下集合的知識(shí),分析分析取到的key是有序列的還是無序集合掘宪。
第二蛾扇、三段代碼充份演示了請(qǐng)求參數(shù)的存儲(chǔ)方式與取得的底層實(shí)現(xiàn),其目地是便于大家的理解魏滚,在實(shí)際編程中還是使用高層方法比較方便屁桑。
中文亂碼
如果請(qǐng)求參數(shù)中包含中文,由于編栏赴、解碼不一致,就有會(huì)出現(xiàn)亂碼靖秩。我們根據(jù)提交的方式须眷,要有針對(duì)性的處理。
客戶端采用get提交沟突,那我們可以在Tomcat的server.xml中調(diào)整編碼值為GBK或GB2312花颗。
對(duì)于POST提交出現(xiàn)的亂碼,我們?cè)谌〉脜?shù)前先設(shè)定編碼值就可解決惠拭。
在未知是get還是post提交扩劝,將這二個(gè)配置一并設(shè)定就可有效解決請(qǐng)求參數(shù)的中文亂碼問題。