freemarker技術入門例子(結合struts2)

因爲最近項目裏面要求要使用freemarker技術來作展示層,因此在網上搜索了好多資料,基礎知識是看了李剛原來寫的那本《struts2權威指南》。一直想在網上找一個很基礎的例子來入門,可是不知道是個人緣由仍是怎麼的,找到的都不是很理想,並且網上基本上是一篇文章處處貼。因此鬱悶之下,就本身慢慢摸索寫出了一個入門的例子,能夠做爲本身的總結,也可讓更多的初學者快速入門。html

閒話少述,看例子。java

*****例子的整個目錄結構以下圖:web

 

說明:一、struts-tags.tld文件是由struts2的jar中拷貝出來的。apache

         二、工程所有使用utf-8編碼。編程

 

關鍵的幾個文件:app

一、index.ftl:jsp

<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"]/>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>freemarkerDemo</title>
</head>
<body>
<@s.form action="users/users_login.action">
${"用戶名"}:<@s.textfield name="username"/><br/>
${"密碼"}:<@s.password name="password"/><br/>
<@s.submit value="sign on"/>
</@s.form>
</body>
</html>

二、profile.ftl:ide

<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"]/>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>freemarkerDemo</title>
</head>
<body>
姓名:${username}
<br/>
密碼:${password}
<br/>
年齡:${userInfo.age}
<br/>
登陸時間:${userInfo.signinTime?string("yyyy-MM-dd HH:mm:ss")}
<br/>
QQ:${userInfo.qq}
<br/>
地址:${userInfo.addr}
<hr/>
個人書籍:
<#list userInfo.books as book>
${book}&nbsp;
</#list>
</body>
</html>

三、web.xml:ui

<?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"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>JspSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

四、sturts.xml:this

<?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.ui.theme" value="simple" />
<package name="users" extends="struts-default" namespace="/users">
<action name="users_*" class="com.pop.project.myftl.test.action.UserAction" method="{1}">
<result name="index" type="freemarker">/WEB-INF/ftl/index.ftl</result>
<result name="profile" type="freemarker">/WEB-INF/ftl/profile.ftl</result>
</action>
</package>
</struts>

五、UserAction:

package com.pop.project.myftl.test.action;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.pop.project.myftl.test.bean.UserInfo;
public class UserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String username;
private String password;
private UserInfo userInfo;
/**
* 首頁
* @return
*/
public String index() {
return "index";
}
/**
* 登陸
* @return
*/
public String login()
{
userInfo = new UserInfo() ;
userInfo.setAddr("shaanxi baoji") ;
userInfo.setAge(25) ;
userInfo.setSigninTime(new Date()) ;
userInfo.setQq("77276575") ;
List<String> books = new ArrayList<String>() ;
books.add("Thinking in Java") ;
books.add("禪意花園") ;
books.add("敏捷編程") ;
books.add("代碼大全") ;
userInfo.setBooks(books) ;
return "profile" ;
}
// setters and getters
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public UserInfo getUserInfo() {
return userInfo;
}
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
}

 

UserInfo類是一個有幾個屬性的javabean,這裏就不用列了。

本身跑一下例子慢慢來吧。

運行結果:

 

注意:要想在Freemarker中使用Struts2標籤必須配置一個新SERVLET

<servlet>
<servlet-name>JspSupportServlet</servlet-name>
<servlet-class>
org.apache.struts2.views.JspSupportServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

2/ <reslutl>元素的type 屬性必須設置爲freemarker,這是由於Freemarker模板文件必須由Freemarker模板引擎來解析,而Struts2內部實現了 Freemarker模板引擎,但咱們必須聲明返回結果類型爲freemarker才能夠.

注意:
一、Struts2標籤在JSP 頁面中的寫法與在Freemarker模板文件中的寫法不一樣。
Freemarker模板文件是以<@s.tag>開始,以</@s.tag>結束
二、Freemarker模板文件的處理,經過Web容器是沒法直接處理的,所以不要讓用戶直接訪問模板 文件。在開發過程當中,咱們能夠將Freemarker文件直接放到Web工程的 WEB-INF目錄或其子目錄下(用戶沒法訪問WEB-INF目錄下文件),並在相應的struts-*.xml文件中配置type="freemarker" 來輸出模板

 

把result-type的freemarker類型聲明出來並定義成default的。 <result name="index" type="freemarker">這裏的type就能夠省了。
配置freemarker.properties,設置datetime_format=yyyy-MM-dd HH:mm:ss,
這個${userInfo.signinTime?string("yyyy-MM-dd HH:mm:ss")}  
就能夠簡寫爲${userInfo.signinTime?datetime}

相關文章
相關標籤/搜索