首页 > 其他分享 >【FreeMarker模板引擎】5.freemarker结合Struts2使用

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

时间:2023-03-19 11:01:57浏览次数:33  
标签:FreeMarker freemarker 标签 struts struts2 action Struts2 test


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



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


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


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


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



然后在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请求处理类。



最后,工程全结构预览:


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


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


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


其中编写代码:


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中运行:


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


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


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


通过浏览器的查看源码功能,看到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的相关操作。

标签:FreeMarker,freemarker,标签,struts,struts2,action,Struts2,test
From: https://blog.51cto.com/u_16012040/6131014

相关文章