当前位置: 首页 > news >正文

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个整数&#xff0c;输出由这些整数组成的n行矩阵。 输入格式: 第一行输入一个正整数N&#xff08;N<20&#xff09;&#xff0c;表示后面要输入的整数个数。 下面依次输入N个整数。 输出格式: 以输入的整数为基础&#xff0c;输出有规律的N行数据。 输入样例: 在…...

Android 各平台推送通知栏点击处理方案

示例代码如下&#xff1a; RongPushClient.setPushEventListener( new PushEventListener() { Override public boolean preNotificationMessageArrived( Context context, PushType pushType, PushNotificationMessage notificationMessage) { //透传通知时&#xff0c;调用。…...

什么是网络安全 ?

网络安全已成为我们生活的数字时代最重要的话题之一。随着连接设备数量的增加、互联网的普及和在线数据的指数级增长&#xff0c;网络攻击的风险呈指数级增长。 但网络安全是什么意思&#xff1f; 简而言之&#xff0c;网络安全是一组旨在保护网络、设备和数据免受网络攻击、…...

【前端】-【electron】

文章目录 介绍electron工作流程环境搭建 electron生命周期&#xff08;app的生命周期&#xff09;窗口尺寸窗口标题自定义窗口的实现阻止窗口关闭父子及模态窗口自定义菜单 介绍 electron技术架构&#xff1a;chromium、node.js、native.apis electron工作流程 桌面应用就是…...

Python中的类(Class)和对象(Object)

目录 一、引言 二、类&#xff08;Class&#xff09; 1、类的定义 2、类的实例化 三、对象&#xff08;Object&#xff09; 1、对象的属性 2、对象的方法 四、类和对象的继承和多态性 1、继承 2、多态性 五、类与对象的封装性 1、封装的概念 2、Python中的封装实现…...

dp-拦截导弹2

所有代码均来自于acwing中的算法基础课和算法提高课 Description 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c; 但是以后每一发炮弹都不能高于前一发的高度。…...

初识动态规划算法(题目加解析)

文章目录 什么是动态规划正文力扣题第 N 个泰波那契数三步问题使用最小花费爬楼梯 总结 什么是动态规划 线性动态规划&#xff1a;是可以用一个dp表来存储内容&#xff0c;并且找到规律存储,按照规律存储。让第i个位置的值等于题目要求的答案 >dp表&#xff1a;dp表就是用一…...

Vue2.0与Vue3.0的区别

一、Vue2和Vue3的数据双向绑定原理发生了改变 Vue2的双向数据绑定是利用ES5的一个API&#xff0c;Object.definePropert()对数据进行劫持 结合 发布 订阅模式的方式来实现的。通过Object.defineProperty来劫持数据的setter&#xff0c;getter&#xff0c;在数据变动时发布消息…...

探索人工智能领域——每日20个名词详解【day6】

目录 前言 正文 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如需转载&#xff0c;请事先与我联系以…...

C++初阶 | [七] string类(上)

摘要&#xff1a;标准库中的string类的常用函数 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c; 但是这些库函数与字符串是分离开的&#xff0c;不太符合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直接无边&#xff0c;v之间无边&#xff0c;边只存在uv之间。判断方法&#xff1a;BFS染色法&#xff0c;全部染色后&#xff0c;相邻边不同色 无权二部图中的最大匹配 最大匹配即每一个都匹配上min&#xff08;u&#xff0c; v&#xff09;。贪心算法可能导致&…...

[EndNote学习笔记] 导出库中文献的作者、标题、年份到Excel

菜单栏Edit中&#xff0c;选择 Output Styles 在默认的 Annotated上进行修改&#xff0c;在Bibliography栏下的Templates中修改想要导出的格式 其中&#xff0c;每个粗体标题表示&#xff0c;针对不同的文献类型&#xff0c;设置相应的导出格式。一般为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 作用&#xff1a;为html标签绑定事件语法&#xff1a; v-on&#xff1a;事件名&#xff1a;“函数名”简写为 事件名“函数名” 注意&#xff1a;函数需要定义在methods选项内部 一、案例 我们给案件绑定一个单击事件 <!DOCTYPE…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...