Request
请求消息数据格式
- 请求行
请求方式 请求url 请求协议/版本
eg:Get/hello.html HTTP/1.1
请求方式:HTTP有7种请求方式,常用两种
1. GET:请求参数在请求行种,跟在url后,请求长度有限
2. POST:请求参数在请求体中,长度没有限制
- 请求头
请求头名称:请求头值
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Referer:http://localhost/hello.html
Connection: keep-alive
Host: localhost:8080
Upgrade-Insecure-Requests: 1
1. User-Agnet:浏览器告诉服务器,我访问服务器使用的浏览器版本信息。可以在服务器端获取浏览器信息,解决兼容问题
2. Referer:http://localhost/hello.html
告诉服务器我从哪里来,防止其他网址盗链,也可以进行统计
- 请求体
和报文头部中间 有空行负责分割,内部放置请求参数。内部存储POST访问消息
参数名=参数内容
Request对象
使用流程
- tomcat服务器根据url请求资源,创建对应Servlet对象
- tomcat创建
request
和response
对象,request
中封装请求消息数据 - tomcat 将
request
和response
两个对象传递给service
方法 - 通过
service
处理请求数据,通过response
对象设置响应消息数据。 - 服务器再给浏览器做出响应之前,会从
response
对象中拿出程序员设置的响应消息,放入响应内容中。
继承关系
ServletRequest接口
被HttpServletRequest
接口继承,org.app.catalina.connector.RequestFacade
是tomcat对上述接口的实现类
Request功能
获取请求消息数据
http://localhost:8080/day08_web/demo?name=zhangsan HTTP/1.1
获取请求行数据
方法 | 功能 |
---|
String getMethod() | 获取请求方式:GET POST |
🌟String getContextPath() | 获取虚拟目录 /day08_web |
String getServletPath() | 获取Servlet路径 /demo |
String getQueryString() | 获取get方式请求参数 name=zhangsan |
🌟String getRequestURI() | 获取请求URI /day08_web/demo |
String getRequestURL() | 获取请求URL http://localhost:8080/day08_web/demo |
String getProtocol() | 获取协议及版本 HTTP/1.1 |
String getRemoteAddr() | 获取客户机IP地址 |
获取请求头数据
方法 | 功能 |
---|
🌟String getHeader(String name) | 根据请求头名称,获取请求头值 |
Enumeration< String> getHeaderNames() | 获取所有请求头名称 |
获取请求体数据
只有POST才有请求体,首先获取流对象,在从流对象中拿数据
方法 | 功能 |
---|
BufferedReader getReader() | 获取字符流 |
ServletInputStream getInputStream() | 获取字节流数据,可以操作所有类型数据 |
其他功能
获取请求参数通用方式
方法 | 功能 |
---|
🌟String getParameter(String name) | 根据参数名称获取参数值 username=zhangsan&password=123 |
String[] getParameterValues(String name) | 根据参数名称获取参数值数组 grade=80&grade=90 |
Enumeration< String> getParameterNames() | 获取所有参数名称 |
🌟Map< String,String[]> getParameterMap() | 获取所有参数的map集合 |
通过GET
方法接受参数,中文不会报错但是POST
方法会报错,方法获取参数前设置编码方式
request.setCharacterEncoding("utf-8");
请求转发
方法 | 功能 |
---|
🌟RequestDispatcher getRequestDispatcher(String path) | 通过request对象获取请求转发器对象 |
🌟forward(ServletRequest request,ServletResponse response) | 使用RequestDispatcher对象来进行转发 |
共享数据
域对象:一个作用于,范围内对象共享数据
request域:代表一次请求范围,一般用于请求转发的多个资源中共享数据
方法 | 功能 |
---|
setAttribute(String name, Object o) | 存储此请求中的属性。在请求之间重置属性。此方法常常与 RequestDispatcher 一起使用。 |
removeAttribute(String name) | 从此请求中移除属性。此方法不是普遍需要的,因为属性只在处理请求期间保留。 |
Object getAttribute(String name) | 以 Object 形式返回指定属性的值,如果不存在给定名称的属性,则返回 null。 |
获取ServletContext
方法 | 功能 |
---|
ServletContext getServletContext() | |