文章目录
互联网通信
通信协议
计算机通信的规则必须同时遵守才能完成通信。
TCP/IP:
TCP(Transmission Control Protocol)
又叫传输控制协议,TCP是面向连接的,并且是一种可靠的协议,在基于TCP进行通信时,通信双方需要建立TCP连接,建立连接需要经过三次握手
,握手成功才可以通信。
- UDP: 无连接通信协议,发送端和接收端不用建立连接,消耗资源小通信效率高,常用在消息通信,图片传输。限制64kb,
可能数据丢失。
HTTP
超文本传输协议是建立在TCP协议之上的一种应用。
- HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
- http 报文格式分为两种,
请求报文
和响应报文
HTTP协议有7种请求方式
,常用的有2种
get:
请求参数显示在URL,参数有长度限制(受限于url长度),安全性比post差。post:
请求参数在请求体中,请求的url长度没有限制的,相对安全,。
请求报文
在做数据查询时,建议用Get方式
;而在做数据添加、修改或删除时,建议用Post方式;
常见状态码
响应报文
cookie&session
cookie
- Cookie 是服务器通知客户端保存键值对的一种技术。
- 客户端有了 Cookie 后,每次请求都发送给服务器。
- 每个 Cookie 的大小
不能超过 4kb
- 可以设置超时时间
- 调用
response.addCookie( Cookie )
通知浏览器保存
session
- 基于cookie实现的,session是会话级别的。
- 浏览器关闭session失效,默认超时时间为30分钟
互联网通信模型
- c/s模型: 客户端发送请求给
服务器软件
将定位的文件内容解析为【二进制数据】
通过网络发送回发起请求的客户端软件上。类似qq,英雄联盟。
优点:安全性较高,有效降低服务端的计算机的压力。
缺点:增加客户获得服务的成本(要下载),更新较为繁琐。 - b/s模型: 浏览器和客户端进行通信,将定位的文件内容解析为
【二进制数据】
通过网络发送回发起请求的客户端软件上。
优点:不会增加客户获取服务的成本,几乎不需要更新。
缺点:无法有效的对服务端计算机资源文件进行保护,服务端压力大 (高并发场景)
动态资源文件与静态资源文件获取的区别
静态文件被索要时
,Http服务器直接通过 【输出流】 将静态文件中内容或者命令以【二进制形式】推送给发起请求浏览器。动态文件被索要时
,Http服务器需要创建当前class文件的实例对象,通过实例对象调用对应的方法处理用户请求,通过 【输出流】 将运行结果以【二进制形式】推送给发起请求浏览器
Http服务器介绍
- Http服务器可以接收由浏览器发动的Http请求协议包
- Http服务器可以解析Http请求协议包二进制数据了解用户请求
- Http服务器可以
自动定位
被访问的资源文件 - Http服务器可以自动将被访问文件内容或则文件运行结果通过输出流以二进制形式写入到Http响应协议包中响应体
- Http服务器可以自动将Http响应协议包推送回发起请求的浏览器
Servlet
- JavaWeb 三大组件之一。三大组件分别是:
Servlet 程序
、Filter 过滤器
、Listener 监听器。
- Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
Servlet生命周期
- 执行servlet构造器方法。
- 调用init方法初始化。
- 调用service方法请求分发,
每次请求都会调用。
- 执行destroy 销毁方法
ServletConfig
ServletConfig
是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象。- 可以获取Servlet的别名(需要设置)
- 获取初始化参数
- 获取servletContext对象
ServletContext
- 一个 web 工程,只有一个
ServletContext
对象实例,是一个域对象,可以设置域对象配合JSP使用。
HttpServletRequest
Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request
对象中。
- getRequestURI() 获取请求的资源路径
- getRequestURL() 获取请求的统一资源定位符(绝对路径)
- getRemoteHost() 获取客户端的 ip 地址
- getHeader() 获取请求头
- getParameter() 获取请求的参数
- getParameterValues() 获取请求的参数(多个值的时候使用)
- getMethod() 获取请求的方式 GET 或 POST
- setAttribute(key, value); 设置域数据
- getAttribute(key); 获取域数
- getRequestDispatcher() 获取请求转发对象
请求转发&请求重定向
- 重定向代表之前的请求已结束,给客户端一个新的url,让客户端重新请求去获取资源。这个url可以是站外的,效率相对于转发要低。之前的request域已经失效,可以通过session来获得一些参数。
resp.sendRedirect("http://localhost:8080");
- 转发则和它大致相反:还是
同一个request请求
,浏览器地址栏不发生变化,只能访问站内资源。
重定向偏向不同业务的跳转,转发偏向同业务的跳转。
过滤器&拦截器&监听器
- 过滤器: 依赖于servlet容器,可以对几乎所有请求进行过滤,缺点是一个过滤器实例只能在容器初始化时调用一次,生命周期随容器。可以做一些过滤获得我们需要的字段。
- 拦截器: 拦截器是在
面向切面编程中
应用的,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现。 - 监听器: 基于
servlet
随web应用的启动而启动,只初始化一次,随web应用的停止而销毁
。主要作用是:做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
项目启动时,先启动监听器
,再启动过滤器
—>拦截
。