本章目标
掌握request对象的主要作用
掌握request对象的核心操作方法
可以使用request进行传输乱码的解决
可以使用request进行服务器角色验证
request内置对象
request内置对象是使用最多的一个对象了,其主要作用是用来接收客户端发送而来的请求信息,例如:请求的参数、发送的头信息等都属于客户端发来的信息,request是javax.servlet.http.HttpServletRequest接口的实例化对象,表示此对象主要是应用在HTTP协议上
对应接口:public interface HttpServletRequest extends ServletRequest
request内置对象的常用操作
乱码解决
由于浏览器默认的编码是UTF-8编码,而中文的GBK和UTF-8的编码是不一样的,所以在进行表单提交时造成了乱码。
解决方法:setCharacterEncoding()
加入编码设置
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<html>
<head><title>加入编码设置</title></head>
<body>
<%
request.setCharacterEncoding("utf-8") ; // 设置统一编码
%>
</body>
</html>
编写提交表单
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%><!-- 导入java.util包 -->
<html>
<head>
<title>编写提交表单</title>
</head>
<body>
<form action="demoPost.jsp" method="post">
请输入信息:<input type="text" name="info" >
<input type="submit" value="提交">
</form>
</body>
</html>
效果图:
接收表单内容
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%><!-- 导入java.util包 -->
<html>
<head>
<title>接收表单内容</title>
</head>
<body>
<%--//接收表单提交的参数
String content=request.getParameter("info");
--%>
<%
request.setCharacterEncoding("utf-8");//设置统一编码
String content=request.getParameter("info");//接收表单提交的参数
%>
<h3><%=content %></h3>
</body>
</html>
效果图:
接收请求参数
equest内置对象中的getParameter()方法可以接收一个表单的文本框中输入的内容,如果有一组参数(同名参数)传递的话,则就必须使用getParameterValues()方法进行接收。
定义表单,传递多种参数
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%><!-- 导入java.util包 -->
<html>
<head>
<title>定义表单,传递多种参数</title>
</head>
<body>
<form action="demo2Post.jsp" method="post">
姓名:<input type="text" name="uname"><br />
兴趣:
<input type="checkbox" name="inst" value="唱歌">唱歌
<input type="checkbox" name="inst" value="跳舞">跳舞
<input type="checkbox" name="inst" value="游戏">游戏
<input type="checkbox" name="inst" value="看书">看书
<input type="checkbox" name="inst" value="游泳">游泳
<input type="hidden" name="id" value="3"><!-- 定义隐藏域 -->
<br />
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>
效果图:
定义表单,传递多种参数
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%><!-- 导入java.util包 -->
<html>
<head>
<title>定义表单,传递多种参数</title>
</head>
<body>
<form action="demo2Post.jsp" method="post">
姓名:<input type="text" name="uname"><br />
兴趣:
<input type="checkbox" name="inst" value="唱歌">唱歌
<input type="checkbox" name="inst" value="跳舞">跳舞
<input type="checkbox" name="inst" value="游戏">游戏
<input type="checkbox" name="inst" value="看书">看书
<input type="checkbox" name="inst" value="游泳">游泳
<input type="hidden" name="id" value="3"><!-- 定义隐藏域 -->
<br />
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>
效果图:
URL地址重写
在WEB的开发中,所有的参数不一定非要由表单传递过来,也可以使用地址重写的方式进行传递,地址重写的格式如下:
动态页面地址?参数名称1=参数内容1&参数名称2=参数2&…
接收地址重写参数
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%><!-- 导入java.util包 -->
<html>
<head>
<title>接收地址重写参数</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");//设置统一编码
String param1=request.getParameter("name");//接收参数
String param2=request.getParameter("password");//接收参数
%>
<h3>姓名:<%=param1 %></h3>
<h3>密码:<%=param2 %></h3>
</body>
</html>
<%-- 在地址栏上写这个链接:
http://localhost:8080/Six/request/demo3.jsp?name=chaoyi&password=123456 --%>
效果图:
定义表单显示多种类型
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%><!-- 导入java.util包 -->
<html>
<head>
<title>定义表单显示多种类型</title>
</head>
<body>
<form action="demo4Post.jsp" method="post">
姓名:<input type="text" name="uname"><br />
性别:
<input type="radio" name="sex" value="男" checked="checked">男
<input type="radio" name="sex" value="女" >女<br />
城市:
<select name="city">
<option value="北京">北京</option>
<option value="天津">天津</option>
<option value="洛阳">洛阳</option>
</select><br />
兴趣:
<input type="checkbox" name="**inst" value="唱歌">唱歌
<input type="checkbox" name="**inst" value="跳舞">跳舞
<input type="checkbox" name="**inst" value="游戏">游戏
<input type="checkbox" name="**inst" value="看书">看书
<input type="checkbox" name="**inst" value="游泳">游泳<br />
自我介绍:<textarea rows="3" cols="30" name="note"></textarea><br />
<input type="hidden" name="uid" value="1">
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>
效果图:
接收全部请求参数的名称及对应的内容
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%><!-- 导入java.util包 -->
<html>
<head>
<title>接收全部请求参数的名称及对应的内容</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");//设置统一编码
%>
<center>
<table border="1">
<tr>
<td>参数名称</td>
<td>参数内容</td>
</tr>
<%
Enumeration enu=request.getParameterNames();
while(enu.hasMoreElements()){
String paramName=(String)enu.nextElement();
%>
<tr>
<td><%=paramName %></td>
<td>
<%
if(paramName.startsWith("**")){
String paramValue[]=request.getParameterValues(paramName);
for(int x=0; x<paramValue.length; x++){
%>
<%=paramValue[x] %>、
<%
}
}else{
String paramValue=request.getParameter(paramName);
%>
<%=paramValue %>
<%
}
%>
</td>
</tr>
<%
}
%>
</table>
</center>
</body>
</html>
效果图:
接收全部请求参数的名称
在request内置对象中还有一个灵活的方法就是getParameterNames(),本方法可以返回所有请求参数的名称,但是此方法返回值的类型是Enumeration,所以需要使用hasMoreElements()方法判断是否有内容以及使用nextElement()方法取出内容。
显示全部的头信息
JAVA的WEB开发使用的是HTTP协议,主要的操作就是基于请求和回应,但是在请求和回应的同时也会包含一些其他的信息(例如:客户端的IP、Cookie、语言等),那么这些信息就称为头信息。
要想取得头信息的名称可以直接通过request内置对象的getHeaderNames(),而要想取出每一个头信息的内容,则需要使用getHeader()方法。
取出头信息的名称及内容
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%><!-- 导入java.util包 -->
<html>
<head>
<title>取出头信息的名称及内容</title>
</head>
<body>
<%
Enumeration enu=request.getHeaderNames();
while(enu.hasMoreElements()){
String headerName=(String)enu.nextElement();
String headerValue=request.getHeader(headerName);
%>
<h5><%=headerName %>--><%=headerValue %></h5>
<%
}
%>
</body>
</html>
效果图:
其他操作
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>request的其他操作</title>
</head>
<body>
<%
String method = request.getMethod(); // 取得提交方式
String ip = request.getRemoteAddr(); // 取得客户端的IP地址
String path = request.getServletPath(); // 取得访问路径
String contextPath = request.getContextPath(); // 取得上下文资源名称
%>
<h3>请求方式:<%=method%></h3>
<h3>IP地址:<%=ip%></h3>
<h3>访问路径:<%=path%></h3>
<h3>上下文名称:<%=contextPath%></h3>
</body>
</html>
效果图:
小结
request对象的主要功能是用于接收用户发来的请求信息
接收参数的方法:getParameter()、getParameterValues()、getParameterNames()
取得客户端IP地址可以使用getRemoteAddr()
取得上下文名称可以使用getContextPath()
头信息是指附加在请求上一起发送到服务器上的内容。