title: 土鳖的jsp改造 tags:
- sitemesh
- jsp
- template categories: 工作日志 date: 2017-12-23 10:50:38
背景
前端世界变化太快,各种模板各种新的技术框架出现。
虽然如此,我们java后端也有模板三宝
- jsp
- freemarker
- velocity
当然还有一些groovy的模板等等
我司目前仍然有老项目在使用jsp
问题
jsp存在一个比较麻烦的问题在于 无法写通用模板
通常我们会在一个jsp页面include各种header layout
如果当更改整体结构的时候会比较困难
比如现在
大量的js存放在公共reference中 导致js位置在上 而可能阻塞页面render【部分jsp中也有相关script可能对公共js依赖】
现状
用户抱怨前台页面出现太慢 白屏太久
原因
- 由于上古继承下来的jsp中有两个公共jsp 分别为reference和head 两个jsp都在每一个jsp都被引入
- 当有公共js时或者css开发都是直接加到reference或者jsp中【项目太久】
- 当js加载越来越多 由于没有使用现代化的前端开发方式 js的依赖关系太重
- js同步加载阻塞html的渲染那么导致出现白屏太久!
方案
- 使用其他模板引擎 比如velocity或者freemarker===》不太现实 更换代价比较高
- 每一个页面增加foot.jsp的引用 把大部分的js引入挪到最后 尽量不导致渲染被阻塞 ===》cost比较高,以后更改新的前端layout代价也很高 万一某天产品经理抽风想要所有的页面中增加右边栏 增加footer等等
- 在现有的页面上获取对应响应进行二次加工===》比如相关装饰 比如sitemesh
从上面几种描述来看目前方案3可能实现起来最简单也最保险!
方案2可以解燃眉之渴,但是后期的维护成本可能也会随着页面变化而随之增大
当然方案3也会存在自己的问题 毕竟多一次性能开销
实施
sitemesh是多年前笔者在大学时代用过的jsp装饰器。目前已经升级到了sitemesh3版本
- SiteMesh is a web-page layout and decoration framework and web- application integration framework to aid in creating sites consisting of pages for which a consistent look/feel, navigation and layout scheme is required.
- SiteMesh intercepts requests to any static or dynamically generated HTML page requested through the web-server, processes the content and then merges it with one or more decorators to build the final result.
- SiteMesh can also be used compose large pages of smaller pages and layouts.
- SiteMesh is fast. Really fast.
- SiteMesh can be used in Java based web-applications, or applied to content as an offline job.
- SiteMesh is extensible.
sitemesh2 只能支持head body title等几个有限的数据 但是sitemesh3已经支持自定义tag
本次考虑使用sitemesh3进行开发 将script数据提到body结束符之前~