`

采用freemarker静态化页面以及freemarker视图展现简介

 
阅读更多

以freemarker为展现方式或以freemarker ftl模板为框架生成静态化页面:

freemarker库:freemarker-2.3.19.jar

涉及4种应用方式

1,页面静态化之Servlet中使用freemarker
2,页面展现之Struts2结合freemarker使用
3,页面静态化之Struts2结合freemarker使用
4,页面展现之Servlet中使用freemarker(略,改一下输出流即可)

 

一,页面静态化之Servlet中使用freemarker

目标:
以freemarker的ftl模板文件为页面框架,
实现以html静态页面方式展现http servlet请求,html文件不存在时servlet生成html文件并重定向至该html页面,html文件存在时直接重定向至该html页面

1,java web项目文件目录设定
静态页面输出目录:WebRoot/html/
ftl模板目录:WebRoot/templates/

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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 <servlet>
 	<servlet-name>Log4jInit</servlet-name>
 	<servlet-class>com.log4j.Log4jInit</servlet-class>
 	<init-param>
 		<param-name>log4j-init</param-name>
 		<param-value>WEB-INF/classes/log4j.properties</param-value>
 	</init-param>
 	<load-on-startup>1</load-on-startup>
 </servlet>
 
  <servlet>
 	<servlet-name>freemarkertest</servlet-name>
 	<servlet-class>com.servlet.FreemarkerList</servlet-class>
 	<load-on-startup>4</load-on-startup>
 </servlet>
 <servlet-mapping>
 	<servlet-name>freemarkertest</servlet-name>
 	<url-pattern>/testfree</url-pattern> 	
 </servlet-mapping> 
 
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list> 
 <error-page>
  <error-code>500</error-code>
  <location>/jsp/error.jsp</location>
 </error-page> 
  <error-page>  
  <error-code>404</error-code>
  <location>/jsp/error.jsp</location>
 </error-page>
<error-page>
  <error-code>400</error-code>
  <location>/jsp/error.jsp</location>
 </error-page>
</web-app>
<strong><span style="font-size:12px;">
</span></strong>

3,ftl模板文件testfm.ftl ,内容:

<html>  
  <head>  
  	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>freemarker测试</title>  
  </head>  
    <body>  
        <h1>${message},${name}</h1>
        
        
        <ol>
        <#list myList as lst>
        	<li><a href="javascript:void(0)"> ${lst}</a>  </li>
        </#list>
        </ol>
          
    </body>     
</html> 

4,Servlet内容

 

package com.servlet;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

/** * 
 * 页面静态化之Servlet中使用freemarker *
 */
public class FreemarkerList extends HttpServlet {
	
	private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
	
	// 负责管理FreeMarker模板的Configuration实例  
    private Configuration cfg = null;  
	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request,response);
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
		 // 创建一个FreeMarker实例  
        cfg = new Configuration();  
        // 指定FreeMarker模板文件的位置  
        cfg.setServletContextForTemplateLoading(this.getServletContext(),"templates");  
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
        // 建立数据模型  
        Map root = new HashMap();  
        root.put("message", "hello");  
        root.put("name", "java中文");  
        root.put("myList", Arrays.asList(new String[]{"A","B","C","D","E","F","G","H","I","J","K","L","M"}));
        // 获取模板文件  
        Template t = cfg.getTemplate("testfm.ftl","utf-8");     //如果未指定编码,那么展现html时中文是乱码        
        resp.setContentType("text/html;charset=UTF-8"  ); 
        resp.setCharacterEncoding("utf-8");
        
        try {  
        	String contextpath = this.getServletContext().getRealPath("") + "/html/";//绝对路径
        	String fname =  sdf.format(new Date()) + ".html";
            File f = new File(contextpath + fname);//绝对路径
            if(f.exists()){//已存在文件
            	resp.sendRedirect("html/" + fname);//相对项目根目录,重定向
            }else{//还没生成文件时
            	Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f),Charset.forName("utf-8")));            	
                t.process(root, out); // 往模板里写数据  ,   先生成文件
                out.flush();
                out.close();
                resp.sendRedirect("html/"+ fname);//相对项目根目录,重定向,页面静态化
            }                        
            
        } catch (Exception e) {  
            e.printStackTrace();  
        } 
	}
	
}


5,测试

浏览器输入url:http://localhost:8080/prjname/testfree
html/20160419.html文件存在或不存在时,浏览器地址栏都变为:http://localhost:8080/prjname/html/20160419.html,
内容:

hello,java中文
1.A
2. B
3. C
4. D
5. E
6. F
7. G
8. H
9. I
10. J
11. K
12. L
13. M


二,页面静态化之Struts2结合freemarker使用
目标:
以freemarker的ftl模板文件为页面框架,实现以html静态页面方式展现Action请求,html文件不存在时Action生成html文件并重定向至该html页面,html文件存在时直接重定向至该html页面
三,页面展现之Struts2结合freemarker使用
目标:
以freemarker的ftl模板文件为页面框架,freemarker为视图,实现动态显示页面内容

 

--------------------------------------------------------------
1,java web项目文件目录设定

静态页面输出目录:WebRoot/html/
ftl模板目录:WebRoot/templates/
2,web.xml设定

3,struts.xml设定
采用convention注解方式,xml略

4,Action类内容
页面静态化之Struts2结合freemarker使用,Action方法为turndir(),结果类型redirect;
页面展现之Struts2结合freemarker使用,Action方法为resftl(),结果类型freemarker;

 

package com.actions;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;
import freemarker.template.Configuration;
import freemarker.template.Template;

/** * 
 * Struts2结合Struts2结合freemarker使用,页面静态化 以及 以ftl模板为视图展现方式
 *
 */
@Results(value = { 
		@Result(name="ftl",type="freemarker",location="/templates/testfm.ftl"  ) ,//注意拼写
		@Result(name="turndirection",type="redirect",location="${htmlurl}")
		
})
public class FreemarkertestAction extends ActionSupport {
	
	public HttpServletRequest request =  ServletActionContext.getRequest();
	public HttpServletResponse response = ServletActionContext.getResponse();

	/**
	 * 
	 */
	private static final long serialVersionUID = -8894067364939169084L;	
	private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
	public String htmlurl;

	public String getHtmlurl() {
		return htmlurl;
	}

	public void setHtmlurl(String htmlurl) {
		this.htmlurl = htmlurl;
	}
	
	String message;
	String name;
	List myList;
	
	
	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List getMyList() {
		return myList;
	}

	public void setMyList(List myList) {
		this.myList = myList;
	}

	public String resftl(){		


        this.setMessage("hello");
        this.setName("Java 中文 Ftl Action");
        this.setMyList(Arrays.asList(new String[]{"a","b","c","d","e","f","g","h","I","J","K","L","M"}));    

		
		return "ftl";
	}
	
	public String turndir(){
		// 负责管理FreeMarker模板的Configuration实例  
	    Configuration cfg = null;  
	 // 建立数据模型  
        Map root = new HashMap();  
        root.put("message", "hello");  
        root.put("name", "java中文");  
        root.put("myList", Arrays.asList(new String[]{"A","B","C","D","E","F","G","H","I","J","K","L","M"}));
	    
		try {
			cfg = new Configuration();  
			// 指定FreeMarker模板文件的位置  
			
			String contextpath = ServletActionContext.getServletContext().getRealPath("/") + "/html/" ;
        	String fname =  sdf.format(new Date()) + ".html";			
			cfg.setServletContextForTemplateLoading(ServletActionContext.getServletContext(),"templates"); 
			cfg.setEncoding(Locale.getDefault(), "utf-8");
			Template t = cfg.getTemplate("testfm.ftl","utf-8");     //如果未指定编码,那么展现html时中文是乱码		
			
			response.setContentType("text/html;charset=UTF-8"  );
			
			
            File f = new File(contextpath + fname);//绝对路径
            if(f.exists()){//已存在文件
            	this.setHtmlurl("/html/" + fname);
            	return "turndirection";            	
            }else{//还没生成文件时
            	Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f),Charset.forName("utf-8")));            	
                t.process(root, out); // 往模板里写数据       ,   先生成文件
                out.flush();
                out.close();
                this.setHtmlurl("/html/" + fname);
            }
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return "turndirection";
	}
	
}


5,测试

测试静态页面生成展现浏览器输入url:http://localhost:8080/prjname/freemarkertest!turndir.do
正常内容:

hello,java中文
1.A
2. B
3. C
4. D
5. E
6. F
7. G
8. H
9. I
10. J
11. K
12. L
13. M


测试freemarker展现浏览器输入url:http://localhost:8080/prjname/freemarkertest!resftl.do
正常内容:

hello,Java 中文 Ftl Action
1. a
2. b
3. c
4. d
5. e
6. f
7. g
8. h
9. I
10. J
11. K
12. L
13. M



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    freemarker把jsp静态化简单应用

    本教程将介绍如何在Java Web项目中利用FreeMarker进行JSP页面的静态化,适合初学者入门学习。 1. **FreeMarker基本概念** FreeMarker是一个基于模板的语言,它与编程语言不同,不包含任何控制结构或函数调用。它的...

    struts1.2+freemarker实现登录成功页面静态化例子

    总结来说,这个例子展示了如何结合Struts1.2和Freemarker2.3.8实现登录成功页面的静态化,通过静态化可以提高网站性能,减轻服务器负担,提升用户体验。在实际开发中,开发者可以根据项目需求灵活运用这些技术和策略...

    Freemarker网站静态化的实现实例源码(eclipse)

    4. **项目结构**:一个典型的Freemarker静态化项目可能包含以下部分: - 模板文件夹(templates):存放Freemarker模板文件,如.ftl。 - Java源代码文件夹(src):包含处理动态数据的Java类,如Controller和Model...

    Struts2整合Freemarker生成静态页面

    8. **静态页面生成**:整合Struts2和Freemarker的一个常见应用是生成静态页面,提高网站性能。这通常通过在Action中触发静态化逻辑,将Freemarker渲染后的HTML保存到磁盘,然后直接返回这些静态页面。 9. **错误和...

    生成静态页面 freemarker模板

    在IT行业中,生成静态页面是一种常见的优化网站性能和提高用户体验的方法。...在这个场景下,我们主要关注的是使用Freemarker作为模板...结合合理的缓存策略和自动化更新机制,可以实现高效、自动化的静态页面生成方案。

    可视化div布局 生成freemarker模板

    通过上述知识点的集成,我们可以创建一个用户友好的Web应用,其中页面布局可以通过可视化工具预览和编辑,而动态数据则由FreeMarker模板和Spring MVC框架提供。这种方式既保证了前端设计的灵活性,又确保了后端数据...

    freemarker权威版 网站静态化

    Freemarker是一个强大的模板引擎,常用于Web应用中的视图层,实现动态内容与静态页面的分离。在网站静态化的过程中,Freemarker扮演着关键角色。通过将动态数据注入到预定义的模板中,它能够生成HTML或其他静态格式...

    有关Java页面静态化

    Java页面静态化主要有两种方式:服务器端静态化和客户端静态化。 1. 服务器端静态化: - **预渲染(Prerendering)**:在用户请求之前,系统自动将一些常用或者热点页面生成静态HTML文件,存储在文件系统或CDN上。...

    FreeMarker教你如何生成html静态页面源码

    它与Java紧密集成,广泛应用于Web应用的视图层,帮助开发者将数据模型与页面展示分离,提高开发效率和代码可维护性。 在Web开发中,生成HTML静态页面源码是一个常见的需求。静态页面可以提供更快的加载速度和更好的...

    freemarker生成静态html示例

    通过这个示例项目,你可以学习如何在实际项目中整合Freemarker与Java,理解模板引擎的工作原理,以及如何优雅地分离业务逻辑和视图展示。此外,还可以练习调试和优化Freemarker模板,提高代码可读性和可维护性。如果...

    动态页面静态化汇总--页面静态化方案

    总的来说,动态页面静态化是一个涉及前端、后端以及服务器配置的综合技术。在实际应用中,需要根据网站的具体需求、数据更新频率以及服务器性能来选择合适的方案。通过合理地运用这些技术,可以显著提升网站的性能和...

    freemark 页面静态化

    Freemarker是一个强大的Java模板引擎,常用于Web开发中的视图层渲染,它可以将动态数据与静态HTML模板结合,生成最终的HTML页面。在Web应用中,页面静态化是一种优化技术,可以提高网页的加载速度和搜索引擎友好性。...

    页面静态化

    页面静态化是Web开发中的一个重要概念,主要目的是提高网站的访问速度和搜索引擎优化(SEO)。在Java Web开发中,页面静态化通常涉及到将动态生成的HTML页面转化为纯HTML文件,以便用户请求时无需通过服务器执行复杂...

    Freemarker开发文档以及技术手册资源

    本资源包包含了两部分关键资料:开发文档和页面静态化技术手册,旨在帮助开发者深入理解和高效使用Freemarker。 开发文档是学习任何技术的基础,对于Freemarker而言也不例外。这份文档通常会详细阐述Freemarker的...

    springboot整合freemarker生成静态html的demo.zip

    在本项目"springboot整合freemarker生成静态html的demo.zip"中,我们将探讨如何将SpringBoot框架与FreeMarker模板引擎结合,以实现动态数据驱动的静态HTML页面生成。FreeMarker是一个强大的、开源的模板语言,它允许...

    使用FreeMarker生成Html静态文件

    在实际项目中,FreeMarker经常与Spring MVC等框架结合使用,实现更复杂的视图渲染逻辑。 在给定的压缩包文件`freemark`中,可能包含了FreeMarker的相关示例代码、模板文件和其他辅助资源。解压并研究这些文件可以...

    spring mvc mybatis freemarker 开发CMS代码

    这个项目利用了Spring MVC作为控制层框架,MyBatis作为数据访问层框架,以及Freemarker作为视图模板引擎,构建了一个高效且灵活的Web应用。 【Spring MVC】是Spring框架的一部分,主要用于处理Web应用程序的请求-...

    网站生成静态页面的方案和工具

    总结,网站生成静态页面是一个有效的优化手段,通过选用合适的工具和方法,结合FreeMarker模板引擎,能够实现高效且定制化的静态化过程。无论是个人博客还是大型企业网站,都可以从中受益,提升网站性能,增强用户...

    jsp、freemarker、velocity简介和对比

    ### jsp、freemarker、velocity简介和对比 在Java Web开发领域,模板引擎是连接后端业务逻辑与前端展示层的重要桥梁。本文将重点介绍三种常用的Java Web模板引擎:JSP(Java Server Pages)、Freemarker以及...

    freemarker

    为了解决这个问题,他们决定采用FreeMarker进行静态化处理。静态化是指将原本动态生成的页面转化为HTML文件,用户访问时直接读取这些HTML文件,不再需要服务器实时生成,从而提高响应速度。 FreeMarker的工作原理是...

Global site tag (gtag.js) - Google Analytics