本文源码:GitHub·点这里 || GitEE·点这里java
一、CS与BS架构git
CS架构模式github
客户端/服务器(Client/Server)模式,既要编写服务器端程序,也要开发客户端程序,软件更新时须要同时更新客户端和服务器端,总体模式相比BS架构要复杂,可是安全性比较高。web
B/S架构模式算法
即浏览器/服务器(Browser/Server),只须要编写服务器端程序,浏览器的界面做为访问的服务端的入口,架构相对简单,能够快速迭代,可是安全性较差。spring
二、Socket通讯机制数据库
TCP/IP 协议编程
传输控制协议/网际协议是指可以在多个不一样网络间实现信息传输的协议簇。TCP/IP协议不只仅指的是TCP和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是由于在TCP/IP协议中TCP协议和IP协议最具表明性,因此被称为TCP/IP协议。设计模式
Socket套接字浏览器
网络中不一样主机上的应用进程之间进行双向通讯的端点的抽象,一个套接字就是网络上进程通讯的一端,提供了应用层进程利用网络协议交换数据的机制。一般接收请求数据,并作业务处理的称为服务端即ServerSocket,发送请求并接收处理结果的称为客户端。
一、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。
二、Get和Post请求
浏览器端
从浏览器角度看这个两种请求的区别:GET方式读取资源,好比Get到静态页面,即便屡次读取不会对访问数据产生影响,也被称为"幂等"请求。POST方式在页面中定义表单,提交表单会把数据提交到服务器,并且多数状况下会产生数据,好比经常使用的保存数据接口,并不是"幂等"操做,不幂等也就意味着不能随意屡次执行。
服务接口
这里指用Ajax程序请求服务接口,提交的请求类型。或者其余Http请求工具类,还有状况是微服务中各类Feign接口间的请求。这种状况接口发送请求时,限制相对较少,好比REST风格接口经常使用GET、POST、PUT、DELETE,几种方式分别获取、建立、更新、删除 资源。
三、握手挥手机制
三次握手
第一次握手:客户端主动向服务器发起请求链接,请求报文中发送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状态,所以主动方关闭时间比较晚。
Java编写的服务器端程序,具备独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。使用Servlet,能够收集来自网页表单的用户输入,呈现来自数据库或者其余源的记录,还能够动态建立网页。
一、实现方式
继承HttpServlet,HttpServlet担任抽象模板角色,模板方法:由service()方法担任;
继承GenericServlet抽象类,其中的service方法为抽象方法;
实现Servlet接口,包含init、getServletConfig、service、getServletInfo、destroy几个核心方法;
二、生命周期
加载和实例化,初始化init,服务service,销毁:destroy。
三、核心API组件
ServletConfig:获取servlet初始化参数和servletContext对象;
ServletContext:在整个Web应用的动态资源之间共享数据;
ServletRequest:封装Http请求信息,在请求时建立;
ServletResponse:封装Http响应信息,在请求时建立;
四、转发和重定向
转发:服务器端进行的页面跳转的控制 ;
重定向:服务端响应跳转信息,浏览器端进行的页面跳转 ;
五、Cookie与Session
Cookie机制
Cookie在HTTP中一般是用来辨别用户身份,进行会话跟踪而储存在用户本地终端上的数据,通常会加密处理,由用户客户端计算机暂时或永久保存的信息。其结构就是一个键和一个值构成的。随着服务器端的响应发送给客户端浏览器。而后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。
Session会话
用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。Servlet中能够把一个会话内须要共享的数据保存到HttSession对象中。四大域对象:PageContext、ServletRequest、HttpSession、ServletContext。
六、监听.过滤.拦截
监听器
JavaWeb三大组件:Servlet,Listener,Filter,监听器就是指在应用程序中监听相关对象状态变化的组件。
过滤器
客户端请求Servlet时,先执行相关Filter,若是Filter经过,则继承执行请求的Servlet;若是Filter不经过,则不会执行用户请求的Servlet。过滤器能够动态地拦截请求和响应。
拦截器
Spring框架中的拦截器Interceptor相似于Servlet中的过滤器Filter,主要用于拦截用户请求并做相应的处理。例如经过拦截器能够进行权限验证、记录请求信息的日志、判断用户是否登陆等。请求转发不执行拦截、过滤;重定向执行拦截和过滤。
一、C3P0链接池
C3P0是一个开源的JDBC链接池,应用程序根据C3P0配置来初始化数据库链接,能够自动回收空闲链接的功能。
二、Druid链接池
Druid链接池为监控而生,内置强大的监控功能,监控特性不影响性能。内置了StatFilter功能,能采集很是完备的链接池中访问数据库执行信息,Druid链接池内置一个监控页面,提供了很是完备的监控信息,能够快速诊断系统的瓶颈,也是当前最经常使用的链接池。
一、Jetty容器
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员能够将Jetty容器实例化成一个对象,能够迅速为一些独立运行(stand-alone)的Java应用提供网络和web链接。
二、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·点这里 | ☆☆☆☆☆ |