微信号:ac_aric

介绍:通俗幽默为您讲解编程技术!涉及JavaScript,Web,Java,架构,HTTP,JSON,MVC等方面

大浪淘沙,JSP终将死去

2015-08-10 07:11 Aric

首先讲明,我不是标题党。这纯属我个人的意见,勿喷。


先来讲讲JSP是怎么出现的吧.


在早期的WEB中,JS,CSS远未成熟,技术大方向并不明确!由于前端语言的匮乏,各家大公司都推出基于后端的模板语言。比如JSP,ASP,PHP等。


这些基于后台的模板语言引领了一个时代 !


比如在JSP中,内置基本数据对象,外加自定义Tag,可以实现“半组件式”的开发,这在当时大大加快了系统的开发速度。



但在在这些服务器模板语言中,单就JSP而言,存在着一些无言的痛点:


1. 页面无法保存数据

除了网页中保存数据,其他并没有保存数据的地方。例如当前登陆用户,用于页面计算的辅助数据等。

做过JSP的都知道,到处使用 input[type="hidden"]来存储数据,一方面导致页面HTML越来越大,渲染越来越慢。

另一方面,这些代码都是游离于架构之外,早晚有一天会雪崩,千里之堤毁于蚁穴!


2. 完全黑盒运行

JSP最终会编译成Class文件运行,它的运行机制完全黑盒的。多少次,JSP报错,只能靠“猜”解决问题。

黑盒导致的另外问题是,不能单独运行。比如一张表单,想作为邮件发送给用户,JSP并不能实现,只能用HTML重写一遍。这简直不能忍受!


所以很多公司都搭配FreeMarker,或者JasperReport使用,来单独实现打印等功能。这就要求员工有更多的技术压力,不要以为这是好事,这是运营成本!


3. 粒度太粗

如何理解粒度太粗呢? 比如,有一个页面,想要重用,或者页面中的某些HTML想重用!由于JSP和后台数据严格对应,并且JSP不能分离,不可能做到。

而在开发中,如果做不到最小粒度的重用,你将迷失在复制粘贴的海洋中。

如果你不觉得复制粘贴有什么问题,只能说明你还停留在码农的层次。


基于如上,很多人舍弃了JSP,转向了FreeMarker,Velocity等分离的模板语言!

这些语言都是针对JSP的缺点做了改进。拿FreeMarker来说吧。


1.可以单独运行,意味着用户可以重用页面。比如上面说的表单发送邮件,可以直接使用FreeMarker生成HTML,而不用重新写另外一套。

2. 更小粒度的组件宏,用起来比JSP稍具灵活性。


FreeMarker,Velocity作为后台模板语言,它们依然没有解决一些核心问题。比如:页面无法存储常用的数据,无法脱离后台运行等问题。

但是它们作为生成报表,格式打印,邮件模板等工具却越来越流行。

使用FreeMarker打印,要比JasperReport的打印,轻量了不止一个数量级。


但是它们也只能作为JSP的过渡产品,以及一些特殊的用法,作为页面逻辑展示,也越显吃力。

时代在发展,技术更是日新月异!

基于后台的模板语言,始终把“前端”都摆在一个“辅助”的位置上,它一直在为了做“主力”而奋斗着...



随着Web的发展,JS的稳定以及流行,最终基于JS的模板语言出现了。

例如简单精炼的Underscore Template,Mustache,支持自定义标签的Handlebars等。


基于JS的模板可以更小粒度定义,运行基于JS,相关的数据直接存储在JS中,方便使用。

JS模板可以基于任何JS引擎运行,那么打印以及发送邮件这类问题,都可以不使用其他工具直接实现,减少了开发人员的技术压力。


目前流行的前端MVC框架,如Backbone,AngularJS,ReactJS...等等,都是基于模板来运行。随着Web的持续发展,JS模板终将或者已经成为主流。



而已经年迈的JSP,明显已跟不上时代的脚步,终将慢慢逝去...









 
Aric 更多文章 React大热?再来泼冷水! 写不完的工作总结? 来~聊聊绩效考核 Java开发必用的工具包 “云”到底是什么 Bootstrap VS Semantic VS Foundation
猜您喜欢 R语言常见离散分布及相关函数 用 python 扫描本地音乐并下载歌词 .NET开发者如何愉快的进行微信公众号开发 Android开发技术周报 Issue#5 浅析Python装饰器