字面意思:javaweb就是用java写的web程序。
java是什么?一门高级编程语言,最经典的OOP(面对对象)编程语言
web程序是什么?在浏览器上访问的程序,属于B/S架构。
这就要提到两大架构:B/S架构和C/S架构。
C/S(Client/Server,客户端/服务器)架构:早期的架构,通过将应用程序安装在客户电脑,形成客户端。
B/S(Browser/Server,浏览器/服务器)架构:它是随着Internet技术的兴起,对C/S模式应用的扩展。在这种结构下,用户工作界面是通过IE浏览器来实现的。
Servlet:Service Applet的简写,服务端程序,最核心的技术,负责接收浏览器的请求。
JSP:动态生成HTML或XML或者其他格式的web网页的技术。
JDBC:使用java语言连接和操作数据库的技术。
运行流程:当用户与浏览器交互时,对服务器发出请求,由Servlet接收请求,并对其请求进行逻辑处理,如果要调用数据库,则使用JDBC访问数据库,处理完成后,交给JSP进行动态渲染网页,完成操作后把渲染好的网页给用户。
问题:看完这段描述,好像JSP只是做了一个渲染网页,那可不可以将JSP的功能整合到Servlet中呢?
答案是肯定不能的,JSP虽然只是渲染一个网页,但贵在动态的效果。当网页不是一下加载完,如果频繁的调用Servlet的庞大逻辑处理,会造成web网页的访问速度变慢,不如去做C/S架构。
缺点:整个的交互过程中,所有的核心内容都集中在后端上,特别是JSP,通常是Java混着HTML来写,这就导致前后端交互效率极低,通常后端得掌握前端的知识,前端得掌握后端的java。项目庞大的话,一旦有一个bug就可能会牵动整个项目,这就是屎山。
有了缺点,自然就有改进方法。当开发技术短期内无法改进,那么就改进开发模式。所以就出现了MVC开发模式。
MVC:
Model:代表着业务数据和业务逻辑处理
View:代表视图,也就是与用户交互的界面
Controller:代表控制器,用来接收从视图输入的参数,同时调用对应的Model
如果将开发三件套映射到MVC中就是:JDBC和业务逻辑处理负责Model层的开发,JSP负责View层的开发,Servlet负责Controller层的开发。
当开发大型项目的时候,仍然有一个大问题,采用MVC开发的时候就会导致多个包之间的调用,每次使用都需要new一个对象,一个两个的倒是无所谓,大型项目开发起来,new的对象多,次数频繁,忘记回收,会导致一个最致命的问题——内存溢出。(内存溢出已经是软件开发历史上存在了近40年的“老大难”问题——百度百科)
计科人从来都是直面问题的,正当这个问题出现在Javaweb发展道路上的时候,Spring用它的IOC容器将javaweb发展拖入了新时代。
什么是IOC容器?
要解释什么是IOC容器,就要了解什么是IOC(Inversion Of Control),翻译过来就是控制反转。
那么现在问题就来到了:谁控制谁,为何是反转
Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
由IOC容器控制对象,将以前的由程序员指定对象的实例化,改进到由程序控制对象的实例化,故为反转。
解释完了IOC容器,可以看出IOC容器很好的解决了new对象过多,忘记回收而造成的内存溢出问题。
Spring还买一送一,附带了一个AOP概念。
AOP(Aspect Oriented Programming):面向切面编程,可以将代码中冗余的部分提出来,简化代码,通过预编译方 式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。——百度百科
spring的出现,使得javaweb进入高速发展阶段,各种开发工具出现:
Maven:统一的项目管理工具。
Struts:为了取代以前的Servlet开发,Servlet混乱问题,用一个配置文件,xml文件,来管理所有的Servlet。
Mybatis/Hibernate:为了取代以前的JDBC开发,优化了数据库连接和释放、简化了sql语句的执行,是ORM中间件。
SSH(Structs + Spring + Hibernate):Spring继续优化,将各种框架整合进IOC容器中,形成了早期的SSH开发框架
JavaWeb高速发展,Web项目越来越大,以前的MVC模式已经不适合。Spring作为行业大哥,对MVC进行改进,出现了——SpringMVC。
SpringMVC:
①改进了Struts的将请求映射到类中,使用注解将请求映射方法中,@RequestMapping("xxx"),极大简化了开发体量,也是现在Controller层最流行的方法。
②对于Servlet的数据乱码、参数传入细节问题,SpringMVC都自动的解决了。
Spring的各种优点,造就了Spring现在在javaweb开发中的统治地位。
说了这么多的革新,但是JSP的问题好像还是没用解决,前后端并不能完全的掌控各自负责的部分。
直到前后端分离概念提出,即将JSP负责的渲染页面部分全部交给前端,而后端负责接收数据并处理完成后输出给前端。
那么前端的独立开发,所以JSP里内涵Java的方式就被淘汰了,出现了新的开发工具Vue,React,Angular三大JS框架。
MVVM开发模式:其实MVVM是在MVC的基础上进行完善,目前使用MVVM的架构的象征代表为Vue,将数据和模型进行双向绑定,当程序改变了数据时,及时将界面的渲染数据进行修改。推翻了之前的jquery渲染dom的方式,开发全新的渲染方式,简便了开发人员的开发方式。
有了前后端分离,那么前后端之间的数据传输量就会很大,所以需要一种轻量级的数据传输格式——Json,现在基本都是用Json进行数据传输。
发展到这,基本上大的问题已经解决,剩下的都是可以忽略的小问题。
市面上的框架、技术多如牛毛,Spring兼容了各种框架,造成其体量过大,直接体现是其配置文件很大。
Spring针对这一问题,推出了Springboot,核心思想是:约定优于配置。
约定优于配置:将一些固定会使用的配置隐藏起来,不需要用户自己配置,设置一个默认值,即为约定。如果用户需要更改配置,可以直接在application.properties或者application.yml中进行指定更改。
SpringBoot是一个集成了Spring技术栈的一个大整合,是一个简化了Spring应用开发的框架,可以一站式解决JavaEE的开发流程。
微服务作为新时代的产物,技术还在发展,本人对其了解不多,这里只是简单介绍。
为什么会出现微服务?为了解决服务器体量大(例如淘宝),将一个服务器功能(复杂)拆分为多个服务器功能(单一),粒度极小的web开发模式。

Spring为了迎合微服务的发展趋势,推出了SpringCloud,在微服务领域也是首屈一指的。
SpringCloud包含:
注册中心:Eureka、Consul
服务器远程调用:Feign(Http协议)
配置中心:SpringCloudConfig
服务网关:SpringCloudGateway、Zuul
服务监控和保护:Hystrix
阿里巴巴对SpringCloud进行改进,推出了SpringCloudAlibaba
注册中心:Eureka、Nacos
服务器远程调用:Feign(Http协议)、Dobbo
配置中心:SpringCloudConfig、Nacos
服务网关:SpringCloudGateway、Zuul
服务监控和保护:Sentinel
本篇概述了Javaweb技术的发展史,毕竟没有亲自经历过技术变革,很多都是网上查的资料,如果有错误希望大家指正。