github下载地址: https://github.com/xuesong123
oschina: http://git.oschina.net/xuesong123/jsp-jstl-engine
# 修改功能
1. 增加预编译功能
2. el表达式和jsp表达式增加#前缀指令,使用#前缀的表达式将不进行html编码3. 完善文档
4. 增加格式控制,去除因为标签导致的多余的空格和换行
Ayada是一个jsp/jstl的模板引擎,基本支持jsp/jstl的全部功能,使用jsp/jstl编写的页面基本不需修改就可以使用Ayada执行。
为什么不直接使用jsp,而是要再造一个轮子呢?
统一实现,不同的jsp/servlet容器对jstl并不完全兼容。某些容器对标签属性和el的支持很不友好。这对于那些需要在不同的jsp/servlet容器中运行的应用程序来说很坑。
某些功能的实现很麻烦,例如pageContext.include方法是在不同的pageContext中执行,父页面和被include的页面的pageContext是互相隔离的,传递参数只能通过其他方式。Ayada对pageContext.include做了扩展,可以直接传递参数。
在非web环境中使用jstl。jstl本身专为web设计,API中直接跟web绑定死了,很难在其他环境中使用。Ayada中移除了web相关的对象,通过约定支持一些web中定义的对象。
在jsp中页面和web环境绑定,同样的页面如果想生成静态文件必须修改jsp代码重定向输出到本地文件非常麻烦。使用模版引擎就可以很方便的执行已经编写好的jsp页面输出到指定文件。
jsp中的jstl定义很繁琐,Ayada简化了标签定义。Ayada还提供了action,invoke标签来调用其他模版,将其他模版当成宏使用,实现上仅仅相当于一个方法调用。
Ayada基本兼容jstl全部功能,原来使用jsp编写的代码基本上不需要修改就可以直接使用Ayada运行。
Ayada自带的默认标签库扩展了大量常用标签,可以很方便的对代码隔离,避免大量的代码堆砌到一个页面,提高了代码可重用性。
Ayada可以禁用java脚本,只使用标签编写,强制展现层和逻辑层分离,一定程度上也使web程序避免被人上传jsp木马。
Ayada的el引擎可以任意替换,如果你喜欢其他的表达式语言,你可以把默认的el引擎替换为其他实现。
在jsp中所有的jsp表达式和el输出都需要人工编码加上html转码,否则可能被xss注入。Ayada在引擎层默认对所有的jsp表达式和el表达式进行html编码,同时支持自定义转码函数。