【FreeMarker模板引擎】5.freemarker结合Struts2使用

上一篇讲解了Freemarker与Servlet的结合,这里我们讲解一下Freemarker与Struts2的结合。

同样首先创建一个Web Project工程:

将Struts2的相关核心jar包和Freemarker的jar包放置在lib下,并添加至编译环境。然后将struts2的标签说明文件struts-tags.tld(解压struts2-core-X.X.X.jar文件,在META-INF文件夹下)放置在WEB-INF下,让Freemarker也可以使用相关的标签文件,然后在WEB-INF文件夹下创建template文件夹用于放置模板文件:


然后在WEB-INF下创建或编辑web.xml,设置“.flt”的请求路径映射至freemarker的中央处理Servlet:
<?xml version="1.0" encoding="UTF-8"?>  
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  
    <display-name>Struts Blank</display-name>  
  
    <filter>  
        <filter-name>struts2</filter-name>  
        <filter-class>
	    org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
        </filter-class>  
    </filter>  
  
    <filter-mapping>  
        <filter-name>struts2</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
    
    <servlet>
	 <servlet-name>freemarker</servlet-name>
	 <!-- 处理freemarker模板请求的Servlet -->
	 <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
	 <!--下面的配置freemarke的ftl文件的位置-->
	 <init-param>
		<param-name>TemplatePath</param-name>
		<param-value>/template</param-value>
	 </init-param>
	 <!--是否和服务器(tomcat)一起启动。-->
	 <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
	<servlet-name>freemarker</servlet-name>
	<url-pattern>*.ftl</url-pattern>
    </servlet-mapping>

    <servlet>  
        <servlet-name>JspSupportServlet</servlet-name>  
	<servlet-class>  
	    org.apache.struts2.views.JspSupportServlet  
	</servlet-class>  
	<!-- 配置JspSupportServlet自启动   -->
	<load-on-startup>1</load-on-startup>  
    </servlet>
  
    <welcome-file-list>  
        <welcome-file>index.jsp</welcome-file>  
    </welcome-file-list>  
  
</web-app>  
然后在src下创建struts.xml作为struts的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 
	"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.i18n.encoding" value="gbk" />
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
</struts>
里面放置了struts的一些基本参数。由于还没写Action请求响应类,所以下面的action标签暂时为空,后面用来配置Action类的请求和响应信息。

然后创建一个“cn.com.freemarker.action.test”的包,用于放置Action请求处理类。

最后,工程全结构预览:

然后创建测试用的Action请求响应类,放置在“cn.com.freemarker.action.test”包下:

其中编写代码:
package cn.com.freemarker.action.test;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {

	private String SystemName = "东方红管理系统";
	
	@Override
	public String execute() throws Exception {
		System.out.println("HelloWorldAction.execute()");
		return SUCCESS;
	}

	public String getSystemName() {
		return SystemName;
	}

	public void setSystemName(String systemName) {
		SystemName = systemName;
	}
}
然后在struts.xml中配置该Action的请求和响应信息:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 
	"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<constant name="struts.devMode" value="true" />
	<constant name="struts.i18n.encoding" value="gbk" />
	<constant name="struts.enable.DynamicMethodInvocation" value="true" />
	<package name="default" extends="struts-default">
	    <action name="test" class="cn.com.freemarker.action.test.HelloWorldAction">
	        <result name="success" type="freemarker">template/test_success.ftl</result>
	    </action>
	</package>
</struts>

注意,在<action>标签中的type我们填写的是“freemarker”,回顾一下Struts的Resultaction中的type类型,一共有以下几种:
dispatcher(跳转)
redirect(重定向)
chain(转发至其它action)
redirectAction(转发至其它空间下的action)
freemarker(加载freemarker模板视图文件)
httpheader
stream
velocity
xslt
plaintext
tiles

前四种比较常用,而与freemarker结合的时候就需要将type类型指定为“freemarker”,此时struts会将Action中的数据以数据模型的形式绑定在ftl模板页面中。

最后在WEB-INF下的template文件夹下创建“test_success.ftl”文件,内容如下:
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> <#--这一句是为了让Freemarker识别struts2的标签 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>test</title>
  </head>
  <body>
	<h1>${SystemName}</h1>
	<@s.form action="reg" >
		<@s.textfield label="用户名" name="uname"  />
		<@s.submit />
	</@s.form>    
  </body>
</html>
上面先是引入了Struts标签库,然后下面使用表达式获取后台数据模型中的“SystemName”参数内容,然后使用“@s.标签名”来调用Struts的标签库中的标签,这里展示了一个form表单的标签代码。

然后将Web工程放置Tomcat中运行:

在页面中访问“test”请求,可以看到相关的响应信息:

通过浏览器的查看源码功能,看到ftl编译后的html源代码为:
<html>
  <head>
    <title>test</title>
  </head>
  <body>
	<h1>东方红管理系统</h1>
    <form id="reg" name="reg" action="reg" method="post">
        <table class="wwFormTable">
            <tbody>
                <tr>
                    <td class="tdLabel">
                        <label for="reg_uname" class="label">用户名:</label>
                    </td>
                    <td class="tdInput">
                        <input type="text" name="uname" value="" id="reg_uname">
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <div class="formButton">
                            <input type="submit" value="Submit" id="reg_0">
                        </div>
                    </td>
                </tr>
            </tbody>
         </table>
  	</form>
  </body>
</html>
可以看到freemarker不仅将相关的数据模型中的数据解析至页面,还将相关的struts标签解析为html标签。

以上就是Struts结合Freemarker的相关操作。

转载请注明出处:http://blog.csdn.net/acmman/article/details/79248748

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值