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框架,使得前端也可以自己单开一个项目了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python socket编程6 - 使用PyQt6 开发UI界面实现TCP server和TCP client单机通讯的例子

使用PyQt6 开发UI界面实现TCP server和TCP client单机通讯的示例。 一、PyQt6 实现的界面 二、TCP server代码的修改示意 界面提供网络参数的配置,以及提供人机交互过程中的数据获取和显示。 1、把上面的server代码封装成两个部分 A、class Server 负责接受UI界面…

公司来了个00后,我愿称之为王中王,让人崩溃

前几天我们公司一下子也来了几个新人,这些年前人是真能熬啊,本来我们几个老油子都是每天稍微加会班就打算走了,这几个新人一直不走,搞得我们也不好走。 2023年春招就要开始了,最近内卷严重,各种跳槽裁员&a…

生产制造中4种导致产品成本、库存核算差错的问题!(化工/化妆品/生物制剂/混凝土等行业ODOO)

在化工/化妆品/生物制剂/混凝土等行业,因为其生产物料及产成品大都以液体(或散颗粒)形态为主,多以重量为计数方式;且液体(或散颗粒)相较于固体的较大区别就是产品计数上变数较大,固体…

DSShop移动商城网店系统 反序列化RCE漏洞复现

0x01 产品简介 DSShop是长沙德尚网络科技有限公司推出的一款单店铺移动商城网店系统,能够帮助企业和个人快速构建手机移动商城,并减少二次开发带来的成本。 以其丰富的营销功能,精细化的用户运营,解决电商引流、推广难题,帮助企业打造生态级B2C盈利模式商业平台。完备的电商…

Clean 架构下的现代 Android 架构指南

Clean 架构下的现代 Android 架构指南 Clean 架构是 Uncle Bob 提出的一种软件架构,Bob 大叔同时也是 SOLID 原则的命名者。 Clean 架构图如下: 这张图描述的是整个软件系统的架构,而不是单体软件,其中至少包括服务端以及客户端…

从声纹模型到语音合成:音频处理 AI 技术前沿 | 开源专题 No.45

facebookresearch/audiocraft Stars: 16.6k License: MIT AudioCraft 是一个用于音频生成的 PyTorch 库。它包含了两个最先进的 AI 生成模型 (AudioGen 和 MusicGen) 的推理和训练代码,可以产生高质量音频。该项目还提供了其他功能: MusicGen&#xf…

MySQL笔记-第02章_MySQL环境搭建

视频链接:【MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板】 文章目录 第02章_MySQL环境搭建1. MySQL的卸载步骤1:停止MySQL服务步骤2:软件的卸载步骤3:残余文件的清理步骤4&am…

原生横向滚动条 吸附 页面底部

效果图 /** 横向滚动条 吸附 页面底部 */ export class StickyHorizontalScrollBar {constructor(options {}) {const { el, style } optionsthis.createScrollbar(style)this.insertScrollbar(el)this.setScrollbarSize()this.onEvent()}/** 创建滚轴组件元素 */createS…

WEB渗透—反序列化(十一)

Web渗透—反序列化 课程学习分享(课程非本人制作,仅提供学习分享) 靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场 课程地址:PHP反序列化漏洞学习_哔哩哔_…

Python自动化测试web常见框架汇总

1、前言 目前,有非常多的Python框架,用来帮助你更轻松的创建web应用。这些框架把相应的模块组织起来,使得构建应用的时候可以更快捷,也不用去关注一些细节(例如socket和协议),所以需要的都在框…

金融帝国实验室(Capitalism Lab)V10版本新增崭新企业总部大楼

金融帝国实验室(Capitalism Lab)V10版本新增崭新企业总部大楼 ————————————— 【全新V10版本开发播报】 即将推出的V10版本将引入两座崭新的企业总部大楼!新大楼采用先进的现代化建筑设计,以取代旧的总部大楼。 ———…

[SHCTF 2023]——week1-week3 Web方向详细Writeup

Week1 babyRCE 源码如下 <?php$rce $_GET[rce]; if (isset($rce)) {if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\|\%|\>|\<|\|\"/i", $rce)) {system($rce);}else {echo "hhhhhhacker!!!".&…

代码随想录二刷 | 字符串 |重复的子字符串

代码随想录二刷 &#xff5c; 字符串 &#xff5c;重复的子字符串 题目描述解题思路 & 代码实现移动匹配KMP算法 题目描述 459.重复的子字符串 给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: tru…

XC4060 40V降5V/3.3V 0.6A小电流高耐压芯片 适用于单片机供电输出、电池供电设备

XC4060器件是高效率&#xff0c;同步降压DC/DC稳压器。具有较宽的输入范围&#xff0c;它们适用于广泛的应用&#xff0c;例如来自非稳压源的功率调节。他们的特点是一个长距离(500mQ/300mQ2型) 内部开关的效率最高 (92%)。Sum od (非A选项)和PWM模式(A选项)&#xff0c;工作频…

大部分只使用这 14 个 Git 命令就够了

必须了解的命令整理 1&#xff0c;git init 初始化一个新的Git仓库。 这将在当前目录中创建一个名为".git"的子目录&#xff0c;Git会将所有仓库的元数据存储在其中。 2&#xff0c;git clone 克隆一个已存在的仓库。 这会创建一个本地仓库的副本&#xff0c;包…

【C语言】深入理解C语言中的数学运算和类型转换

文章目录 引言取负运算的奥秘源码探索分析与解读 浮点数运算的精细差异源码分析 精度损失与隐式类型转换精度和除零运算探究float类型和double类型的精度各是多少&#xff08;即十进制有效位的位数&#xff09;&#xff1f;在你的机器上&#xff0c;“负数开方”是如何处理的&a…

【Spring Boot】如何集成mybatis-plus

在pom文件中导入maven坐标 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency><!--mybatis-plus--><dependency><groupId>com.ba…

uniapp 连接斑马PDA调试

1、先把PDA设置成开发者模式 打开设置--》关于手机 --》单击版本号&#xff0c;5次以上 连线单击5次以上 2、后退--》找到系统 --》高级 3、打开 --》开发都模式 4、找到调试 --》 打开USB调试 5、设置USB偏好设置&#xff0c;插入电脑连接PDA就会在通知栏上显示&#xff0c;默…

蓝桥杯 动态规划

01 数字三角形 #include<bits/stdc.h> using namespace std; const int N105; using lllong long; ll a[N][N],dp[N][N]; int main(){int n;cin>>n;for(int i1;i<n;i){for(int j1;j<i;j){cin>>a[i][j];}}for(int i5;i>1;i--){for(int j1;j<i;j){…

拒绝废话,直接开画!Python零基础教程之画图

引文 很多教程&#xff0c;开始教python&#xff0c;就是语法呀&#xff0c;字符类型这些基础的&#xff0c;虽说是基础&#xff0c;你也不能说没用。 但是&#xff0c;对于前期要快速成长的我们来说&#xff0c;属实不够看。 我们是新手&#xff0c;我们是菜鸟&#xff0c;但…