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 的整合了,使用起来还是挺容易的,适合模块化开发,只要前台人员将页面组织好,后台人员只需要将数据塞到指定的页面中的位置就行了。

时间: 2024-10-20 06:11:32

Struts2 结合 Freemarker 实例的相关文章

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

SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例 这是一个简单的SpringBoot整合实例 这里是项目的结构目录 首先是pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="h

Freemarker实例教程

一.Freemarker的介绍    Freemarker 是一款模板引擎,是一种基于模版生成静态文件的通用 工具,它是为java程序员提供的一个开发包,或者说是一个类库,它不是面向最终用户的,而是为程序员提供了一款可以嵌入他们开发产品的应用程序. Freemarker 是使用纯java编写的,为了提高页面的访问速度,需要把页面静态化, 那么Freemarker就是被用来生成html页面. 到目前为止,Freemarker使用越来越广泛,不光光只是它强大的生成技术,而且它能够与spring进行很

struts2 的简单实例应用

功能:本实例实现的功能是从输入界面输入用户名和密码,若用户名和密码正确转到成功界面,否则转到失败界面. 1)在创建了一个JavaWeb工程后,导入struts2的核心支持包库. 2)web项目右击-MyEclipse-add Stru-选择2.1版本-选择/*-src中多了一个struts.xml(配置所有的工作流). 3)src-右击新建包:com.sxl.actions-新建class:LoginAction-继承一个超类Supperclass-Browser...-输入actionsu,出

FreeMarker实例讲解

如下为个人写的FreeMarker的Excel导出模板实例,用于导出数据到Excel文件中,文件以.flt为扩张名 <?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-

基于注解SpringMVC+freemarker实例

基于注解的SpringMVC+freemarker demo实例 web项目图 web.xml文件 Xml代码   <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http:

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

实例1:实现客户端IP地址和访问方式输出到浏览器. IpAction.java package com.amos.web.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSup

第3章 Struts2框架--2、完整的Struts2框架应用实例

1.建立一个Dynamic Web project,项目名:UserManager,把Struts2所必需的JAR复制到项目WEB-INF/lib目录下 2.修改web.xml文件,在web.xml文件中添加Struts的过滤器 3.建立UserAction类,父类为com.opensymphony.xwork2.ActionSupport:添加2个成员变量,修改execute方法 4.建立前台JSP页面login.jsp,再添加一个登陆成功跳转页面loginSuccess.jsp 5.在src

struts2 简单登录实例流程

struts2 登录程序 1.在jre1.5以上[含] 2.创建 web project3.将struts2 依赖包考到web-info lib下 commons-logging-1.0.4.JAR freemarker-2.3.15.JAR ognl-2.7.3.JAR struts2-core-2.1.8.1.JAR xwork-core-2.1.6.JAR commons-fileupload-1.2.1.JAR 4.在web.xml 中配置 StrutsPrepareAndExecute

hibernate4+spring3+struts2搭建框架实例

1.所需要的JAR包 2.web.xml配置文件,这个和平时的配置是一样的 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"