简介
HTTP是超文本传输协议,定义了客户端服务器间传输数据的规则。
特点:
- 基于TCP/IP协议(三次握手)的高级协议
- 默认端口号是80(比如访问网站时候不要加上端口号是因为默认就是80)
- 基于请求响应模型,一次请求对应一次响应
- 无状态协议:每次请求之间相互独立,不能交互数据
请求消息格式
请求消息数据格式:
-
请求行
请求方式 请求url 请求协议/版本
get和post区别:
get:
1. 请求参数在请求行中,url之后
2. 请求的url长度有限制
post:
1. 请求参数在请求体中
2. 请求url长度无限制
3. 相对安全 -
请求头
请求头名称:请求头值
常见请求头:
1. User-Agent:浏览器告诉服务器使用浏览器的版本
2. Referer:告诉服务器当前请求从哪里来,防止别人盗取连接,进行统计工作 -
请求空行
空行(起分隔作用) -
请求体
正文(参数,get方式没有请求体)封装post请求的请求参数
Requset
- request和response对象原理:
1. request和response对象由服务器创建,我们仅仅是使用
2. request是用来获取请求消息,response是设置响应消息 - request继承的体系结构:
ServletRequest 接口
HttpServletRequest 子接口
最后Tomcat实现并创建对象 实现类 - request功能:
1. 获取请求消息
1. 获取请求行数据:
方法:
1. 获取请求方式:String getMethod()
2. ()获取虚拟目录:String getContextPath()
3. 获取Servlet路径:String getServletPath()
4. 获取get方式请求参数:String getQueryString()
5. ()获取Url:String getRequestURI() String getRequestURL()
6. 获取协议及版本好:String getProtocol()
7. 获取客户机IP地址:String getRemoteAddr()
2. 获取请求头数据
方法:
1. String getHeader(String name):根据请求头名称获取请求头
2. Enumeration<String> getHeaderNames():获取所有请求头名称
3. 获取请求体数据
步骤:
1. 获取流对象:
BufferedReader getReader():获取字符输入流
ServletInputStream getInputStream():获取字节输入流
2. 再从流对象中拿取数据
2. 其他功能
1. 获取请求参数通用方式:
1. String getParameter(String name):根据参数名称获取参数值
2. String[] getParameterValues(String name):获取参数值数组(用于复选框)
3. getParameterNames():获取参数名称
4. Map<String,String[]> getParameterMap():获取所有参数的map集合
2. 请求转发:一种在服务器内部资源跳转的方式
1. 通过request对象获取请求转发器对象
2. 使用requestDispatcher进行转发
3. 特点:地址栏不发生变化;只能转发到当前服务器内部资源中;转发是一次请求
3. 共享数据
4. 获取servletcontext
响应消息格式
- 响应行
- 响应头
- 响应空行
- 响应体:就是页面展示的HTML内容
response对象
其中注意请求转发forward和重定向redirect的区别
ServletContext
代表整个web应用
可以和程序的容器通信(服务器)
功能:
1. 获取MIME类型
2. 域对象:共享数据
3. 获取文件的真实路径(服务器)