request
request对象可以获取请求携带的数据,分别获取请求行、请求头、请求体中的数据。
1、什么是HttpServletRequest
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。
2、HttpServletRequest的作用
通过Request对象进行的常用操作:
1. 获取请求行信息:请求方式,url和HTTP版本。
2. 获取请求头信息:浏览器类型,ip地址等。
3. 获取请求参数:url后面拼接的参数或者请求体中提交的参数;
2.1 获取请求行信息
请求行主要包括:请求方式 ,url 和协议/版本 。HttpServletRequest对象提供了以下方法来获取这些信息:
方法 | 说明 |
---|---|
String getMethod() | 获取请求方式的类型 |
StringBuffer getRequestURL() | 获取客户端发出请求完整URL |
String getRemoteAddr() | 获取IP地址 |
String getProtocol() | 获取当前协议的名称和版本 |
2.2 获取请求头信息
浏览器的请求头信息是由很多:关键字:值
形式的数据组成的。HttpServletRequest对象给我们提供了两个方法用来获取请求的头信息。
方法 | 作用 |
---|---|
String getHeader(String name) | 根据请求头的k关键字获取请求头信息 |
Enumeration getHeaderNames() | 返回此请求包含的所有头信息的枚举 |
【说明】请求头的k关键字如下表所示:
请求头key | 请求头value |
---|---|
If-modified-Since | 浏览器通知服务器,本地缓存的最后变更时间。与另一个响应头组合控制浏览器页面的缓存。 |
cookie | 与会话有关技术,用于存放浏览器缓存的cookie信息。 |
user‐agent | 浏览器通知服务器,客户端浏览器与操作系统相关信息 |
connection | 保持连接状态。Keep-Alive 连接中,close 已关闭 |
host | 请求的服务器主机名 |
content-length | 请求体的长度 |
content-type | 如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码 |
accept | 浏览器可支持的MIME类型。文件类型的一种描述方式。 |
mime格式 | 浏览器请求数据的类型,例如: text/html ,html文件 text/css,css文件 text/javascript,js文件 image/*,所有图片文件 |
accept-encoding | 浏览器通知服务器,浏览器支持的数据压缩格式。如:GZIP压缩 |
accept-language | 浏览器通知服务器,浏览器支持的语言。各国语言(国际化i18n) |
2.3 获取请求体
1.get请求:get请求提交的数据是拼接在url后面的,如下图所示:
2.post请求:post请求的数据是在请求体中发送到后台的:
(1)获取请求参数的方法
方法名 | 描述 |
---|---|
String getParameter(String name) | getParameter获得指定参数名对应的值。如果没有返回null,如果只有多个获得第一个。 例如:username=jack |
String[] getParameterValues(name) | getParameterValues[] 获取请求数据key相同的多个数据 |
request.getParameterMap(); | 获得所有表单的数据 |
3、request作用域
3.1、request的生命周期
【一次请求和响应的完整流程】
1、浏览器向servlet发送请求
2、tomcat收到请求后,创建Request和Response两个对象,并将请求数据封装到request对象中,然后传递给Servlet
3、Servlet接收到请求后,调用doget或者dopost方法。处理浏览器的请求信息,然后通过Response返回信息
4、tomcat接收到返回的信息,返回给浏览器。
5、浏览器接收到返回消息后,tomcat销毁Request和Response两个对象,同时销毁这两个对象所获得的信息。
-
创建:浏览器给服务器发送请求后,tomcat创建request对象封装请求数据;
-
销毁:服务器给浏览器响应信息结束后销毁;
特点:浏览器每次给服务器发送请求,服务器都会为这次请求创建一个request对象。
3.2 、request域对象
request域对象,一个存储数据的区域对象.是把request当成一个容器来存储数据,request域存储数据主要是用于在两个servlet之间传递数据。request作为域对象,常用的方法如下:
方法 | 说明 |
---|---|
void setAttribute(String name, Object o) | 往request域中设置值 |
Object getAttribute(String name) | 从request域中取值 |
void removeAttribute(String name) | 从request域中移除值 |
【注意】getParameter()方法和getAttribute()方法的区别
-
getParameter()方法获取的是浏览器提交的数据(多是表单提交的数据);
-
getAttribute()方法获取的是request域中的数据(通过request.setAttribute()设置的值);
3.3、 请求转发
其实,在Servlet中,请求也可以从一个Servlet发起,然后请求到另一个Servlet或静态页面。这项技术叫做请求转发。
请求转发需要借助以下两个方法实现:
方法 | 说明 |
---|---|
RequestDispatcher getRequestDispatcher(String path) | 获取请求转发器(request对象方法) |
void forward(ServletRequest request, ServletResponse response) | 将请求转发到另一个资源(Servlet)上 |
3.4、重定向
使用response.sendRedirect()方法