Freemarker 简介

Freemarker简介

FreeMarker允许Javaservlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写

FreeMarker被设计用来生成HTMLWeb页面,特别是基于MVC模式的应用程序

虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据

FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件

FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境

FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库

Freemarker开发配置

原本对freemarker了解不多,只知道是一种模板语言,我的个人网站设计时都没有考虑到使用freemarker,而是直接JSP展示。在网站上线推广过程中了解到,各个搜索引擎对动态的链接不够友好,就是说对于网站中XXX.action?name=www.tiantianfilm.com这种格式的链接,搜索引擎不予收录,网络蜘蛛更亲奈.html的静态链接,为了便于更方便的网站推广,所以将网站集成URLREWRITER+FREEMARKER技术改写了全站链接。大家可以去网站看下效果,www.tiantianfilm.com细心的人还是可以看见.action的痕迹的。

现在网站中有两套链接,.action的动态链接,.html的静态链接。链接的改写纯粹是为了便于网站的推广,URLREWRITER过滤器的使用,FREEMARKER模板语言开发,这两块本人将在后续文章中做详细讲解,本文将结合网站详细介绍STRUTS2+FREEMARKER的开发配置。

1、准备相应的JAR包,struts2-core-2.0.11.2.jar,xwork-2.0.5.jar,ognl-2.6.11.jar,freemarker-2.3.8.jar,commons-logging-1.0.4.jar

2、解压缩struts2-core-2.0.11.2.jar复制META-INF/struts-tags.tld复制到工程WEB-INF目录下,FREEMARKER中默认是不支持struts2标签的,所以需将标签库导入模板中。

3、修改WEB.XML文件

添加STRUTS2过滤器

Java代码

1.<filter>

2.<filter-name>struts2</filter-name>

3.<filter-class>

4.org.apacher.sturts2.dispatcher.FilterDispatcher

5.</filter-class>

6.</filter>

7.<filter-mapping>

8.<filter-name>struts2</filter-name>

9.<url-parttern>/*</url-parttern>

10.</filter-mapping>

<filter>

<filter-name>struts2</filter-name>

<filter-class>

org.apacher.sturts2.dispatcher.FilterDispatcher

</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-parttern>/*</url-parttern>

</filter-mapping>

Java代码

1.

注意:对于网络上所说的要想在Freemarker中使用Struts2标签必须配置一个新SERVLET

Java代码

1.<servlet>

2.

3.<servlet-name>JspSupportServlet</servlet-name>

4.<servlet-class>

5.org.apache.struts2.views.JspSupportServlet

6.</servlet-class>

7.<load-on-startup>1</load-on-startup>

8.</servlet>

<servlet>

<servlet-name>JspSupportServlet</servlet-name>

<servlet-class>

org.apache.struts2.views.JspSupportServlet

</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

在本人的实践中发现这步并非必须的,此处有待深入研究

4、接下来这步应该是最重要的,配置struts.xml文件

Java代码

1.<actionname="getVediosByCategory"class="com.wang.vedio.action.IndexAction"method="getVediosByCategory">

2.<resultname="success">/secondPage.jsp</result>

3.</action>

<actionname="getVediosByCategory"class="com.wang.vedio.action.IndexAction"method="getVediosByCategory">

<resultname="success">/secondPage.jsp</result>

</action>

以上ACTIN配置为正常使用STRUTS2的配置,但在结合FREEMARKER中则需做如下改变

Java代码

1.<actionname="getVediosByCategory"class="com.wang.vedio.action.IndexAction"method="getVediosByCategory">

2.

3.<resultname="success"type="freemarker">/WEB-INF/template/secondPage.ftl</result>

4.</action>

<actionname="getVediosByCategory"class="com.wang.vedio.action.IndexAction"method="getVediosByCategory">

<resultname="success"type="freemarker">/WEB-INF/template/secondPage.ftl</result>

</action>

注意:<reslutl>元素的type属性必须设置为freemarker,这是因为Freemarker模板文件必须由Freemarker模板引擎来解析,而Struts2内部实现了Freemarker模板引擎,但我们必须声明返回结果类型为freemarker才可以

经过以上四步,STRUTS2+FREEMARKER配置完成,可以进行开发应用,下面展示一个简单的实例

Java代码

1.IndexAction.java

2.

3.……

4.privateLoglog=LogFactory.getLog(IndexAction.class);

5.privateStringusername;

6.privateStringpassword;

7./**

8.*登录处理

9.*@return

10.*@throwsException

11.*/

12.publicStringgetVediosByCategory()throwsException{

13.log.info("执行了登录方法getVediosByCategory()");

14.returnSUCCESS;

15.}

16.省略相应(getter,setter方法)

17.…

IndexAction.java

……

privateLoglog=LogFactory.getLog(IndexAction.class);

privateStringusername;

privateStringpassword;

/**

*登录处理

*@return

*@throwsException

*/

publicStringgetVediosByCategory()throwsException{

log.info("执行了登录方法getVediosByCategory()");

returnSUCCESS;

}

省略相应(getter,setter方法)

创建登录页面index.jsp

Java代码

1.<s:formaction="getVediosByCategory">

2.登录名:<s:textfieldname="username"/><br>

3.密码:<s:textfieldname="password"/>

4.<s:submitvalue="登录"/>

5.</s:form>

<s:formaction="getVediosByCategory">

登录名:<s:textfieldname="username"/><br>

密码:<s:textfieldname="password"/>

<s:submitvalue="登录"/>

</s:form>

创建结果页面:user.ftl

Java代码

1.<#--

2.<#assigns=JspTaglibs["/WEB-INF/struts-tags.tld"]>

3.-->

4.<html>

5.<body>

6.欢迎<@s.propertyvalue="username"/>登录!

7.</body>

8.</html>

<#--

<#assigns=JspTaglibs["/WEB-INF/struts-tags.tld"]>

-->

<html>

<body>

欢迎<@s.propertyvalue="username"/>登录!

</body>

</html>

注意:

1、Struts2标签在JSP页面中的写法与在Freemarker模板文件中的写法不同。

Freemarker模板文件是以<@s.tag>开始,以</@s.tag>结束

2、Freemarker模板文件的处理,通过Web容器是无法直接处理的,因此不要让用户直接访问模板文件。在开发过程中,我们可以将Freemarker文件直接放到Web工程的WEB-INF目录或其子目录下(用户无法访问WEB-INF目录下文件),并在相应的struts-*.xml文件中配置type="freemarker"来输出模板

FREEMARKER接触不深,如有不足之处请大虾们多多指正

相关推荐