从2006年至2011年底,泽元软件一直都在以JSP为主要的展示层技术,而在长期的使用过程中,我们发现了JSP的一些问题,主要有:

1)JSP是一个开放的模型,既可以使用标签和自定义标签,也可以使用<>来直接嵌入JAVA代码,这就导致了我们的许多同事特别是为

客户进行二次开发的人员,为了方便省事,在JSP页面尤其是项目专有的JSP页面中嵌入小段的JAVA代码,为后续升级带来许多麻烦。

2)由于允许<>嵌入代码,JSP须将整个页面文件转换成对应的JAVA代码,再将JAVA代码编译成class文件,通过浏览器访问

jsp页面时实际执行的是这个class文件。这就导致了第一次访问JSP页面或者JSP页面有修改时会比较慢,出现有明显的停顿现象。

3)

因为是开放的模型,所以JSP必须要做很多准备工作,以使嵌入其中的JAVA代码和标签能够正常运行,这就导致了运行性能不是很理想。

4)不同的中间件在实现J2EE标准时会在一些细节方面存在差异,导致一些JSP页面在不同的中间件上有不同的表现。特别明显的是WebSphere的

一些版本,在编译JSP页面时会将两个紧密相连的自定义标签中的第二个删除掉,必须在两个标签之间加空格才能够正常编译。

2012年初我们升级了泽元通用框架到2.0版本,开始以插件机制为核心开发产品和客户系统,这时候发现JSP和插件机制出现很不协调的现象,主要有两个方面:

1)插件机制要求插件可热部署、热启动和热卸载,这就要求插件中的class能够随着插件停止而移出内存,以免出现插件没有了但它的类还在使用的情况。但JSP编译后的类由中间件管理,这些JSP类以及它们引用到的class都没有办法移出内存,除非应用整体重启。

2)插件机制要求各个插件中的页面文件、资源文件和class分别打成jar包,不再以单个文件的形式存放在应用目录下,这样做的目的是为了便于项目实

施时覆盖产品中的文件,项目实施人员可以将要修改的资源文件和页面文件从jar包中解压出来放到应用根目录的对应路径下,然后再进行修改,这样在用户请求

某个资源文件或者页面文件时框架会优先使用应用目录下的单个文件,如果没有找到再从jar包中读取。例如项目要求修改登陆界面,开发人员就可以从

com.zving.platform.ui.jar中将login.zhtml解压出来,放到应用根目录下,然后修改login.zhtml,这时候用

户再请求/login.zhtml,即会访问到修改后的login.zhtml,并且产品升级后修改的login.zhtml不会被覆盖。在JSP中要实

现以上的机制会比较困难。

于是我们决定寻找一种动态页面适用的模板机制来替换JSP,考察了Velocity和FreeMarker,发现都不太符合我们的使用习惯,对于前端人

员来说还需要比较多的学习时间。考虑到我们的ZCMS产品中也有简单的用于静态化的模板机制,使用起来和JSP比较类似,但性能不能满足动态页面的需要。

经反复思考决定改造ZCMS中的模板机制,提升成框架的一个组成部分,同时适用于动态页面和静态化shtml文件。最终经过一个月的开发和调试,实现了现

在所使用的模板机制,在用作动态页面时后缀为zhtml。zhtml的模板机制有以下优点:

1)和JSP使用起来完全一致,除了不能使用<>代码块和不能使用jsp前缀的内置标签除外;

2)能使用EL表达式,但和中间件的EL没有关系,是从apache的EL表达式移植并改造过的;

3)能在EL表达式中使用函数,内置了常用函数并可以自行扩展;

4)内置了if/else之类的常用标签并可以自行扩展;

5)在ZCMS的模板中可以调用ZHTML中的标签;

6)在ZHTML中也可以调用ZCMS中的模板标签,前提是将这些标签用包起来,以便为ZCMS标签指明上下文循环;

7)性能比JSP快,根据页面的复杂度不同要快上5%-50%;

8)编译时间非常短,是JSP的几十分之一;

9)可以在JAVA代码中执行模板片段;

10)在所有中间件上表现得一模一样。

当然缺点也同时存在:

1)不是标准;

2)没有第三方标签库之类的支持;

3)Tree、

DataGird及DataList三个标签还没有完全协调,在这三个标签体内使用表达式输出的效果和其他标签不一致,这是因为这三个标签是要通过

AJAX加载数据的,不能像其他标签一样直接执行EL表达式,而是将标签体作为模板,在数据都准备好了以后批量替换的。

最后一个缺点将在后续版本修改,以使所有标签表现一致。

文章源于泽源软件知识库

为什么要把html改为jsp,为什么要用ZHTML替换JSP相关推荐

  1. Servlet与JSP学习笔记(五) JSP核心(下)

    同样可以参考菜鸟笔记. JSP标签 JSP除了包括以"<%"开头的JSP标记,还包括以"<jsp:"开头的JSP标签.实际上,前者的每种标记都有后者 ...

  2. jsp java 上传图片_如何在Jsp上传图片

    1. 新建一个Dynamic Web Project: 2. 键入工程名UploadImage: 3. 选择Dynamic web module version :2.5 4. 点击"Fin ...

  3. php 和jsp,jsp和php哪个好?jsp和php的简单比较

    jsp和php这两个Web开发技术哪个好?这个问题应该会有很多人问,但是每种开发技术都有各自的优缺点,所谓的哪个好,不过是看你更擅长使用哪一种技术,所以今天我们来对比一下jsp和php,介绍jsp和p ...

  4. jsp页面内引入静态html,JSP技术实现动态页面到静态页面的方法

    本文是介绍了jsp技术实现动态页面到静态页面的方法,分享给大家,具体如下: 对于JSP技术实现动态页面到静态页面的方案,我们从三个步骤来说明: JSP技术实现动态页面到静态页面的方案第一: 为了能深入 ...

  5. 【IntelliJ IDEA】使用idea解决新建jsp文件而找不到jsp文件模版的新建选项

    使用idea解决新建jsp文件而找不到jsp文件模版的新建选项,这样每次创建一个新的jsp文件岂不是很耗时间? 解决办法: 就是要让idea知道你需要在这个目录下创建jsp文件 左上角,file中点击 ...

  6. JSP中的注释操作及JSP中的三种Scriptlet

    ***JSP中的注释操作及JSP中的三种Scriptlet******** 1,JSP中的注释操作 <h3><1>显示注释</h3>语法:<!--注释内容-- ...

  7. 不属于jsp构成元素_JSP构成元素-JSP基础

    JSP是Java Server Page的缩写,通常JSP页面使用HTML表示网页上的静态内容,而使用JAVA代码表示动态内容.构成元素包括: 1.静态内容:即一些HTML代码.它与java和jsp的 ...

  8. 演示JSP Scriptlets、声明语句、jsp表达式的使用

    一.创建example01.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&q ...

  9. Jsp学习总结(1)——JSP九大内置对象和四种属性范围解读

    一.四种属性范围 1.1.在JSP中提供了四种属性保存范围 page:在一个页面内保存属性,跳转之后无效 request:在一次服务请求范围内,服务器跳转后依然有效 session:-在一次会话范围内 ...

最新文章

  1. 一文梳理多任务学习(MMoE/PLE/DUPN/ESSM等)
  2. 处理时间_4_计算时间列所在的周的序号
  3. 提升语义分割性能的几种方法
  4. 测试计算机操作基础知识,计算机病毒基础知识测试
  5. C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表
  6. SAP CRM 订单抬头文本的可编辑性讨论
  7. SAP CRM WebClient UI how to disable excel export
  8. python 字典操作
  9. 面试官:说一下List排序方法
  10. java sax解析复杂xml_SAX解析复杂的xml字符串
  11. VS2008中 没有QT的代码智能提示
  12. 字符数组的定义与使用具体解析
  13. CAS SSO 单点登录实例
  14. centos7使用kubeadm部署高可用k8s集群
  15. HTML和CSS实现京东登录页面(html,css代码详解)
  16. 输入的产品无法再此计算机,一键重装系统时遇到“安装程序无法将Windows配置为在此计算机的硬件上运行”...
  17. UI设计师求职中常被问到的13个面试题及答案总结
  18. 在苹果Macbook Pro上安装Windows 7
  19. 网页源代码查看竟然有这么多方法!你都知道吗?
  20. linux防火墙 限制流量,Linux防火墙对P2P流量的限制

热门文章

  1. 机器学习数据清洗之异常数据处理、标准差法、MAD法、箱图法、图像对比法、异常值处理准则
  2. seaborn clustermap详解及绘制
  3. 华为今年不会发布鸿蒙系统的手机,华为:今年不会推出鸿蒙系统手机 将坚守安卓生态...
  4. ISLR_Power
  5. Bi-level error correction for PacBio long reads. PacBio长读数的两级纠错
  6. Numpy与Pandas基础
  7. 随机森林及重要参数解析
  8. java 两个值对换_java将两个整型变量值进行互换的几种实现方法
  9. php mysql study_phpStudy 升级 MySQL5.7
  10. Nativefier 网页转桌面程序 app