在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提交,将这二个配置一并设定就可有效解决请求参数的中文乱码问题。