Freemarker 是一个不依赖 web 容器的模板引擎,一个基于模板生成文本输出的工具。其工作的原理如下图:

  freemarker 不是一个 web 应用的框架,而适合作为 web 应用的一个组件。使用 freemarker ,可以用已经定义好的模板,生成各种想要的文件,在某些方面使用起来还是挺快捷的,例如使用 freemarker 编写一个代码生成器。本文就是一个结合 Struts2 web 应用框架的使用 Freemarker 的例子。具体的理论方面的知识,就不在此赘述了。

  这个例子是结合 Struts2 2.3.15版本,freemarker 2.3.19。主要的配置文件及代码如下:

  (1)首先是配置 Struts2

  

  <!-- 配置 Struts2  -->
<filter>
<filter-name>struts2AFreemarker</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2AFreemarker</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  (2)其次是配置 Freemarker

  <!-- 配置 Freemarker    (不需要配置,只需要配置 JspSupportServlet 即可使用 Freemarker 组件,但是配置了,也不会有什么错误!)-->
<servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
<!-- 配置模板的路径 -->
<init-param>
<!-- 配置模板存放的位置(我这里放在了主目录下面) -->
<param-name>TemplatePath</param-name>
<param-value>/</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>

  (3)然后就是配置 Struts.xml 文件,基本上和单独使用 Struts 没什么大的变动,就是在 result 的返回页面时,type 类型要设为 freemarker ,这样,响应的信息就可以交给 Freemarker 组件处理了。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <default-action-ref name="index" /> <global-results>
<result name="error">/error.jsp</result>
</global-results> <global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings> <action name="freemarker" class="com.struts2freemarker.test.action.FreemarkerAction">
<result name="success" type="freemarker">
/index.ftl
</result>
</action>
</package> <include file="example.xml"/> <!-- Add packages here --> </struts>

  (4)在 Action 中,使用正常的方法,如果想要将某个值传到 Freemarker 的模板中时,只要将这个值绑定到相应的属性中,就行了。我是将变量 freemarker 传到 index.ftl 中,部分 action 代码如下:

    /**
* 序列编号
*/
private static final long serialVersionUID = 1L; private String freemarker = "free"; /**
* 构造方法
*/
public FreemarkerAction() { } public String execute(){ log.info("execute 方法执行了!"); return SUCCESS;
} /**
* @return the freemarker
*/
public String getFreemarker() {
return freemarker;
} /**
* @param freemarker the freemarker to set
*/
public void setFreemarker(String freemarker) {
this.freemarker = freemarker;
}

  (5)具体的模板文件(index.ftl)如下:

<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> <#--这一句是为了让Freemarker识别struts2的标签 -->

            <#--struts-tags.tld ,如果没有此文件,则在模板中,就不能使用 Struts2 的标签了,但可以使用 Freemarker 的语言下的标签 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>测试 Freemarker 的页面</title> </head> <body>
this is the testing Freemarker's page! <h1>${freemarker}</h1> <@s.form action="reg" >
<@s.textfield label="用户名" name="uname" />
<@s.submit />
</@s.form> </body>
</html>

如上面所写的,如果要想使用 Struts2 的标签,还需要将 struts2-core-2.3.15.jar 的在 MATA-INF 下的 struts-tags.tld 文件复制出来,放到想要放置的位置。这里,我是放在了项目目录下的 WEB-INF/struts-tags.tld 下,然后再在 web.xml 文件中,配置标签的 Servlet ,如下:

<!-- 配置使用标签时的标签支持配置 -->
<servlet>
<!-- define a JspSupportServlet Object -->
<servlet-name>JspSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<!-- setting JspSupportServlet auto start -->
<load-on-startup>1</load-on-startup>
</servlet>

这样,就可以在 index.ftl 模板中,使用 Struts2 的标签了。

  这样,就完成了一个简单的 Struts2 和 Freemarker 的整合了,使用起来还是挺容易的,适合模块化开发,只要前台人员将页面组织好,后台人员只需要将数据塞到指定的页面中的位置就行了。

