乐趣区

关于java:编程体系结构07JavaEE之Web开发

本文源码: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·点这里 ☆☆☆☆☆
退出移动版