HTTL是什么?
HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似。
HTTL官网:
http://httl.github.io/zh/
这里介绍的背景是基于Struts2和HTTL开发一个J2EE简单示例:其中后台逻辑代码用Struts2,前台动态展示页面用HTTL。
言归正传:
集成HTTL到项目中,需要:
1、现在到HTTL官网下载两个jar包:
(1)HTTL核心包httl-1.0.11.jar,版本可以根据自己的需要下载。
(2)Struts集成包http-struts-1.0.11.jar。
这里需要说明的千万不要以为只下载一个http-struts-1.0.11.jar集成到工程中就行了,其实http-struts-1.0.11.jar中内容很简单,只包含一个Struts result type=httl的模板解释引擎和一个struts-plugin.xml。其实该包只定义并实现了一种Struts2结果类型,其中并不包含HTTL核心包。
2、把HTTL属性文件httl.properties放置在WEB-INF目录下。
我的属性文件内容如下:
import.packages+=domain template.directory= message.basename=/WEB-INF/messages input.encoding=UTF-8 output.encoding=UTF-8这里需要说明的是需要配置import.packages属性,官网解释为“领域模型包导入”,也即是各种Java bean所在的包。
附:
1、eclipse集成Struts2:参见文章http://blog.csdn.net/tterminator/article/details/45423003
2、集成HTTL相关包到工程中时,需要使用二进制包,而不是源代码包,即包含*.class的jar包,而不是*.Java的jar包。
3、当未引入HTTL核心包时,启动tomcat部署文件不会出现任何异常,但在访问时会出现异常java.lang.ClassNotFoundException: httl.web.WebEngine:
严重: Servlet.service() for servlet default threw exception java.lang.ClassNotFoundException: httl.web.WebEngine at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) at httl.web.struts.HttlResult.doExecute(HttlResult.java:46) at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:188) at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:369) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:273) at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:76) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。