文章目录-1、中文乱码问题解决0、简介1、getParameter从参数名称获取参数值2、getParameterValues从参数名称获取参数值数组3、getParameterNames均为
-1、解决中文乱码问题
开始之前,解决中文乱码的问题。 Tomcat 8以上解决了GET方式的中文乱码问题,但没有解决开机自检方式的乱码。 只需在代码中添加一行。
request.setcharacterencoding (utf-8 ); 没关系
0、概要进入正题,下表介绍了获取请求参数的常用方法。
方法说明从stringgetparameter[stringname]参数名称中获取参数值string [ ] getparameter values [ string name ] 从参数名称获取参数值数组enumerationstringgetparametername获取所有请求参数的名称MapString,String[] getParameterMap ) )获取所有参数
formaction=' request demo4' method=' post ' input type=' text ' name=' username ' placeholder='用户名' br input type=游戏input type=' checkbox ' name=' hobby ' value='学习'学习brinputtype
1、getParameter从参数名称中获取的参数值如下图所示。
其中红色框为参数名称,蓝色框为值
使用getParameter获取所有用户输入的值。 代码如下。
@ web servlet (/requestdemo4) ) publicclassrequestdemo4extends http servlet { protectedvoiddopost } httpservletrequestrequestrequest htpservletretretred eption,ioexception(/0,解决中文乱码问题的request.setcharacterencoding (utf-8 ) )。 system.out.println('1,从参数名称中获取参数值:'); //1、参数名称到参数值string username=request.getparameter (' username ); 系统. out.println (username : ) username ); string password=request.getparameter (' password ); system.out.println (password 3360 ) password ); string hobby1=request.getparameter (' hobby ); system.out.println(hobby: ) hobby1); } protectedvoiddoget (httpservletrequestrequest,http servlet响应) throws ServletException,io exception { this .
单击“提交”后,执行结果如下:
虽然两个复选框都被选中,但可以看到,以getParameter方式仅获取第一个复选框的值显然不符合我们的要求
2、从getParameterValues参数名获取参数值数组为了解决上述问题,引入了一种叫getParameterValues的方法,该方法返回参数值数组
根据上面的情况,只为复选框编写代码。
@ web servlet (/request demo4) ) publicclassrequestdemo4extends https
ervlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //0、解决中文乱码问题 request.setCharacterEncoding("utf-8"); System.out.println("2、根据参数名称获取参数值的数组:"); //2、根据参数名称获取参数值的数组 String[] hobbies = request.getParameterValues("hobby"); for (String hobby : hobbies) { System.out.println("hobby : " + hobby); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); }}得到的结果是:
成功解决!
getParameterNames方法返回的是Enumeration类型,下面实现一下:
@WebServlet("/requestDemo4")public class RequestDemo4 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //0、解决中文乱码问题 request.setCharacterEncoding("utf-8"); //3、获取所有请求参数的名称 System.out.println("3、获取所有请求参数的名称"); Enumeration<String> parameterNames = request.getParameterNames(); while(parameterNames.hasMoreElements()){ String name = parameterNames.nextElement(); String value = request.getParameter(name); System.out.println(name + " : " + value); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); }}复选框全选,实现效果:
这个方法的好处是,不需要知道参数名称,就可以直接枚举出所有的参数名称和参数值,如果参数太多,用上面的通过参数名称获取值代码会变得很多很冗余;但是它有一个致命的缺点就是:它只能获取复选框选中的第一个值…………………………
请继续往下看第四个方法:
4、getParameterMap 获取所有参数的Map集合第四种方法完美解决了上面的问题,它返回Map<String,String[]>,所以只需要遍历Map就好了,实现一下:
@WebServlet("/requestDemo4")public class RequestDemo4 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //0、解决中文乱码问题 request.setCharacterEncoding("utf-8"); System.out.println("-----------------------------------------------------"); //4、获取所有参数的Map集合 System.out.println("4、获取所有参数的Map集合"); Map<String, String[]> parameterMap = request.getParameterMap(); Set<String> keySet = parameterMap.keySet(); for(String name : keySet){ String[] strings = parameterMap.get(name); System.out.print(name + ": "); for (String value : strings){ System.out.print(value + " "); } System.out.println(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); }}复选框全选,结果如下:
Bingo!!!!