1. 概念:Hyper Text Transfer Protocol 超文本传输协议
- 定义了客户端和服务器通信时的数据发送格式
- 特点:
- 基于TCP/IP的高级协议
- 默认端口号:80
- 基于请求/响应模型:一次请求对应一次响应
- 无状态:每次请求之间相互独立,不能实现通讯
2. 请求消息数据格式
2.1 请求行
POST /DemoWeb200826_war_exploded/demo2 HTTP/1.1
其信息格式为:请求方式 请求url 请求协议/版本
HTTP协议中的请求方式共有7种,其中常用的请求方式有2种:
- GET:请求参数在请求行中,url长度有限,不太安全
- POST:请求参数在请求体中,请求的url长度无限,相对安全
2.2 请求头
常用请求头:
- User-Agent:获取浏览器信息,解决兼容问题
- Referer:告诉服务器当前请求从哪里来。
可用于防盗链和统计工作
2.3 请求空行
空行,分割Post 请求的请求头和请求体
2.4 请求体
封装POST请求消息的请求参数
3. Request对象
request对象和response对象均由服务器创建,我们来进行使用;
request对象用以获得请求消息,response对象用以设置响应消息;
- request对象继承体系结构:
HttpServletRequest的实现类由Tomcat定义。
-
功能:
获取请求消息数据:1. 获取请求行数据
其方法如下图所示
2. 获取请求头数据
- *
String getHeader(String name)
:通过请求头名称获取值 -
Enumeration<String> getHeaderNames()
:获取所有的请求头名称
3. 获取请求体数据
- 获取流对象
-
BufferedReader getReader()
:获取字符输入流,只能操作字符数据 -
ServletInputStream getInputStream()
:获取字节输入流,可以操作所有类型数据
-
- 从流对象拿取数据
其他功能:
1. 获取请求参数通用方式
- *
String getParameter(String name)
:根据参数名称获取参数值 -
String[] getParameterValues(String name)
:根据参数名称获取参数值的数组(多用于复选框的传参) -
Enumeration<String> getParameterNames()
:获取所有请求参数名称 - *
Map<String,String[]> getParameterMap()
:获取所有请求参数map集合
BeanUtils包可简化数据的封装过程
中文乱码问题:当我们使用get方式时,Tomcat8已经将get方式乱码问题解决;而当我们使用post方式时,请求信息中中文会出现乱码情况。我们需要在获取参数之前设置Request的编码格式使之与前端文本设置的编码格式相一致,代码为request.setCharacterEncoding("UTF-8");
2. 请求转发:一种在服务器内部的资源跳转方式
- 步骤:
I. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
II. 使用请求转发器对象进行转发:forward(ServletRequest request, SetvletResponse response)
具体实现代码:request.getRequestDispatcher("/demo2").forward(request,response);
- 特点:
I. 浏览器地址栏路径不发生变化;
II. 只能转发到当前服务器内部资源中;
III. 转发过程中,只发生一次请求
3. 共享数据
- 域对象:一个有作用范围的对象,在范围内数据共享
- request域:范围为一次请求,一般用于请求时转发的多个资源共享数据
- 方法:
void setAttribute(String name, Object obj)//存储数据 Object getAttribute(String name)//用键取值 void removeAttribute(String name)//通过键删除一对键值对
4. 获取ServletContext
ServletContext getServletContext()
- *
4. 响应消息数据格式
其数据格式类似请求数据格式,分为响应行,响应头,响应空行和响应体
4.1 响应行
HTTP/1.1 200 OK
其信息格式为:请求协议/版本 响应状态码 状态码描述
4.2 响应头
其格式也与请求头一致,为键值对
常见响应头:
- Content-Type:服务器告诉客户端本次响应体数据的本文和编码格式;
- Content-disposition:告诉服务器以什么格式打开响应体数据。
I. in-line:默认值,在当前页面内打开
II. attachment;filename=xxx:以附件形式打开,文件下载。
4.3 响应体:传输的数据
4. Response对象
- 设置响应行状态码:
setStatus(int sc)
- 设置响应头:
setHeader(String name, String value)
-
设置响应体: