前言

随着容器技术(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页面中的java执行了两次 jsp为什么会被淘汰_css

 首先,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的同学还是要去学习下,毕竟很多技术发展是有继承性的。

 

作者简介

编筐少年一枚简单的北漂程序员。喜欢用简单的文字记录工作与生活中的点点滴滴,愿与你一起分享程序员灵魂深处真正的内心独白