从这里Request获取请求数据实例我们可以了解到,get请求和post请求获取请求参数有着不一样的方法,这对我们的封装很不方便,下面就介绍一种获取请求参数的通用方法
- String getParameter(String name):根据参数名称获取参数值
- String[] getParameterValues(String name):根据参数名称获取参数值的数组
- Enumeration<String> getParameterNames():获取所有请求的参数名称
- Map<String,String[]> getParameterMap():获取所有参数的map集合
写一个例子,因为方法是通用的,所以不管是get请求,还是post请求,都是一样的,所以为了测试,我们在get请求里调用post请求的方法
package com.lingaolu.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author 林高禄
* @create 2020-07-07-12:06
*/
@WebServlet("/requestDemo3")
public class RequestDemo3 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("post请求------------------------------------------------------------");
String name = request.getParameter("name");
System.out.println("名字为:"+name);
System.out.println("爱好为:");
String[] loves = request.getParameterValues("love");
Stream.of(loves).forEach(System.out::println);
System.out.println("所有的请求参数名称为:");
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()){
String s = parameterNames.nextElement();
System.out.println(s);
}
System.out.println("所有的请求参数为:");
Map<String, String[]> parameterMap = request.getParameterMap();
parameterMap.forEach(
(key,value)->System.out.println(key+": "+Stream.of(value).collect(Collectors.joining(",", "", "")))
);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("get请求---------------------------------------------------------");
String name = request.getParameter("name");
System.out.println("名字为:"+name);
System.out.println("爱好为:");
String[] loves = request.getParameterValues("love");
Stream.of(loves).forEach(System.out::println);
System.out.println("所有的请求参数名称为:");
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()){
String s = parameterNames.nextElement();
System.out.println(s);
}
System.out.println("所有的请求参数为:");
Map<String, String[]> parameterMap = request.getParameterMap();
parameterMap.forEach(
(key,value)->System.out.println(key+": "+Stream.of(value).collect(Collectors.joining(",", "", "")))
);
this.doPost(request,response);
}
}
Postman请求,get请求,参数为2个nam,一个age,两个love
后台输出
get请求---------------------------------------------------------
名字为:lin
爱好为:
aa
bb
所有的请求参数名称为:
name
age
love
所有的请求参数为:
name: lin,cc
age: 27
love: aa,bb
post请求------------------------------------------------------------
名字为:lin
爱好为:
aa
bb
所有的请求参数名称为:
name
age
love
所有的请求参数为:
name: lin,cc
age: 27
love: aa,bb
虽然有2个name,但是getParameter获取到的是第一个name