Servlet-Request通用方式获取请求参数
Servlet-Request通用方式获取请求参数
GET请求方式和POST请求方式区别主要在于获取请求参数的方式不一样,是否可以提供统一获取请求参数的方式,从而统一doGet和doPost方法内的代码?

核心结论
HttpServletRequest#getParameter* 系列可以统一读取:
- GET 的 QueryString(
?a=1&b=2) - POST 的表单(
application/x-www-form-urlencoded)
所以“统一代码”的关键不是区分 GET/POST,而是:把参数读取与业务处理抽出来复用。
三组常用 API 的职责
getParameter(name):取单值(同名多值只取第一个)getParameterValues(name):取多值(checkbox、multi-select)getParameterMap():拿全量参数(便于调试/通用校验)
它们适合“表单参数”。如果请求体是 JSON(application/json),需要读 Body 自己解析(见 Servlet-获取请求参数 / Ajax)。
@WebServlet("/req2")
public class RequestDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// GET请求逻辑
System.out.println("get....");
// 1. 获取所有参数的Map集合
Map<String, String[]> map = req.getParameterMap();
for (String key : map.keySet()) {
//username:zhangsan
System.out.print(key+":");
//获取值
String[] values = map.get(key);
for (String value : values) {
System.out.print(value + " ");
}
System.out.println();
}
System.out.println("-----------");
// 2. 根据key获取参数值,数组
String[] hobbies = req.getParameterValues("hobby");
for (String hobby : hobbies) {
System.out.println(hobby);
}
System.out.println("------------");
// 3. 根据Key获取单个参数值
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println(username);
System.out.println(password);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// POST请求逻辑
System.out.println("post....");
// 1. 获取所有参数的Map集合
Map<String, String[]> map = req.getParameterMap();
for (String key : map.keySet()) {
//username:zhangsan
System.out.print(key+":");
//获取值
String[] values = map.get(key);
for (String value : values) {
System.out.print(value + " ");
}
System.out.println();
}
System.out.println("-----------");
// 2. 根据key获取参数值,数组
String[] hobbies = req.getParameterValues("hobby");
for (String hobby : hobbies) {
System.out.println(hobby);
}
System.out.println("------------");
// 3. 根据Key获取单个参数值
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println(username);
System.out.println(password);
}
}
更推荐的“统一写法”(更贴近 MVC)
把“读取参数 + 业务处理”封装到一个方法里,然后 GET/POST 都调用它:
private void handle(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
resp.setContentType("text/plain;charset=utf-8");
resp.getWriter().write(username + ":" + password);
}
这样做的好处:
- 参数校验/转换集中管理(空值、数字转换、枚举等)
- 后续上 MVC 分层更自然(Controller 只做参数与分发)