在Servlet的學習過程中,獲取請求參數是個非常重要的知識點。上節小傅老師在講解HttpServletRequest抽象類常用方法時,也提到了參數的取得,本節我們深入學習其原理和亂碼問題。
數據存儲方式
請求參數提交到容器后,數據會以Map的方式保存。其key是請求參數的名稱是字符串類型,value就是對應的值是字符串數據類型。通過高層方法getParameter()與getParameterValues()分別取得單值與多值的參數,還可利用Map的知識點直接取得。
取得參數值
一般我們約定好請求參數才能取得其值,在請求參數不定或未知的情況下,可以利用操作Map的方式來取得所有的參數。
我們先看以下代碼
1)
2)
3)
很明顯第一段的編程效率高,第二段是對第一段的底層實現的解釋。第三段代碼充份利用Map的特性,先取得key然后取得對應的value。第二、三段看的還不是很明白的學員,借此機會正好復習下集合的知識,分析分析取到的key是有序列的還是無序集合。
第二、三段代碼充份演示了請求參數的存儲方式與取得的底層實現,其目地是便于大家的理解,在實際編程中還是使用高層方法比較方便。
中文亂碼
如果請求參數中包含中文,由于編、解碼不一致,就有會出現亂碼。我們根據提交的方式,要有針對性的處理。
客戶端采用get提交,那我們可以在Tomcat的server.xml中調整編碼值為GBK或GB2312。
對于POST提交出現的亂碼,我們在取得參數前先設定編碼值就可解決。
在未知是get還是post提交,將這二個配置一并設定就可有效解決請求參數的中文亂碼問題。