网站首页 > 技术文章 正文
前言
随着容器技术(docker、k8s)以及微服务架构逐步成熟和发展,这种强调后端分离思想让jsp这个陪伴我近10年的页面渲染技术宣告落幕了,有点伤感。。。
jsp的痛有几个人明白
1、无法做到动静分离
传统java程序通过war包形式部署到tomcat,除了java代码和jsp页面,还包括css、js、图片等静态资源,一旦其中的某个jsp页面出问题,会导致部分功能不可用,甚至服务器响应阻塞,无法对外提供服务。
2、分工协调性差
jsp本质上是一个java类,所以早期java开发人员是前后端开发任务全负责,而UI设计师把设计好的html页面给开发人员集成,这个需要双方共同协调完成,效率低下,很难完成需求快速更新迭代,持续交付。
3、并发、吞吐量差
由于jsp本质是java类,只能放在web服务器(如tomcat),所以jsp不能部署到并发性能更好的nginx或者apache下,这是很多人诟病java web性能不好的原因之一。
4、扩展性差
jstl内置的一些tag标签耦合java代码(类似于react中的component组件),很难做到只修改页面而不用修改java代码,扩展性很差。
5、页面加载慢(同步机制)
如果一个页面承载的内容很多(如表单、表格、详情),会导致页面加载很慢。究其原因是jsp内在特性决定的。
jsp初始化流程
首先,jsp页面会初始化为servlet的class文件
其次,在servlet代码中解析jsp tag标签,转换成html网页标签
最后,以流的方式输出html网页
这里有个要命的问题,从jsp转换成html到浏览器渲染是一个同步过程。也就是说,如果数据加载很慢,会导致整个页面出不来。
前后端分离思想
1、动静分离,前端软负载架构
后端代码(如java)和前端(html、js、css、图片等)分离,单独部署。
前端程序强调静态资源,会单独部署到抗压能力更强的nginx下。而后端程序由于剥离了页面、js、css、图片,以接口形式对外提供服务,
服务能力下沉(基础平台能力,sass服务化能力)。
2、分工明确
3、异步加载机制
如果页面需要多次ajax调用,不需要同步进行,异步加载实现局部刷新。
4、组件化
以react、vue、angular为代表前端框架,提出组件化、框架化、复用性等工程化编程,使的前端也可以像后端那样提供可复用性、可扩展性、高可用性的前端程序。
小结
笔者认为,前后端分离思想是一种趋势,更深层次是技术更新很快,我们要与时俱进,时刻更新自己的知识库。当然对于之前不了解jsp的同学还是要去学习下,毕竟很多技术发展是有继承性的。
最后
如果觉得本文对您有帮助的话,记得关注、转发哦,我会为大家持续提供原创干货。需要资料,请关注、转发,私信“资料”面试+微服务+springboot资料免费赠送。
猜你喜欢
- 2024-10-09 JSP request.setAttribute()详解及实例
- 2024-10-09 网站建设分析JSP动态页面开发的优缺点
- 2024-10-09 如何在JSP页面中使用SpreadJS(jsp parseint)
- 2024-10-09 JSP的几种参数传值(jsp传值方式哪几种方式)
- 2024-10-09 给我 20 分钟,我教你快速掌握JavaWeb和Http
- 2024-10-09 真的吗,Java 的 JSP 已经被淘汰了?
- 2024-10-09 干货:js中你需要知道的undefined与null的区别
- 2024-10-09 JSP还有必要学吗?这篇文章告诉你(jsp还有学的必要吗)
- 2024-10-09 深入理解JSP(深入理解js)
- 2024-10-09 SSR 与当年的 JSP、PHP 有什么区别?
- 1507℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 510℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 486℃MySQL service启动脚本浅析(r12笔记第59天)
- 466℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 464℃启用MySQL查询缓存(mysql8.0查询缓存)
- 444℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 423℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 419℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)