java后端技术演变杂谈(未完结)
1.0版本javaWeb:原始servlet+jsp+jsbc

早期的jsp:html+java,页面先在后端被解析,里面的java代码动态渲染完成后,成为纯html,再通过服务器发送给浏览器显示。

缺点:
服务器压力很大,因为无论是jdbc数据库查询,servlet请求接受,还是jsp页面动态渲染,都是在服务器端进行的。
2.0阶段:javaWeb:基于MVC思想的servlet+jsp+jdbc

缺点:
java的本质是面向对象,当代码量变大,对象的管理变的混乱不堪。
譬如我想在controller中用一次model的对象,就得new一次。想在controller中用一次view的对象,就得new一次。
3.0阶段:javaWeb:基于MVC思想的“SSH框架(Struts+Spring+Hibernate)+jsp”

3.5阶段 javaWeb:基于MVC思想的“SSM框架(SpringMvc+Spring+Mybatis)+jsp”

4.0阶段:前后端分离:thymeleaf
5.0阶段 springboot
javaweb:用java来做web程序,一般都是bs模式。
javaweb流行框架:servlet+jsp+jdbc。
jdbc:提供一系列api,用java去访问数据库。
servlet:服务端小程序,接受浏览器发过来的请求并做业务处理。
jsp:java服务端页面。
早期的jsp:html+java,页面先在后端被解析,里面的java代码动态渲染完成后,成为纯html,再通过服务器发送给浏览器显示。
早期javaweb对于服务器压力很大,因为无论是jdbc数据库查询,servlet请求接受,还是jsp页面动态渲染,都是在服务器端进行的。
此时mvc出现了,分为model+controller+view
model:处理业务,包括和数据库的交互。
controller:接受请求,然后转发给相应model层业务组件处理。
view:页面渲染。
javaweb转变为了基于mvc的servlet+jsp+jdbc
但是javaweb的本质还是java,java的本质是面向对象。
即使是基于mvc的servlet+jsp+jdbc,当代码量变大,也会变得混乱。譬如我想在controller中用一次model的对象,就得new一次。
想在controller中用一次view的对象,就得new一次。
此时,spring出现了。
spring就是用来管理对象的,把对象起了个新名字,叫bean。
spring中放对象的东西,叫ioc容器。
同时,struts取代了之前的原生servlet开发。
mybatis/hibernate取代了原生jdbc开发。
具体来说,一个servelet类对应一个请求的处理。
要写个servlet类,
要继承httpservlet类并重写里面的doget和dopost方法,分别对应get和post的请求(或者用@webservlet注解配置。)
最后去web.xml里配置。
然后把所有的servlet类放到一个目录下,譬如com.xxx.servlet。
现在变成,struts用一个xml文件,管理所有servlet(servlet在struts里叫action)
所以javaweb整体演变成了:基于mvc的ssh框架:(structs+hibernate)jsp
spring做整体ssh框架的整合,作为管理者。
后来spring推出了springmvc,成功替代了struts,用来接收和处理请求。
所以javaweb逐渐变成了:基于mvc的ssm框架(springmvc+spring+mybatis)+jsp。
注意springmvc和mvc不是一种东西,前者是用来接受和处理请求的技术框架,后者是上文提到的思想。
ssm框架的项目一般都有三个包:
controller包,使用的是springmvc,对应的mvc中的controller
service和dao/mapper层,service,业务层,会交由spring的ioc来管理。dao/mapper使用mybatis,对应mvc中的model。
jsp,对应mvc中的view。
此时,虽然框架简化了,但是大部分压力还是集中在服务器这里。
真正地前后端分离时代开始了,数据渲染丢给前端了。
前端需要数据就给后端发request,后端处理完成后就给前端返回response。json由此出现。
jsp最大的缺陷是,前端不好调试,怎么样都会设计到后端的地方。无法像html一样在浏览器中打开,要先启动服务器,通过servlet来动态渲染或者后端开发好再手动替换html。这也是为啥最开始的后端开发,都要会基础的前端知识的原因。
于是,thymeleaf,模板引擎,出现了,他写出的页面就是html页面,不经过后端,就可以直接被浏览器解析,方便了前端调试页面。但并没有真正达到前后端分离的效果,因为想要真正显示完整的页面,还需要后端controller层返回的数据。
此时前后端联调要轻松许多,但是后端的配置依旧繁琐。
譬如,spring要管理所有的对象,那么他怎么知道一个类的一个对象是一个bean呢,怎么知道那两个bean之间有依赖关系捏?
除开spring整合springmvc、mybatis,其他三方等等。项目开发好后需要打成war包,发布到tomcat执行。这个过程也需要一堆配置。
这时,spring提出了一个公约,将经常使用的核心组件的对象抽取出来,自动加入ioc中,再在外部提供一个固定配置文件,application.properties/application.yml,里面放自定义配置。
这就是,约定大于配置,即自动化配置。
基于该思想下,springboot出现了!
springboot自带tomcat,不需要像以前ssm一样打成war包再发布到tomcat的webapps下面。
同时springboot把很多场景都抽象为启动器starter,在启动器下导入maven依赖即可达成自动化配置,从而直接开发,专注于自己的业务逻辑。
但springboot有个问题,它不支持jsp,官方支持的是thymeleaf
此时前端也有自己的发展,vue、react、angular三大js框架,使得前端也可以自己单开一个项目了。
相关文章:
java后端技术演变杂谈(未完结)
1.0版本javaWeb:原始servletjspjsbc 早期的jsp:htmljava,页面先在后端被解析,里面的java代码动态渲染完成后,成为纯html,再通过服务器发送给浏览器显示。 缺点: 服务器压力很大,因为…...
UDS 诊断报文格式
文章目录 网络层目的N_PDU 格式诊断报文的分类:单帧、多帧 网络层目的 N_PDU(network protocol data unit),即网络层协议数据单元 网络层最重要的目的就是把数据转换成符合标准的单一数据帧(符合can总线规范的),从而…...
kafka的详细安装部署
introduce Kafka是一个分布式流处理平台,主要用于处理高吞吐量的实时数据流。Kafka最初由LinkedIn公司开发,现在由Apache Software Foundation维护和开发。 Kafka的核心是一个分布式发布-订阅消息系统,它可以处理大量的消息流,并…...
【数据分享】2015-2023年我国区县逐月二手房房价数据(Excel/Shp格式)
房价是一个城市发展程度的重要体现,一个城市的房价越高通常代表这个城市越发达,对于人口的吸引力越大!因此,房价数据是我们在各项城市研究中都非常常用的数据!之前我们分享过2015-2023年我国地级市逐月房价数据&#x…...
PTA 7-226 sdut-C语言实验-矩阵输出(数组移位)
输入N个整数,输出由这些整数组成的n行矩阵。 输入格式: 第一行输入一个正整数N(N<20),表示后面要输入的整数个数。 下面依次输入N个整数。 输出格式: 以输入的整数为基础,输出有规律的N行数据。 输入样例: 在…...
Android 各平台推送通知栏点击处理方案
示例代码如下: RongPushClient.setPushEventListener( new PushEventListener() { Override public boolean preNotificationMessageArrived( Context context, PushType pushType, PushNotificationMessage notificationMessage) { //透传通知时,调用。…...
什么是网络安全 ?
网络安全已成为我们生活的数字时代最重要的话题之一。随着连接设备数量的增加、互联网的普及和在线数据的指数级增长,网络攻击的风险呈指数级增长。 但网络安全是什么意思? 简而言之,网络安全是一组旨在保护网络、设备和数据免受网络攻击、…...
【前端】-【electron】
文章目录 介绍electron工作流程环境搭建 electron生命周期(app的生命周期)窗口尺寸窗口标题自定义窗口的实现阻止窗口关闭父子及模态窗口自定义菜单 介绍 electron技术架构:chromium、node.js、native.apis electron工作流程 桌面应用就是…...
Python中的类(Class)和对象(Object)
目录 一、引言 二、类(Class) 1、类的定义 2、类的实例化 三、对象(Object) 1、对象的属性 2、对象的方法 四、类和对象的继承和多态性 1、继承 2、多态性 五、类与对象的封装性 1、封装的概念 2、Python中的封装实现…...
dp-拦截导弹2
所有代码均来自于acwing中的算法基础课和算法提高课 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度, 但是以后每一发炮弹都不能高于前一发的高度。…...
初识动态规划算法(题目加解析)
文章目录 什么是动态规划正文力扣题第 N 个泰波那契数三步问题使用最小花费爬楼梯 总结 什么是动态规划 线性动态规划:是可以用一个dp表来存储内容,并且找到规律存储,按照规律存储。让第i个位置的值等于题目要求的答案 >dp表:dp表就是用一…...
Vue2.0与Vue3.0的区别
一、Vue2和Vue3的数据双向绑定原理发生了改变 Vue2的双向数据绑定是利用ES5的一个API,Object.definePropert()对数据进行劫持 结合 发布 订阅模式的方式来实现的。通过Object.defineProperty来劫持数据的setter,getter,在数据变动时发布消息…...
探索人工智能领域——每日20个名词详解【day6】
目录 前言 正文 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转载,请事先与我联系以…...
C++初阶 | [七] string类(上)
摘要:标准库中的string类的常用函数 C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP(面向对象)的思想&#…...
Django总结
文章目录 一、Web应用Web应用程序的优点Web应用程序的缺点应用程序有两种模式C/S、B/S C/S 客户端/服务端局域网连接其他电脑的MySQL数据库1.先用其他电脑再cmd命令行ping本机ip2.开放MySQL的访问 B/S 浏览器/服务端基于socket编写一个Web应用 二、Http协议1.http协议是什么2.h…...
【qml入门系列教程】:qml QtObject用法介绍
作者:令狐掌门 技术交流QQ群:675120140 博客地址:https://mingshiqiang.blog.csdn.net/ 文章目录 QtObject 是 Qt/QML 中的一个基础类型,通常用作创建一个没有 UI 的(不渲染任何东西的)纯逻辑对象。可以使用它来组织代码、存储状态或者作为属性和方法的容器。 以下是如何…...
2分图匹配算法
定义 节点u直接无边,v之间无边,边只存在uv之间。判断方法:BFS染色法,全部染色后,相邻边不同色 无权二部图中的最大匹配 最大匹配即每一个都匹配上min(u, v)。贪心算法可能导致&…...
[EndNote学习笔记] 导出库中文献的作者、标题、年份到Excel
菜单栏Edit中,选择 Output Styles 在默认的 Annotated上进行修改,在Bibliography栏下的Templates中修改想要导出的格式 其中,每个粗体标题表示,针对不同的文献类型,设置相应的导出格式。一般为Journal Article&…...
SQL Sever 基础知识 - 数据查询
SQL Sever 基础知识 - 一、查询数据 一、查询数据第1节 基本 SQL Server 语句SELECT第2节 SELECT语句示例2.1 SELECT - 检索表示例的某些列2.2 SELECT - 检索表的所有列2.3 SELECT - 对结果集进行筛选2.4 SELECT - 对结果集进行排序2.5 SELECT - 对结果集进行分组2.5 SELECT - …...
Vue入门——v-on标签
文章目录 规则v-on 一、案例总结 规则 v-on 作用:为html标签绑定事件语法: v-on:事件名:“函数名”简写为 事件名“函数名” 注意:函数需要定义在methods选项内部 一、案例 我们给案件绑定一个单击事件 <!DOCTYPE…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
