前言
随着容器技术(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的同学还是要去学习下,毕竟很多技术发展是有继承性的。
作者简介: