欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Servlet | Request 对象获取请求参数的通用方式

程序员文章站 2023-11-13 23:48:22
文章目录-1、解决中文乱码问题0、概述1、getParameter 根据参数名称获取参数值2、getParameterValues 根据参数名称获取参数值的数组3、getParameterNames 获取所有请求参数的名称4、getParameterMap 获取所有参数的Map集合-1、解决中文乱码问题在开始之前,先解决中文乱码的问题。在Tomcat 8以上已经解决了GET方法中文乱码问题,但是POST方式的乱码没有解决,我们只需要在代码中加一行:request.setCharacterEncodi...


-1、解决中文乱码问题

在开始之前,先解决中文乱码的问题。在Tomcat 8以上已经解决了GET方法中文乱码问题,但是POST方式的乱码没有解决,我们只需要在代码中加一行:

request.setCharacterEncoding("utf-8");

就可以了


0、概述

进入正题,下表展示了获取请求参数通用方式的常用方法:

方法 说明
⭐️String getParameter(String name) 根据参数名称获取参数值
⭐️String[] getParameterValues(String name) 根据参数名称获取参数值的数组
⭐️Enumeration<String> getParameterNames() 获取所有请求参数的名称
⭐️Map<String,String[]> getParameterMap() 获取所有参数的Map集合

在演示这四个方法之前,新建一个Servlet,再新建一个表单,让他映射到刚刚创建的Servlet

<form action="requestDemo4" method="post">
    <input type="text" name="username" placeholder="用户名">
    <br>
    <input type="password" name="password" placeholder="密码">
    <br>
    <input type="checkbox" name="hobby" value="游戏">游戏
    <input type="checkbox" name="hobby" value="学习">学习
    <br>
    <input type="submit" value="提交">
</form>

接下来演示这四个方法:


1、getParameter 根据参数名称获取参数值

如下图所示:

Servlet | Request 对象获取请求参数的通用方式
其中红色框子是参数名称,蓝色框子我们输入的是值

现在用getParameter来获取一下所有用户输入的值,代码如下:

@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("1、根据参数名称获取参数值:");
        //1、根据参数名称获取参数值
        String username = request.getParameter("username");
        System.out.println("username : " + username);
        String password = request.getParameter("password");
        System.out.println("password : " + password);
        String hobby1 = request.getParameter("hobby");
        System.out.println("hobby : " + hobby1);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

填写表单,复选框全选:

Servlet | Request 对象获取请求参数的通用方式
点击提交之后,运行结果如下:

Servlet | Request 对象获取请求参数的通用方式
可以发现,我们两个复选框的都选中了,但是用getParameter的方式只获取了第一个复选框的值,显然是不符合我们要求的


2、getParameterValues 根据参数名称获取参数值的数组

为了解决上面的那个问题,引入了getParameterValues这个方法,这个方法返回的是参数值数组

根据上面的案例,只编写针对复选框的代码:

@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("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);
    }
}

得到的结果是:
Servlet | Request 对象获取请求参数的通用方式
成功解决!


3、getParameterNames 获取所有请求参数的名称

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);
    }
}

复选框全选,实现效果:
Servlet | Request 对象获取请求参数的通用方式
这个方法的好处是,不需要知道参数名称,就可以直接枚举出所有的参数名称和参数值,如果参数太多,用上面的通过参数名称获取值代码会变得很多很冗余;但是它有一个致命的缺点就是:它只能获取复选框选中的第一个值…………………………

请继续往下看第四个方法:


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);
    }
}

复选框全选,结果如下:
Servlet | Request 对象获取请求参数的通用方式
Bingo!!!!

本文地址:https://blog.csdn.net/lesileqin/article/details/112100661