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…

Appium:iOS部署

iOS部署 要部署Appium进行iOS自动化测试,需要遵循以下步骤: 1. 安装Node.js: 访问Node.js官网(https://nodejs.org/download/),根据您的操作系统和需求下载合适的版本。在Windows系统上,安装…

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

效果图 /** 横向滚动条 吸附 页面底部 */ 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反序列化漏洞学习_哔哩哔_…

问题集锦(一)

一、字符串常量池是什么?不同的JDK版本都分别位于哪个区域? 字符串常量池是Java语言中的一个特性,它是一个存储字符串常量的池子。字符串常量池的设计目的是为了减少重复的字符串对象,从而节约内存空间和提高程序性能。 在JDK1.…

Hadoop YARN组件

1. 请解释Yarn的基本架构和工作原理。 YARN,也被称为"Yet Another Resource Negotiator",是Apache HadoopYARN,也被称为"Yet Another Resource Negotiator",是Apache Hadoop的一部分,它被设计为一…

OWASP Web 安全测试指南-Web 应用程序安全测试

Web 应用程序安全测试 4.0 简介和目标 4.1 信息收集 4.2 配置和部署管理测试 4.3 身份管理测试 4.4 身份验证测试 4.5 授权测试 4.6 会话管理测试 4.7 输入验证测试 4.8 错误处理测试 4.9 弱密码测试 4.10 业务逻辑测试 4.11 客户端测试 4.0 简介和目标 本节介绍 O…

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…

力扣二叉树--第三十八天

前言 后面几天准备期末考试&#xff0c;要断更了。8号or 9号再开始。 内容 一、二叉搜索树中的众数 501. 二叉搜索树中的众数 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c…

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;包…