Servlet + Freemarker 入门练习

论坛 期权论坛 脚本     
匿名网站用户   2020-12-19 18:41   22   0

建立web项目,拷贝freemarker的jar文件到类路径,其他步骤略。

首先配置web.xml,添加freemarker解析的Servlet配置,内容如下

  <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> 
    <init-param>  
        <param-name>NoCache</param-name>  
        <param-value>true</param-value>  
    </init-param>  
   <init-param>
    <param-name>ContentType</param-name>
    <param-value>text/html;charset=UTF-8</param-value>
   </init-param>
   <init-param>
    <param-name>template_update_delay</param-name>
    <param-value>0</param-value>
   </init-param>
   <init-param>
    <param-name>default_encoding</param-name>
    <param-value>UTF-8</param-value>
   </init-param>
    <init-param>  
        <param-name>number_format</param-name>  
        <param-value>0.##########</param-value>  
    </init-param>  
  </servlet>
  <servlet-mapping>
   <servlet-name>freemarker</servlet-name>
   <url-pattern>*.ftl</url-pattern>
  </servlet-mapping>

添加一个测试用的Servlet,代码如下:

package test.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestFreemarker extends HttpServlet {

 private static final long serialVersionUID = 1L;

 @Override
 protected void service(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  String strValue = "this is String";
  Date myDate  = new Date();
  Object[] objectArray = new Object[]{1,"str",1.2};
  
  Set<Object> setData = new HashSet<Object>();
  setData.add("dataValue1");
  setData.add("dataValue2");
  setData.add("dataValue3");
  
  List<String> strList = new ArrayList<String>();
  strList.add("字符串1");
  strList.add("字符串2");
  strList.add("字符串3");
  
  Map<String,Object> map = new HashMap<String, Object>();
  map.put("key1", "value1");
  map.put("key2", "value2");
  map.put("key3", "value3");
  
  req.setAttribute("strValue", strValue);
  req.setAttribute("objectArray", objectArray);
  req.setAttribute("strList", strList);
  req.setAttribute("map", map);
  req.setAttribute("myDate", myDate);
  req.setAttribute("setData", setData);
  req.getRequestDispatcher("/WEB-INF/view/freemarker/test.ftl").forward(req, resp);
 }
}

配置此Servlet到web.xml中,增加如下内容到web.xml文件中:

  <servlet>
   <servlet-name>test</servlet-name>
   <servlet-class>test.servlet.TestFreemarker</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>test</servlet-name>
   <url-pattern>/test</url-pattern>
  </servlet-mapping>

在/WEB-INF/view/freemarker目录下建立文件test.ftl,内容如下:

<!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" xml:lang="zh-CN" dir="ltr">
<head>
 <title>test!</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
 <div>
  直接显示字符串<br />
  String:${strValue}<br/> 
  <hr/>
 </div>
 
 <div>
 显示日期
 date:${myDate?date}<br/>
 <hr/>
 显示时间
 time:${myDate?time}<br/>
 <hr/>
 显示时间戳
 datetime:${myDate?datetime}<br/>
 <hr/> 
 </div>
 
 <div>
 访问对象数组
 ObjectArray:
 ${objectArray[0]},${objectArray[1]},${objectArray[2]}
 <br />
 <hr/>  
 </div>
 
 <div>
 遍历Set中的元素
 SetData:<br />
 <#list setData as value>
  ${value}
 </#list>
 <hr/> 
 </div>
 
 <div>
 遍历List中的元素
 strList:<br/>
 <#list strList as strValue >
 <#if strValue_index == 0>
  ${strValue} is first element
 <#elseif !strValue_has_next>
  ${strValue} is last element
 <#else>
  ${strValue}
 </#if>
 <br />
 </#list>
 <hr/> 
 </div>
 
 <div>
 获取map中的值
 <br/>
 map:
 key1=${map.key1},key2=${map.key2},key3=${map.key3}
 <hr/>  
 </div>
 
 
 <#include "foot.html">
</body>   
</html>  

模板中包含的foot.html,在和test.ftl相同的目录下,文件内容如下

<div style="margin-top: 50px;text-align: center;font-size: 12px">
<hr />
this is foot
</div>

运行此项目访问/test路径,输出内容如下:

<!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" xml:lang="zh-CN" dir="ltr">
<head>
 <title>test!</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
 <div>
  直接显示字符串<br />
  String:this is String<br/> 
  <hr/>

 </div>
 
 <div>
 显示日期
 date:2011-3-18<br/>
 <hr/>
 显示时间
 time:17:21:44<br/>
 <hr/>
 显示时间戳
 datetime:2011-3-18 17:21:44<br/>

 <hr/> 
 </div>
 
 <div>
 访问对象数组
 ObjectArray:
 1,str,1.2
 <br />
 <hr/>  
 </div>
 
 <div>
 遍历Set中的元素
 SetData:<br />
  dataValue2
  dataValue1
  dataValue3
 <hr/> 
 </div>

 
 <div>
 遍历List中的元素
 strList:<br/>
  字符串1 is first element
 <br />
  字符串2
 <br />
  字符串3 is last element
 <br />
 <hr/> 
 </div>

 
 <div>
 获取map中的值
 <br/>
 map:
 key1=value1,key2=value2,key3=value3
 <hr/>  
 </div>
 
 
<div style="margin-top: 50px;text-align: center;font-size: 12px">
<hr />
this is foot
</div></body>   
</html>        

freemarker的list指令,不能遍历如Object[]类型的对象数组。但可以遍历List和Set

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP