在WEB程序中使用FreeMarker心得

今天做了Struts2、Hibernate3、Spring2、FreeMarker的框架整合程序。

按照网上找的相关资料去做的程序报错了,因为是第一次用FreeMarker,所以没有经验,网上说只要把Struts2的核心jar包里的struts-tags.tld放在WEB-INF目录下,在*.ftl页面里做<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />这样的引用就可以,可我的程序却报了

exception:freemarker.template.TemplateModelException: Could not load taglib information,

root cause:java.lang.ClassNotFoundException: org.apache.struts2.views.jsp.ui.AutocompleterTag
这个异常,后来又看了看Struts2里的关于FreeMarker的API和在网上搜索的FreeMarker的相关资料,最后才跑通的,源代码引用如下:

*.ftl页面需要引用的源代码:

<#assign page=JspTaglibs["http://www.opensymphony.com/sitemesh/page"]>
<#assign s=JspTaglibs["/struts-tags"] />

<html>
<head>
  <title>注册页面</title>
</head>
<body>
  <@s.form method="post" name="inputform" action="register.action!register" >
      <@s.textfield label="用户名" name="username"/>
      <@s.password label="密码" name="password"/>
      <@s.textfield label="出生日期" name="birthday"/>
      <@s.submit value="注册" align="left" />
  </@s.form>
</body>
</html>

但我的WEB程序第一访问页面仍然是jsp页面,因为FreeMarker只能用action跳转的方式才能被访问,因为jsp页面的访问速度比ftl页面的访问速度慢,所以我建议第一访问页面也用ftl,这时问题又出现了,如果我们像访问jsp页面那样直接访问ftl页面的话,页面会显示ftl语言的源代码,而不是我们要的效果,在struts2-core-2.0.0.jar的版本里有一个org.apache.struts2.views.freemarker.FreeMarkerServlet这个类,这个类在后期的新版本中被删掉了,要想使用这个类就需要我们自己从新把那个类打包到新版本中,在web.xml中还要做相应的配置代码,配置代码如下:

<servlet>    

   <servlet-name>freemarker</servlet-name>    

   <servlet-class>org.apache.struts2.views.freemarker.FreemarkerServlet</servlet-class>    

</servlet>    

<servlet-mapping>    

   <servlet-name>freemarker</servlet-name>    

   <url-pattern>*.ftl</url-pattern>    

</servlet-mapping>

你可能感兴趣的:(apache,jsp,Web,freemarker,struts)