共计 1274 个字符,预计需要花费 4 分钟才能阅读完成。
一、请求响应流程图
二、请求响应对象概述
- 当服务器接收到请求后,服务器会创建 request 和 response 对象,把请求数据封装到 request 对象中;
- 然后调用 Servlet 的 service() 方法时把这两个对象传递给 service() 方法;
- 在 service() 方法中可以通过 request 对象获取请求数据,可以使用 response 对象向客户端完成响应;
三、注意事项
每次请求服务器都会创建新的 request 和 response 对象,即每个请求有自己独自的 request 和 response 对象。
四、request 对象的介绍
request 是 Servlet.service() 方法的一个参数,类型为 javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个 request 对象,并把请求数据封装到 request 中,然后在调用 Servlet.service() 方法时传递给 service() 方法,这说明在 service() 方法中可以通过 request 对象来获取请求数据。
五、request 对象的内部结构
request 的功能可以分为以下几种:
封装了请求头数据;
封装了请求正文数据,如果是 GET 请求,那么就没有正文;
request 是一个域对象,可以把它当成 Map 来添加获取数据;
request 提供了请求转发和请求包含功能。
六、request 域介绍
request 是域对象!在 JavaWeb 中一共四个域对象,其中 ServletContext 就是域对象,它在整个应用中只创建一个 ServletContext 对象。request 是其中一个,request 可以在一个请求中共享数据 。
一个请求会创建一个 request 对象,如果在一个请求中经历了多个 Servlet,那么多个 Servlet 就可以使用 request 来共享数据。现在我们还不知道如何在一个请求中经历多个 Servlet,后面在学习请求转发和请求包含后就知道了。
七、request 的域方法:
void setAttribute(String name, Object value)
用来存储一个对象,也可以称之为存储一个域属性,例如:servletContext.setAttribute(“xxx”,“XXX”),在 request 中保存了一个域属性,域属性名称为 xxx,域属性的值为 XXX。请注意,如果多次调用该方法,并且使用相同的 name,那么会覆盖上一次的值,这一特性与 Map 相同;
Object getAttribute(String name)
用来获取 request 中的数据,当前在获取之前需要先去存储才行,例如:
String value = (String)request.getAttribute(“xxx”);,获取名为 xxx 的域属性;
void removeAttribute(String name)
用来移除 request 中的域属性,如果参数 name 指定的域属性不存在,那么本方法什么都不做;
Enumeration getAttributeNames()
获取所有域属性的名称;