当前位置: 首页 > 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…...

JVM:双亲委派(未完结)

类加载 定义 一个java文件从编写代码到最终运行&#xff0c;必须要经历编译和类加载的过程&#xff0c;如下图&#xff08;图源自b站视频up主“跟着Mic学架构”&#xff09;。 编译就是把.java文件变成.class文件。类加载就是把.class文件加载到JVM内存中&#xff0c;得到一…...

Leetcode 2661. 找出叠涂元素

Leetcode 2661. 找出叠涂元素题目 给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。arr 和 mat 都包含范围 [1&#xff0c;m * n] 内的 所有 整数。从下标 0 开始遍历 arr 中的每个下标 i &#xff0c;并将包含整数 arr[i] 的 mat 单元格涂色。请你找出 a…...

vscode代码调试配置

C/C代码调试 点击 vscode左侧的 run and debug&#xff0c;新建launch.json 和 tasks.json&#xff0c;并进行配置如下 launch.json {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more informati…...

PTA 7-225 sdut-C语言实验- 冒泡排序中数据交换的次数

听说过冒泡排序么&#xff1f;一种很暴力的排序方法。今天我们不希望你用它来排序&#xff0c;而是希望你能算出从小到大冒泡排序的过程中一共进行了多少次数据交换。 输入格式: 输入数据的第一行为一个正整数 T &#xff0c;表示有 T 组测试数据。 接下来T行&#xff0c;每行…...

新的 BLUFFS 攻击导致蓝牙连接不再私密

蓝牙是一种连接我们设备的低功耗无线技术&#xff0c;有一个新的漏洞需要解决。 中间的攻击者可以使用新的 BLUFFS 攻击轻松窥探您的通信。 法国研究中心 EURECOM 的研究员 Daniele Antonioli 演示了六种新颖的攻击&#xff0c;这些攻击被定义为 BLUFFS&#xff08;蓝牙转发和…...

安全测试之推荐工具(一)

文章目录 一、前言二、Web安全&#xff08;一&#xff09;AppScan&#xff08;推荐&#xff09;&#xff08;二&#xff09;AWVS&#xff08;推荐&#xff09;&#xff08;三&#xff09;Burp Suite&#xff08;推荐&#xff09;&#xff08;四&#xff09;OWASP ZAP 三、主机安…...

final关键字

修饰 类&#xff0c;属性&#xff0c;方法&#xff0c;局部变量&#xff08;包括方法参数&#xff09; 类似c语言的const 使用方式&#xff1a; 1 不希望类被继承 用final类&#xff08;类很重要&#xff0c;担心别人重写/修改&#xff09; 2 不希望某…...

WPF MVVM模式下如何将UI窗口变量传参到Viewmodel层

WPF MVVM模式下如何将UI窗口变量传参到Viewmodel层 UI层窗口定义 //窗口中绑定ViewModel<hc:GlowWindow.DataContext><viewmodel:MainWindowViewModel /></hc:GlowWindow.DataContext>//注册初始化事件<hc:Interaction.Triggers><hc:EventTrigger…...

条款22:将成员变量声明为private

1.前言 首先&#xff0c;我们应该利用反证法&#xff0c;看看为什么成员变量不该是public&#xff0c;然后再了解所有反对public成员变量的论点同样适用于protected成员变量。最后得出一个结论&#xff1a;成员变量应该是private。 2.为什么不用public 如果成员变量不是publ…...

PTA 7-224 sdut-C语言实验-排序问题

输入10个整数&#xff0c;将它们从小到大排序后输出&#xff0c;并给出现在每个元素在原来序列中的位置。 输入格式: 输入数据有一行&#xff0c;包含10个整数&#xff0c;用空格分开。 输出格式: 输出数据有两行&#xff0c;第一行为排序后的序列&#xff0c;第二行为排序…...

那个网站做问卷好/苏州企业网站关键词优化

在前面随笔《C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理》介绍了基于微信开放平台接口实现的微信扫码直接登录的过程。本篇介绍对扫码登录的一些改进和处理&#xff0c;以便更方便应用在实际项目中。 1、扫码登录配置处理 在我前面的随笔扫码登录处理中&#x…...

家装设计师怎么学/文章优化关键词排名

Matlab强大的函数库涉及各个领域 matlab各个领域的函数库&#xff1a;https://ww2.mathworks.cn/matlabcentral/fileexchange/ 发现向量arrayA中最小的Num个数 function [ minFlags ] findMinFlag( arrayA,num ) %FINDMINFLAG Summary of this function goes here % Deta…...

最新在线免费网站/电脑培训班有哪些科目

&#xfeff;为方便完成指定数据表的同步操作&#xff0c;可以采用dblink与merge结合的方法完成。操作环境&#xff1a;此数据库服务器ip为192.168.196.76,有center与branch两个库&#xff0c;一般需要将center的表数据同步到branch&#xff0c;center为源库&#xff0c;branch…...

wordpress 博客 知名/网络营销策划书ppt

1.import 项目&#xff0c;sdk目录&#xff1a;sdk\samples\android-21\legacy\ApiDemos&#xff0c;import时一直下一步就ok了。2.Error:Error: The file name must end with .xml&#xff0c;重命名添加.xml3.Run app,这时可能碰到3个问题&#xff1a;此问题需要导入supportv…...

多多在线免费观看电视剧/搜索引擎优化的方法包括

简介 PSO(粒子群算法)是群智能算法的一种&#xff0c;其他的群智能算法还有蚁群算法&#xff0c;遗传算法等。其他的智能算法还有模拟退火。之前看过一段时间的PSO&#xff0c;商务智能课程最后的大作业便想用一下&#xff0c;刚好在github上看到有人用模拟退火解决TSP…...

软件下载类型网站怎么做/武汉seo结算

后退文件夹: cd - 在重复一遍就是前进了 转载于:https://www.cnblogs.com/Baronboy/p/7787760.html...