Struts2 结合 Freemarker 实例的更多相关文章

  1. Struts2漏洞利用实例

    Struts2漏洞利用实例 如果存在struts2漏洞的站,administrator权限,但是无法加管理组,内网,shell访问500. 1.struts2 漏洞原理:struts2是一个框架,他在 ...

  2. SSH---整合Struts2&Spring&Hibernate(实例)

    一.SSH回顾 Struts2:核心为过滤器+拦截器.过程:Filter--->FilterDispatcher-->ActionMapper-->ActionProxy--> ...

  3. SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例

    SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例 这是一个简单的SpringBoot整合实例 这里是项目的结构目录 首先是pom.xml ...

  4. Freemarker实例教程

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任.作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/a ...

  5. freemarker实例2

    下面演示一个简单的使用项目过程:1. 使用myeclipse创建一个web项目testFM2. 把下载到的jar包(freemarker-2.3.9.jar)放到/WebRoot/WEB-INF/li ...

  6. struts2 的简单实例应用

    功能:本实例实现的功能是从输入界面输入用户名和密码,若用户名和密码正确转到成功界面,否则转到失败界面. 1)在创建了一个JavaWeb工程后,导入struts2的核心支持包库. 2)web项目右击-M ...

  7. java struts2入门学习实例--使用struts进行验证

    一.为什么要进行验证? 验证几乎是注册登录的必须前提,验证的主要作用有两点: 1.安全性 2.对用户提供差异化服务. 二.如何验证? ActionSupport类中有一个validate()方法,这是 ...

  8. java struts2入门学习实例--用户注册

     一.用户注册示例 register.jsp <%@ page language="java" contentType="text/html; charset=UT ...

  9. java struts2入门学习实例--将客户端IP地址和访问方式输出到浏览器

    实例1:实现客户端IP地址和访问方式输出到浏览器. IpAction.java package com.amos.web.action; import javax.servlet.http.HttpS ...

随机推荐

  1. ControlTemplate,ItemsPanelTemplate,DataTemplate(wpf)

    在WPF中有三大模板ControlTemplate,ItemsPanelTemplate,DataTemplate.其中ControlTemplate和ItemsPanelTemplate是控件模板, ...

  2. python中set类型总结

    set的创建无非有两种方式: 一 直接使用{}创建新的set并初始化 例如: set1 = {1,2,3,"good news",(1,2,3)} #声明的时候可以包含元组,但不能 ...

  3. OSX 10.11 El Caption USB安装盘制作方法

    OSX 10.11 El Caption USB安装盘制作方法 官方在线下载地址:https://developer.apple.com/osx/download/ 1. 用磁盘工具将USB盘抹掉或者 ...

  4. 延时并自动关闭MessageBox

    信息提示框(MessageBox)是微软NET自带的一个用于弹出警告.错误或者讯息一类的“模式”对话框.此类对话框一旦开启,则后台窗体无法再被激活(除非当前的MessageBox被点击或者关闭取消). ...

  5. ASP.net之HttpModel

    HttpModule是向实现类提供模块初始化和处置事件.当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于H ...

  6. LoadRunner几个重要的概念:事务、集合点、思考时间

    在LoadRunner的脚步编写中,有三个重要的概念:事务.集合点.思考时间 事务: 事务又称为Transaction,在LoadRunner中的定义如下:An end-to-end(browser- ...

  7. VC 6.0下载 VC 6.0英文版下载 Visual C++ 6.0 英文企业版 集成SP6完美版(最新更新地址,百度网盘)

    下载地址1:Visual.C++.6.EN 下载地址2:Visual.C++.6.EN 更新下载地址可用(百度网盘)Visual.C++.6.EN 转载请注明出处,有技术问题,欢迎互相交流,或者留言.

  8. gulp之sass 监听文件,自动编译

    gulpfile.js文件如下: var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('default', f ...

  9. Ant能干什么,编译?打包!

    Ant轻便,灵巧,不像Maven一般沉重. 但是,这是我之前的看法.之前一直使用Eclipse自带的编译工具进行编译,然后采用ant进行打包:但是Eclipse编译工具编译之后的jar包参数名称之类的 ...

  10. BZOJ1293:[SCOI2009]生日礼物

    浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...