以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
相关推荐
本教程将介绍如何在Java Web项目中利用FreeMarker进行JSP页面的静态化,适合初学者入门学习。 1. **FreeMarker基本概念** FreeMarker是一个基于模板的语言,它与编程语言不同,不包含任何控制结构或函数调用。它的...
总结来说,这个例子展示了如何结合Struts1.2和Freemarker2.3.8实现登录成功页面的静态化,通过静态化可以提高网站性能,减轻服务器负担,提升用户体验。在实际开发中,开发者可以根据项目需求灵活运用这些技术和策略...
4. **项目结构**:一个典型的Freemarker静态化项目可能包含以下部分: - 模板文件夹(templates):存放Freemarker模板文件,如.ftl。 - Java源代码文件夹(src):包含处理动态数据的Java类,如Controller和Model...
8. **静态页面生成**:整合Struts2和Freemarker的一个常见应用是生成静态页面,提高网站性能。这通常通过在Action中触发静态化逻辑,将Freemarker渲染后的HTML保存到磁盘,然后直接返回这些静态页面。 9. **错误和...
在IT行业中,生成静态页面是一种常见的优化网站性能和提高用户体验的方法。...在这个场景下,我们主要关注的是使用Freemarker作为模板...结合合理的缓存策略和自动化更新机制,可以实现高效、自动化的静态页面生成方案。
通过上述知识点的集成,我们可以创建一个用户友好的Web应用,其中页面布局可以通过可视化工具预览和编辑,而动态数据则由FreeMarker模板和Spring MVC框架提供。这种方式既保证了前端设计的灵活性,又确保了后端数据...
Freemarker是一个强大的模板引擎,常用于Web应用中的视图层,实现动态内容与静态页面的分离。在网站静态化的过程中,Freemarker扮演着关键角色。通过将动态数据注入到预定义的模板中,它能够生成HTML或其他静态格式...
Java页面静态化主要有两种方式:服务器端静态化和客户端静态化。 1. 服务器端静态化: - **预渲染(Prerendering)**:在用户请求之前,系统自动将一些常用或者热点页面生成静态HTML文件,存储在文件系统或CDN上。...
它与Java紧密集成,广泛应用于Web应用的视图层,帮助开发者将数据模型与页面展示分离,提高开发效率和代码可维护性。 在Web开发中,生成HTML静态页面源码是一个常见的需求。静态页面可以提供更快的加载速度和更好的...
通过这个示例项目,你可以学习如何在实际项目中整合Freemarker与Java,理解模板引擎的工作原理,以及如何优雅地分离业务逻辑和视图展示。此外,还可以练习调试和优化Freemarker模板,提高代码可读性和可维护性。如果...
总的来说,动态页面静态化是一个涉及前端、后端以及服务器配置的综合技术。在实际应用中,需要根据网站的具体需求、数据更新频率以及服务器性能来选择合适的方案。通过合理地运用这些技术,可以显著提升网站的性能和...
Freemarker是一个强大的Java模板引擎,常用于Web开发中的视图层渲染,它可以将动态数据与静态HTML模板结合,生成最终的HTML页面。在Web应用中,页面静态化是一种优化技术,可以提高网页的加载速度和搜索引擎友好性。...
页面静态化是Web开发中的一个重要概念,主要目的是提高网站的访问速度和搜索引擎优化(SEO)。在Java Web开发中,页面静态化通常涉及到将动态生成的HTML页面转化为纯HTML文件,以便用户请求时无需通过服务器执行复杂...
本资源包包含了两部分关键资料:开发文档和页面静态化技术手册,旨在帮助开发者深入理解和高效使用Freemarker。 开发文档是学习任何技术的基础,对于Freemarker而言也不例外。这份文档通常会详细阐述Freemarker的...
在本项目"springboot整合freemarker生成静态html的demo.zip"中,我们将探讨如何将SpringBoot框架与FreeMarker模板引擎结合,以实现动态数据驱动的静态HTML页面生成。FreeMarker是一个强大的、开源的模板语言,它允许...
在实际项目中,FreeMarker经常与Spring MVC等框架结合使用,实现更复杂的视图渲染逻辑。 在给定的压缩包文件`freemark`中,可能包含了FreeMarker的相关示例代码、模板文件和其他辅助资源。解压并研究这些文件可以...
这个项目利用了Spring MVC作为控制层框架,MyBatis作为数据访问层框架,以及Freemarker作为视图模板引擎,构建了一个高效且灵活的Web应用。 【Spring MVC】是Spring框架的一部分,主要用于处理Web应用程序的请求-...
总结,网站生成静态页面是一个有效的优化手段,通过选用合适的工具和方法,结合FreeMarker模板引擎,能够实现高效且定制化的静态化过程。无论是个人博客还是大型企业网站,都可以从中受益,提升网站性能,增强用户...
### jsp、freemarker、velocity简介和对比 在Java Web开发领域,模板引擎是连接后端业务逻辑与前端展示层的重要桥梁。本文将重点介绍三种常用的Java Web模板引擎:JSP(Java Server Pages)、Freemarker以及...
为了解决这个问题,他们决定采用FreeMarker进行静态化处理。静态化是指将原本动态生成的页面转化为HTML文件,用户访问时直接读取这些HTML文件,不再需要服务器实时生成,从而提高响应速度。 FreeMarker的工作原理是...