HTTP
HTTP:
概念:Hyper Text Transfer Protocol 超文本传输协议
传输协议:定义了,客户端和服务器端通信时,发送数据的格式
特点:
1 基于TCP/IP的高级协议
2 默认端口号:80
3 基于请求/响应模型:一次请求对应一次响应
4 无状态的:每次请求之间相互独立,不能交互数据
请求消息数据格式
1 请求行
请求方式 请求url 请求协议/版本
GET /login.html HTTP/1.1
请求方式:
HTTP协议中有7种请求方式,常用的有2种
GET:
1 请求参数在请求行中,在url后
2 请求的url长度是有限制的
3 不太安全
POST:
1 请求参数在请求体中
2 请求的url长度没有限制
3 相对安全
2 请求头:客户端浏览器告诉服务器一些信息
请求头名称:请求头值
常见的请求头:
1 User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
* 可以在服务器端获取该头的信息,解决浏览器的兼容性问题
2 Referer:
* 告诉服务器,我(当前请求)从哪里来
作用:
1 防盗链:
2 统计工作:
3 请求空行
空行,用于分割POST请求的请求头,和请求体的
4 请求体(正文)
* 封装POST请求消息的请求参数的
响应消息数据格式
Request:
1 request对象和response对象的原理
1 request和response对象是由服务器创建的,我们来使用它们
2 request对象是来获取请求消息,response对象是来设置响应消息
2 request对象继承体系结构:
ServletRequest --接口
|
HttpServletRequest --接口
|
org.apache.catalina.connector.RequestFacade 类(tomcat)
3 request功能:
1 获取请求消息数据
1 获取请求行数据
* GET /day14/demo1?name=zhangsan HTTP/1.1
* 方法:
1 获取请求方式:GET
* String getMethod()
2 (*)获取虚拟目录:/day14
* String getContextPath()
3 获取Servlet路径:/demo1
* String getServletPath()
4 获取get方式的请求参数:name=zhangsan
*String getQueryString()
5 (*)获取请求URI:/day14/demo1
*String getRequestURI() /day14/demo1
*String getRequestURL() http://localhost/day14/demo1
URI:统一资源标识符
URL:统一资源定位符
6 获取协议及版本:HTTP/1.1
*String getProtocol()
7 获取客户机的IP地址
*String getRemoteAddr()
2 获取请求头数据
方法:
1 (*)String getHeader(String name):通过请求头的名称获取请求头的值
2 Enumeration<String> getHeaderNames():获取所有的请求头名称
3 获取请求体数据
请求体:只有post请求方式,才有请求体,在请求体中封装了post请求的请求参数
步骤:
1 获取流对象
* BufferedReader getReader():获取字符输入流,只能操作字符数据
* ServletInputStream getInputStream:获取字节输入流,可以操作所有类型数据
2 再从流对象中拿数据
2 其他功能:
1 获取请求参数通用方式
1 String getParameter(String name):根据参数名称获取参数值
2 String[] getParameterValues(String name):根据参数名称获取参数值的数组
3 Enumeration<String> getParameterNames()获取所有请求的参数名称
4 Map<String,String[]>getParameterMap()获取所有参数的map集合
* 中文乱码问题:
* get方式:tomcat 8 已经将get方式乱码问题解决
* post方式:会乱码
*解决:在获取参数前,设置request编码request.setCharacterEncoding("utf-8");
2 请求转发:一种在服务器内部的资源跳转方式
1 步骤:
1 通过request对象获取请求转发器对象 RequestDispatcher getRequestDispatcher(String path)
2 使用RequestDispatcher对象进行转发:forward(ServletRequest request,ServletResponse response)
2 特点:
1 浏览器地址栏没有发生变化
2 只能转发到当前服务器内部资源中
3 转发是一次请求
3 共享数据
* 域对象:一个有作用范围的对象,可以在范围内共享数据
* request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
* 方法:
1 void setAttribute(String name,Object obj):存储数据
2 Object getAttribute(String name):通过键获取值
3 void removeAttribute(String name):通过键移除键值对
4 获取ServletContext
1 ServletContext getServletContext()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律