request对象不但可以用来设置和取得request范围变量,还可以用来获得客户端请求参数、请求的来源、表头、cookies等。
一.获得客户端请求参数。
request对象包括一系列方法来获得客户端请求参数,包括的方法和方法说明如表;
方法 | 返回值 | 方法说明 |
getParameter(String name) | String | 获得参数名为name的参数值 |
getParameterNames() | Enumeration | 获得所有参数的名称 |
getParameterValues(String name) | String[] | 获得参数名为name的所有参数 |
getParameterMap() | Map | 获得所有参数封装的Map实例 |
示例:RequestForm.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>表单</title>
</head>
<body>
<form action="RequestDemo.jsp" method="post">
用户名:<input type="text" name="username"/>
<input type="submit" value="提交">
</form>
</body>
</html>
RequestDemo.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>使用request对象接收参数</title>
</head>
<body>
<%-- 通过request对象的getPatameter接收参数 --%>
<%
String username = request.getParameter("username");
out.println("用户名:" + username);
%>
</body>
</html>
运行结果:
然而,当我输入中文时,显示的结果是这样的。
要解决中文乱码问题,只需通过request对象的setCharacterEncoding()方法来设置参数编码就可以了,修改RequestDemo.jsp编码如下:
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>使用request对象接收参数</title>
</head>
<body>
<%-- 通过request对象的getPatameter接收参数 --%>
<%
request.setCharacterEncoding("gb2312");
String username = request.getParameter("username");
out.println("用户名:" + username);
%>
</body>
</html>
运行结果:
二、获得所有的参数名称
通过request对象的getParameterNames()方法可以获得所有的参数名称。
示例:RequestForm2.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>表单</title>
</head>
<body>
<form action="RequestDemo2.jsp" method="post">
用户名:<input type="text" name="username"/><br>
用户密码:<input type="password" name="userpassword"/>
<input type="submit" value="提交">
</form>
</body>
</html>
RequestDemo2.jsp
<%@ page language="java" contentType="text/html;charset=gb2312" import="java.util.*"%>
<html>
<head>
<title>使用request对象获得所有的参数名称</title>
</head>
<body>
<%--通过request对象的getParameterNames --%>
<%
Enumeration e = request.getParameterNames();
while(e.hasMoreElements())
{
String str= (String) e.nextElement();
out.println(str);
}
%>
</body>
</html>
运行结果:
通过搭配request对象的getParameterNames()方法和getParameter()方法,可以很方便的获得所有参数的参数值、
RequsertDemo3.jsp
<%@ page language="java" contentType="text/html;charset=gb2312" import="java.util.*"%>
<html>
<head>
<title>使用request对象获得所有的参数名称</title>
</head>
<body>
<%--通过request对象的getParameterNames --%>
<%
Enumeration e = request.getParameterNames(); //获得所有参数的名称
while(e.hasMoreElements()) //遍历Enumeration
{
String str= (String) e.nextElement(); //取出下一个元素值
String strRequest = request.getParameter(str); //取得相应参数的参数值
out.println(str + "参数值为:" + strRequest + "<br>"); //打印输出参数名称和参数值
}
%>
</body>
</html>
运行结果:
三、获得参数的所有参数值
前面接收的参数只有一个参数值,在有些情况下一个参数可能拥有多个参数值,比如多选框,多选列表。要接收多个参数值,就需要使用request对象的getParameterValues()方法。
示例:RequestForm3.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>表单</title>
</head>
<body>
<form action="RequestDemo4.jsp" method="post">
用户名:<input type="text" name="username"/><br>
用户密码:<input type="password" name="userpassword"/><br>
喜欢的运动:
<input type="checkbox" name="sport" value="pingpang">乒乓球
<input type="checkbox" name="sport" value="baskertball">篮球
<input type="checkbox" name="sport" value="football">足球<br>
<input type="submit" value="提交">
</form>
</body>
</html>
RequestDemo4.jsp
<%@ page language="java" contentType="text/html;charset=gb2312" import="java.util.*"%>
<html>
<head>
<title>使用request对象获得参数的所有参数值</title>
</head>
<body>
<%-- 通过request对象的getParameterValues获得参数的所有参数值 --%>
<%
String[] strArr = request.getParameterValues("sport");
out.println("喜欢的运动");
for(String str : strArr) //遍历字符串数组取出参数值
{
out.println(str); //输出参数值
}
%>
</body>
</html>
运行结果:
四、获得封装所有参数值的Map
可以通过request对象的getParameterMap()方法来获得封装所以参数值的Map对象。通过该Map对象可以获得指定参数的参数值。
示例:RequestDemo5.jsp
<%@ page language="java" contentType="text/html;charset=gb2312" import="java.util.*"%>
<html>
<head>
<title>使用request对象获得封装所有参数值的Map</title>
</head>
<body>
<%-- 通过request对象的getParameterMap封装所有参数值的Map --%>
<%
Map mapParameter = request.getParameterMap(); //获得封装所有参数值的Map
String[] strUsername = request.getParameterValues("username");
out.println("用户名:"+strUsername[0]+"<br>"); //获得其中username参数值
String[] strPassword = request.getParameterValues("userpassword");
out.println("用户密码:"+strPassword[0]+"<br>"); //打印输出userpassword参数值
String[] strSport = request.getParameterValues("sport");
out.println("喜欢的运动"); //获得其中sport参数值
for(String sport : strSport) //遍历字符串数组取出参数值
{
out.println(sport); //输出参数值
}
%>
</body>
</html>
运行结果:
五、request对象的其他方法
request对象除了可以用来获得请求参数,还可以用来获得HTTP标头及其他信息,具体的方法及方法说明如下所示:
方法 | 返回值 | 方法说明 |
getHeader(String name) | String | 获得指定标题名称为name的标头 |
getHeaderName() | Enumeration | 获得所有的标头名称 |
getIntHeader(String name) | int | 获得标题名称的name的标头,内容以整数类型返回 |
getDateHeader(String name) | long | 获得标题名称的name的标头,内容以日期类型返回 |
getCookies() | Cookie | 获得相关的cookies |
getContextPath() | String | 获得Context的路径 |
getMethod() | String | 获得客户端的提交方式 |
getProtocol() | String | 获得使用的HTTP协议 |
getQueryString() | String | 获得请求的字符串 |
getRequestedSeesioId() | String | 获得客户端的seesion ID |
getRequestURI() | String | 获得请求URL |
getRemoteAddr() | String | 获得客户端IP地址 |
getRemoteHost() | String | 获得客户端的主机名称 |
getRemotePort() | int | 获得客户端主机端口号 |
getRemoteUser() | String | 获得客户端名称 |