wordpress centos HTML5 程序员 Android shell Firefox java php Windows Python 开源 linux linux命令 google apache nginx Ubuntu 微软 mysql

在springMVC中配置httl视图与jstl视图

httl模板引擎是淘宝内部使用的一个JAVA模板引擎,是目前Java里最快的模板引擎,没有之一。

本来使用SpringMVC时准备就用jstl的,个人感觉JSTL和EL表达式在一起也挺好用的,但是考虑到JSTL的性能不是很理想,主要问题在于JSP只有Scriptlet是编译的,Tag和EL是解释执行的,JSTL也是通过各种反射实现的,性能不够理想。所以也就准备用HTTL的。之所以不用freemarker,一则是自己已经比较熟悉它了,二则freemaker的实现代码比较糟糕,第三还是性能追求极致。既要HTTL的高效,又要JSTL的灵活和简单,可以同时配置两种视图。

其实springMVC要配置多个视图是很容易的,直接配置即可。它会根据后缀名和路径找到所要使用的模板。

比如我的配置:

<bean  id="httlviewResolver"  class="httl.web.springmvc.HttlViewResolver">
        <property name="contentType" value="text/html; charset=UTF-8" />
</bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
      <property name="prefix" value="/jsp/"/>
      <property name="suffix" value=".jsp"/>
</bean>

HTTL和springMVC的集成,HTTL官方也有现成的例子可以参考。在这里只想稍微提几个需要注意的地方。

HTTL依赖JDK,需要JDK里的tools.jar来编译模板。所以需要配置build path添加对这个jar的依赖.也可以使用JRE+javasisist包的配置,用javasisist来编译。

HTTL在使用时需要导入领域模型,也就是必须配置import.packages。比如import.packages+=com.zhurou.domain。尤其需要注意的是这里的“+”号是必须的,手册上没有强调,导致我在这花了两个小时。

如果出现类似下面的错误,很可能就是你这里错了,主要是这个报错比较模糊,难于理解,所以记录下来,万一有人遇到了可以参考下。

javax.servlet.ServletException: Servlet.init() for servlet springmvc threw exception
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    java.lang.Thread.run(Thread.java:722)
root cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'viewResolver' defined in file [E:dataeclipsedata.metadata.pluginsorg.eclipse.wst.server.coretmp3wtpwebappsSpringmvcWEB-INFclassesconfigspringmvc-servlet.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException

java.lang.IllegalStateException
    httl.internal.util.BeanFactory.getInstance(BeanFactory.java:320)
java.lang.IllegalStateException: HttpServletRequest

HTTL使用上并不容易上手,案例很少,网上很难找到案例,所以使用有风险。如果对模板引擎的原理没有一定的理解,J2EE功夫不够深的话,需要慎重考虑引入。而且HTTL的语法很少,微内核架构,更多功能需要通过扩展实现,有些时候不够灵活。

附:完整war包,使用SpringMVC 3.2.3+HTTL 1.0.9 配置成功,均为最新稳定版。

延伸阅读

评论