Struts2 结合 Freemarker 实例
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 实例的更多相关文章
- Struts2漏洞利用实例
Struts2漏洞利用实例 如果存在struts2漏洞的站,administrator权限,但是无法加管理组,内网,shell访问500. 1.struts2 漏洞原理:struts2是一个框架,他在 ...
- SSH---整合Struts2&Spring&Hibernate(实例)
一.SSH回顾 Struts2:核心为过滤器+拦截器.过程:Filter--->FilterDispatcher-->ActionMapper-->ActionProxy--> ...
- SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例
SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例 这是一个简单的SpringBoot整合实例 这里是项目的结构目录 首先是pom.xml ...
- Freemarker实例教程
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任.作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/a ...
- freemarker实例2
下面演示一个简单的使用项目过程:1. 使用myeclipse创建一个web项目testFM2. 把下载到的jar包(freemarker-2.3.9.jar)放到/WebRoot/WEB-INF/li ...
- struts2 的简单实例应用
功能:本实例实现的功能是从输入界面输入用户名和密码,若用户名和密码正确转到成功界面,否则转到失败界面. 1)在创建了一个JavaWeb工程后,导入struts2的核心支持包库. 2)web项目右击-M ...
- java struts2入门学习实例--使用struts进行验证
一.为什么要进行验证? 验证几乎是注册登录的必须前提,验证的主要作用有两点: 1.安全性 2.对用户提供差异化服务. 二.如何验证? ActionSupport类中有一个validate()方法,这是 ...
- java struts2入门学习实例--用户注册
一.用户注册示例 register.jsp <%@ page language="java" contentType="text/html; charset=UT ...
- java struts2入门学习实例--将客户端IP地址和访问方式输出到浏览器
实例1:实现客户端IP地址和访问方式输出到浏览器. IpAction.java package com.amos.web.action; import javax.servlet.http.HttpS ...
随机推荐
- ural 2023 Donald is a postman(水)
2023. Donald is a postman Time limit: 1.0 secondMemory limit: 64 MB Donald Duck works as a postman f ...
- 在struts2.5版本中使用DMI遇到问题
struts2.5 为了提升安全性,添加了 allomethod 这么个玩意. 解决方法是在配置文件中添加: <package name="exam" extends=&qu ...
- SSM整合(spring、springMVC、mybatis)
需要用的包: 包括:spring的包.springMVC的包.mybatis的包.数据库驱动包.json相关的包 配置如下,首先是mybatis的配置 <?xml version="1 ...
- 数据库Dao类BaseDao(增删改)
package com.changim.patient.app.db; import android.content.ContentValues; import android.content.Con ...
- New Concept English three (53)
30w/m 56errors The Scandinavian countries are much admired all over the world for their enlightened ...
- mysql分表和分区实际应用简介
一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘 ...
- Eclipse中Maven配置操作
1.修改为自己的maven路径 2.对应的自己的仓库设置
- 使用Nginx配置资源虚拟路径
不实用Nginx的时候我们会使用虚拟路径来配置: 在tomcat下的conf/server.xml中增加一个代码 在<Host></Host>中间 如下: <!--增加的 ...
- es5中foreach的用法
HTML代码: <p id="result"></p> JS代码: var eleResult = document.getElementById(&quo ...
- SPI编程1:用户空间的读写操作
spi_device 虽然用户空间不需要直接用到spi_device结构体,但是这个结构体和用户空间的程序有密切的关系,理解它的成员有助于理解SPI设备节点的IOCTL命令,所以首先来介绍它.在内核中 ...