本文源码:GitHub·点这里 || GitEE·点这里
一、根底概念
1、CS 与 BS 架构
CS 架构模式
客户端 / 服务器(Client/Server)模式,既要编写服务器端程序,也要开发客户端程序,软件更新时须要同时更新客户端和服务器端,整体模式相比 BS 架构要简单,然而安全性比拟高。
B/ S 架构模式
即浏览器 / 服务器(Browser/Server),只须要编写服务器端程序,浏览器的界面作为拜访的服务端的入口,架构绝对简略,能够疾速迭代,然而安全性较差。
2、Socket 通信机制
TCP/IP 协定
传输控制协议 / 网际协议是指可能在多个不同网络间实现信息传输的协定簇。TCP/IP 协定不仅仅指的是 TCP 和 IP 两个协定,而是指一个由 FTP、SMTP、TCP、UDP、IP 等协定形成的协定簇,只是因为在 TCP/IP 协定中 TCP 协定和 IP 协定最具代表性,所以被称为 TCP/IP 协定。
Socket 套接字
网络中不同主机上的利用过程之间进行双向通信的端点的形象,一个套接字就是网络上过程通信的一端,提供了应用层过程利用网络协议替换数据的机制。通常接管申请数据,并做业务解决的称为服务端即 ServerSocket,发送申请并接管处理结果的称为客户端。
二、Http 协定
1、Http 和 Https
Http 协定
HTTP 超文本传输协定, 是用于从万维网服务器传输超文本到本地浏览器的传送协定,基于 TCP/IP 通信协议来传递数据:HTML 文件、图片、查问数据等。HTTP 协定基于客户端 - 服务端架构模式。浏览器作为 HTTP 客户端通过 URL 向服务端即 WEB 服务器发送申请。Web 服务器依据接管到的申请后,解决完申请后向客户端发送响应信息。
协定特点:简略疾速、灵便、无连贯、无状态、反对客户 / 服务器模式。
Https 协定
以平安为准则的 HTTP 通道,是 HTTP 的平安版,在 HTTP 申请上退出 SSL 层,HTTPS 的平安根底是 SSL,因而加密的具体内容就须要 SSL。简略来说,HTTPS 协定是由 SSL+HTTP 协定构建的可进行加密传输、身份认证的网络协议,要比 http 协定平安。HTTPS 协定的次要作用能够分为两种:一种是建设一个信息安全通道,来保障数据传输的平安;另一种就是确认网站的真实性。
Https 和 Http 区别
平安证书:Https 协定须要到 CA 申请证书,个别收费证书较少,因此须要肯定费用。
数据传输:Http 是超文本传输协定,信息是明文传输,https 则是具备安全性的 ssl 加密传输协定。
连贯形式:Http 和 Https 应用的是齐全不同的连贯形式,用的端口也不一样,前者是 80,后者是 443。
2、Get 和 Post 申请
浏览器端
从浏览器角度看这个两种申请的区别:GET 形式读取资源,比方 Get 到动态页面,即便屡次读取不会对拜访数据产生影响,也被称为 ” 幂等 ” 申请。POST 形式在页面中定义表单,提交表单会把数据提交到服务器,而且少数状况下会产生数据,比方罕用的保留数据接口,并非 ” 幂等 ” 操作,不幂等也就意味着不能随便屡次执行。
服务接口
这里指用 Ajax 程序申请服务接口,提交的申请类型。或者其余 Http 申请工具类,还有状况是微服务中各种 Feign 接口间的申请。这种状况接口发送申请时,限度绝对较少,比方 REST 格调接口罕用 GET、POST、PUT、DELETE,几种形式别离获取、创立、更新、删除 资源。
3、握手挥手机制
三次握手
第一次握手:客户端被动向服务器发动申请连贯,申请报文中发送 SYN=1,此时随机生成初始序列号 seq=x,此时,客户端过程进入 SYN-SENT 同步已发送状态。
第二次握手:服务端收到申请报文后,确认客户的 SYN,如果申请没有回绝,则收回确认报文。报文中应该 ACK=1,SYN=1,确认号是 ack=x+1,同时本人也发送一个 SYN 包 seq=y,此时,服务器过程进入 SYN-RCVD 同步收到状态。
第三次握手:客户端收到确认后,须要向服务器确认报文的 ACK=1,ack=y+1,此时,TCP 连贯建设,客户端进入 ESTABLISHED 已建设连贯状态。实现三次握手,客户端与服务器开始传送数据。
四次挥手
第一次挥手:客户端发送一个完结 FIN,用来被动敞开和服务端的数据传输,开释连贯且进行发送数据,报文首部:FIN=1,序列号 seq=u;随后客户端进入终止期待 1 状态 FIN-WAIT-1。
第二次挥手:服务端收到这个 FIN,收回确认报文 ACK=1,确认收到序号是收到的序号 +1,即 ack=u+1,且带上本人的序列号 seq=v,和 SYN 一样,一个 FIN 将占用一个序号。如此,服务器告诉利用过程,客户端曾经没有数据要发送,如果服务器发送数据,客户端仍然要接管,该状态会继续一段时间,服务端进入敞开期待状态 CLOSE-WAIT。客户端收到服务器的确认申请后,进入终止期待 2 状态 FIN-WAIT-2,期待服务器发送连贯开释报文。
第三次挥手:服务器向客户端发送开释连贯报文 FIN=1,ack=u+1,此时服务端还处于半敞开状态,服务器可能还会发送一些数据,此时序列号为 seq=w,如此,服务器进入最初确认状态 LAST-ACK,期待客户端的确认。
第四次挥手:客户端收到服务器的连贯开释报文后,回发确认,ACK=1,ack=w+1,序列号是 seq=u+1,如此,客户端进入工夫期待状态 TIME-WAIT。此时 TCP 连贯还没有开释,必须通过最长报文段寿命的工夫后,才进入 CLOSED 状态。MSL:最长报文段寿命,个别 2 分钟,TCP 连贯开释时,被动方必须通过 2MSL 后才进入 CLOSED 状态,因而被动方敞开工夫比拟晚。
三、Servlet 组件
Java 编写的服务器端程序,具备独立于平台和协定的个性,次要性能在于交互式地浏览和生成数据,生成动静 Web 内容。应用 Servlet,能够收集来自网页表单的用户输出,出现来自数据库或者其余源的记录,还能够动态创建网页。
1、实现形式
继承 HttpServlet,HttpServlet 负责形象模板角色,模板办法:由 service() 办法负责;
继承 GenericServlet 抽象类,其中的 service 办法为形象办法;
实现 Servlet 接口,蕴含 init、getServletConfig、service、getServletInfo、destroy 几个外围办法;
2、生命周期
加载和实例化,初始化 init,服务 service,销毁:destroy。
3、外围 API 组件
ServletConfig:获取 servlet 初始化参数和 servletContext 对象;
ServletContext:在整个 Web 利用的动静资源之间共享数据;
ServletRequest:封装 Http 申请信息,在申请时创立;
ServletResponse:封装 Http 响应信息,在申请时创立;
4、转发和重定向
转发:服务器端进行的页面跳转的管制 ;
重定向:服务端响应跳转信息,浏览器端进行的页面跳转 ;
5、Cookie 与 Session
Cookie 机制
Cookie 在 HTTP 中通常是用来分别用户身份,进行会话跟踪而贮存在用户本地终端上的数据,个别会加密解决,由用户客户端计算机临时或永恒保留的信息。其构造就是一个键和一个值形成的。随着服务器端的响应发送给客户端浏览器。而后客户端浏览器会把 Cookie 保存起来,当下一次再拜访服务器时把 Cookie 再发送给服务器。
Session 会话
用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会失落,而是在整个用户会话中始终存在上来。Servlet 中能够把一个会话内须要共享的数据保留到 HttSession 对象中。四大域对象:PageContext、ServletRequest、HttpSession、ServletContext。
6、监听. 过滤. 拦挡
监听器
JavaWeb 三大组件:Servlet,Listener,Filter,监听器就是指在应用程序中监听相干对象状态变动的组件。
过滤器
客户端申请 Servlet 时,先执行相干 Filter,如果 Filter 通过,则继承执行申请的 Servlet;如果 Filter 不通过,则不会执行用户申请的 Servlet。过滤器能够动静地拦挡申请和响应。
拦截器
Spring 框架中的拦截器 Interceptor 相似于 Servlet 中的过滤器 Filter,次要用于拦挡用户申请并作相应的解决。例如通过拦截器能够进行权限验证、记录申请信息的日志、判断用户是否登录等。申请转发不执行拦挡、过滤;重定向执行拦挡和过滤。
四、数据库连接池
1、C3P0 连接池
C3P0 是一个开源的 JDBC 连接池,应用程序依据 C3P0 配置来初始化数据库连贯,能够主动回收闲暇连贯的性能。
2、Druid 连接池
Druid 连接池为监控而生,内置弱小的监控性能,监控个性不影响性能。内置了 StatFilter 性能,能采集十分齐备的连接池中拜访数据库执行信息,Druid 连接池内置一个监控页面,提供了十分齐备的监控信息,能够疾速诊断系统的瓶颈,也是以后最罕用的连接池。
五、运行服务器
1、Jetty 容器
Jetty 是一个开源的 servlet 容器,它为基于 Java 的 web 容器,例如 JSP 和 servlet 提供运行环境。Jetty 是应用 Java 语言编写的,它的 API 以一组 JAR 包的模式公布。开发人员能够将 Jetty 容器实例化成一个对象,能够迅速为一些独立运行(stand-alone)的 Java 利用提供网络和 web 连贯。
2、Tomcat 服务器
Tomcat 服务器是一个收费的凋谢源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型零碎和并发拜访用户不是很多的场合下被广泛应用,是开发和调试 JSP 程序的首选。应用 Tomcat 最要害的两个操作:应用开发工具连贯 Tomcat 并部署 web 利用;将应用程序打包放到 Tomcat 服务下运行。
六、源代码地址
GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile
举荐浏览:编程体系整顿
序号 | 项目名称 | GitHub 地址 | GitEE 地址 | 举荐指数 |
---|---|---|---|---|
01 | Java 形容设计模式, 算法, 数据结构 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
02 | Java 根底、并发、面向对象、Web 开发 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
03 | SpringCloud 微服务根底组件案例详解 | GitHub·点这里 | GitEE·点这里 | ☆☆☆ |
04 | SpringCloud 微服务架构实战综合案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
05 | SpringBoot 框架根底利用入门到进阶 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
06 | SpringBoot 框架整合开发罕用中间件 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
07 | 数据管理、分布式、架构设计根底案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
08 | 大数据系列、存储、组件、计算等框架 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |