获取请求参数
在实际开发中,经常需要获取用户提交的表单数据,例如,用户名、密码、电子邮件等,为了方便获取表单中的请求参数,在HttpServletRequest接口中,定义了一系列获取请求参数的方法,如表1所示。
表1 获取请求参数的方法
方法声明 | 功能描述 |
---|---|
String getParameter(String name) | 该方法用于获取某个指定名称的参数值,如果请求消息中没有包含指定名称的参数,getParameter方法返回null;如果指定名称的参数存在但没有设置值,则返回一个空串;如果请求消息中包含有多个该指定名称的参数,getParameter(String name)方法返回第一个出现的参数值 |
String[] getParameterValues(String name) | HTTP请求消息中可以有多个相同名称的参数(通常由一个包含有多个同名的字段元素的FORM表单生成),如果要获得HTTP请求消息中的同一个参数名所对应的所有参数值,那么就应该使用getParameterValues(String name)方法,该方法用于返回一个String类型的数组。 |
Enumeration getParameterNames() | getParameterNames()方法用于返回一个包含请求消息中的所有参数名的Enumeration对象,在此基础上,可以对请求消息中的所有参数进行遍历处理。 |
Map getParameterMap() | getParameterMap()方法用于将请求消息中的所有参数名和值装入进一个Map对象中返回。 |
表1中,列出了HttpServletRequest获取请求参数的一系列方法。其中,getParameter()方法用于获取某个指定的参数,而getParameterValues()方法用于获取多个同名的参数。接下来,通过一个具体的案例,分步骤讲解这两个方法的使用,具体如下:
(1)修改5.3.3小节中的form.html文件,增加3个复选框,修改后的代码如例1所示。
例1 form.html
1 <form action="/chapter05/RequestParamsServlet" method="POST">
2 用户名:<input type="text" name="username"><br>
3 密 码:<input type="password" name="password"><br>
4 爱 好:
5 <input type="checkbox" name="hobby" value="sing">唱歌
6 <input type="checkbox" name="hobby" value="dance">跳舞
7 <input type="checkbox" name="hobby" value="football">足球<br>
8 <input type="submit" value="提交">
9 </form>
(2)编写一个用于获取请求参数的RequestParamsServlet,如例2所示。
例2 RequestParamsServlet.java
1 package cn.itcast.chapter05.request;
2 import java.io.*;
3 import javax.servlet.*;
4 import javax.servlet.http.*;
5 public class RequestParamsServlet extends HttpServlet {
6 public void doGet(HttpServletRequest request, HttpServletResponse response)
7 throws ServletException, IOException {
8 String name = request.getParameter("username");
9 String password = request.getParameter("password");
10 System.out.println("用户名:" + name);
11 System.out.println("密 码:" + password);
12 // 获取参数名为“hobby”的值
13 String[] hobbys = request.getParameterValues("hobby");
14 System.out.print("爱好:");
15 for (int i = 0; i < hobbys.length; i++) {
16 System.out.println(hobbys[i]+" ");
17 }
18 }
19 public void doPost(HttpServletRequest request, HttpServletResponse response)
20 throws ServletException, IOException {
21 doGet(request, response);
22 }
23 }
需要注意的是,由于参数名为“hobby”的值可能有多个,因此,需要通过调用getParameterValues()方法,该方法返回一个String类型的数组,可以获取多个同名参数的值。
(3)在web.xml中配置完RequestParamsServlet映射后,启动Tomcat服务器,在浏览器的地址栏中输入URL地址http://localhost:8080/chapter05/form.html
访问form.html页面,并填写表单相关信息,填写后的页面如图1所示。
图1 运行结果
(4)点击图5-21所示的【提交】按钮,在Eclipse的控制台打印出了每个参数的信息,如图2所示。
图2 运行结果