- 浏览: 1333759 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
FreeMarker概述
* FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写
* Template + data model = output
*
*
Hello world
* FreeMarkerTest.java
import java.io.StringWriter;import java.util.HashMap;import java.util.Locale;
import freemarker.template.Configuration;import freemarker.template.Template;
publicclass FreeMarkerTest {
publicstaticvoid main(String[] args){
FreeMarkerTest test = new FreeMarkerTest();
test.sayHello("Hermit");
}
publicvoid sayHello(String name){
Configuration freemarkerCfg = new Configuration();
freemarkerCfg.setClassForTemplateLoading(this.getClass(), "/");
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
Template template;
Locale.setDefault(Locale.ENGLISH);
try{
template = freemarkerCfg.getTemplate("Hello.ftl");
template.setEncoding("UTF-8");
HashMap root = newHashMap();
root.put("user", name);
StringWriter writer = newStringWriter();
template.process(root, writer);
System.out.println(writer.toString());
}catch(Exception e){
e.printStackTrace();
}}
}
* Hello.ftl
Hello ${user}!
* 输出
Hello Hermit!
空值的处理
在我们的程序中难免会碰到值为空的时候,如果用一个空值直接去替换模板中的标记,freemarker会毫不犹豫的抛出异常,并把错误信息直接写到输出结果里。为了对付这种情况我们有两种写法
* 模板
Hello ${user!}!
Hello ${user?if_exists}
Hello ${user!'your name'}!
Hello ${user?default('your name')}
* 程序
test.sayHello(null);
* 输出
Hello !
Hello your name!
Hello
Hello your name
freemarker国际化模板
freemarker支持多语言国际化,只要把模板名称按照java资源文件的写法就可以了,也就是name_语言_国家地区.ftl 如果找不到对应的语言,就会用默认语言的模板。
* 程序
import java.io.StringWriter;import java.util.HashMap;import java.util.Locale;
import freemarker.template.Configuration;import freemarker.template.Template;
publicclass FreeMarkerTest {
publicstaticvoid main(String[] args){
FreeMarkerTest test = new FreeMarkerTest();
test.sayHello("hermit",Locale.CHINA);
test.sayHello("hermit",Locale.ENGLISH);
}
publicvoid sayHello(String name,Locale locale){
Configuration freemarkerCfg = new Configuration();
freemarkerCfg.setClassForTemplateLoading(this.getClass(), "/");
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
Template template;
Locale.setDefault(Locale.ENGLISH);
try{
template = freemarkerCfg.getTemplate("Hello.ftl",locale);
template.setEncoding("UTF-8");
HashMap root = newHashMap();
root.put("user", name);
StringWriter writer = newStringWriter();
template.process(root, writer);
System.out.println(writer.toString());
}catch(Exception e){
e.printStackTrace();
}
}
}
* 默认语言模版:Hello.ftl
Hello ${user!}!
中文模版:Hello_zh_CN.ftl
你好 ${user!}!
输出
你好 hermit!
Hello hermit!
在struts项目中使用freemarker
1、引入freemarker.jar
2、web.xml加入
<!-- FreeMarker view servlet (to replace JSP) -->
<servlet><servlet-name>freemarker</servlet-name><servlet-class>
freemarker.ext.servlet.FreemarkerServlet
</servlet-class>
<!-- FreemarkerServlet settings: -->
<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</param-value>
</init-param>
<!-- FreeMarker settings: --><init-param><param-name>template_update_delay</param-name><param-value>0</param-value>
<!-- 0 is for development only! Use higher value otherwise. -->
</init-param><init-param><param-name>default_encoding</param-name>
<param-value>utf-8</param-value></init-param>
<init-param><param-name>locale</param-name><param-value>en_US</param-value></init-param>
<init-param><param-name>number_format</param-name><param-value>0.##########</param-value></init-param>
<load-on-startup>1</load-on-startup></servlet>
<servlet-mapping><servlet-name>freemarker</servlet-name><url-pattern>*.ftl</url-pattern></servlet-mapping>
3、一个示例页面
<html><head><title>Say Hello</title><METAHTTP-EQUIV="Content-Type"CONTENT="text/html; charset=utf-8"></head><body><h1>Hello ${user}!</h1></body></html>
我们完全可以用freemarker的模板取代JSP页面。用freemarker的模板看起更简洁,可读性更强。比如现在struts2的UI标签就是用freemarker做的。
freemarker用struts标签做国际化
* 示例模板
<#assign html =JspTaglibs["/WEB-INF/struts-html.tld"]><#assign bean =JspTaglibs["/WEB-INF/struts-bean.tld"]><#assign logic =JspTaglibs["/WEB-INF/struts-logic.tld"]><html><head><title> FreeMarker Struts Example </title><metahttp-equiv ="Content-type"content ="text/html; charset=utf-8"></ head ><body><@bean.message key ="hello" arg0 ="hermit"/></body></html>
主要是引入标签的时候要这样写:
<#assign html =JspTaglibs["/WEB-INF/struts-html.tld"]>
freemarker直接使用资源文件进行多语言国际化
* 程序
import java.io.StringWriter;import java.util.HashMap;import java.util.Locale;import java.util.ResourceBundle;
import freemarker.ext.beans.BeansWrapper;import freemarker.ext.beans.ResourceBundleModel;import freemarker.template.Configuration;import freemarker.template.Template;
publicclass FreeMarkerTest {
publicstaticvoid main(String[] args){
FreeMarkerTest test = new FreeMarkerTest();
test.sayHello("hermit",Locale.CHINA);
test.sayHello("hermit",Locale.ENGLISH);
}
publicvoid sayHello(String name,Locale locale){
Configuration freemarkerCfg = new Configuration();
freemarkerCfg.setClassForTemplateLoading(this.getClass(), "/");
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
Template template;
Locale.setDefault(Locale.ENGLISH);
try{
template = freemarkerCfg.getTemplate("Hello.ftl");
template.setEncoding("UTF-8");
HashMap root = newHashMap();
root.put("user", name);
ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("ApplicationResources",locale);
ResourceBundleModel rsbm = new ResourceBundleModel(RESOURCE_BUNDLE,new BeansWrapper());
root.put("bundle", rsbm);
StringWriter writer = newStringWriter();
template.process(root, writer);
System.out.println(writer.toString());
}catch(Exception e){
e.printStackTrace();
}}
}
模板
${bundle("hello","hermit")}
默认语言资源文件
hello=Hello {0}\!
中文资源文件
hello=你好 {0}\!
* 输出
你好 hermit!
Hello hermit!
关键的地方就是用ResourceBundleModel把ResourceBundle转换一下。
常用的2种加载模板的方式
* 普通java类根据当前class上下文环境加载模板
cfg.setClassForTemplateLoading(this.getClass(), "/");
* 在web项目中根据servlet上下文环境加载模板
cfg.setServletContextForTemplateLoading(this.getServlet().getServletContext(), "/");
发表评论
-
Smack 体系结构
2011-09-20 11:17 4014Smack 体系结构 Zhuam (zhuam... ... -
gson
2011-09-06 20:59 1941Gson User Guide Con ... -
缓存总结
2010-10-25 22:56 1122XXXX项目是目前在实际工作中正在做的事情,该项目是一个大 ... -
freemarker 基本指令
2010-10-25 22:47 1411一:if指令: <#if condition>.. ... -
通用大型网站页面静态化解决方案(二)
2010-10-25 22:44 3245在开发大型网站时,避免不了处理大量的页面静态化操作,这样方便加 ... -
通用大型网站页面静态化解决方案(一)
2010-10-25 22:43 35207最近自己做了一个做网络广告的网站叫全方位商机平台的项目,由 ... -
如何在spring框架中解决多数据源的问题
2010-10-24 16:23 1619在我们的项目中遇到这 ... -
NetLog 大规模应用实战:Database-sharding 技术
2010-10-24 15:19 1519一、背景 Netlog是一家社交网站社区,目前拥有大规模的应 ... -
java利用poi读写Excel需要注意的问题
2010-10-20 10:17 5388接到用Java进行数据库与 ... -
FreeMarker demo
2010-08-25 14:53 3920写道 import freemarker.templ ... -
jfreechart demo2
2010-06-29 00:52 3290写道 package com.ijo.demo; impor ... -
jfreechart demo
2010-06-28 22:25 1787写道 package com.ijo.demo; impor ... -
openfire
2010-04-19 18:03 1163openfire http://openfireteam.b ... -
利用 DWR 开发基于 Ajax 的文件上载 portlet
2010-03-30 16:23 1485... -
采用dwr+ajax和struts开发文件上传进度条(转)
2010-01-22 00:16 1799采用dwr+ajax和struts开发文件上传进度条 编 ... -
采用dwr+ajax和struts开发文件上传进度条(转)
2010-01-22 00:11 1553采用dwr+ajax和struts开发文件上传进度条 编 ... -
dwr3 反转ajax例子
2009-12-28 13:23 4398这段时间我主要对jQuery学习和研究,当学习的了Ajax的实 ...
相关推荐
在Spring Boot应用中,FreeMarker与Web层结合,允许开发者用简单的模板语言来定义页面布局,然后在后台填充动态数据,生成最终的网页。 这个小demo展示了如何将这些技术融合在一起,实现一个完整的Web应用流程。...
Freemarker是一种轻量级、基于模板的标记语言,常用于Web应用中的视图层,与Java、Spring等框架结合紧密,能够帮助开发者将静态模板和动态数据分离,提高代码的可维护性和可读性。 这款插件的核心功能包括: 1. **...
### Freemarker与Sitemesh结合的关键知识点 #### 一、简介 - **Freemarker**:作为一...通过上述步骤,可以有效地将Freemarker和Sitemesh结合使用,实现动态内容与静态布局的分离,提高Web应用的开发效率和可维护性。
在IT行业中,`ActiveMQ`和`FreeMarker`是两种非常重要的开源技术,它们...开发者可以通过此项目学习如何在实际项目中使用ActiveMQ进行解耦通信,以及如何用FreeMarker生成动态视图,提升Web应用的灵活性和可扩展性。
7. **监控与维护**:在生产环境中,需要监控静态页面的生成和更新,确保新内容能及时反映到静态页上,同时对可能出现的错误进行及时修复。 在这个过程中,"源码"标签暗示了需要深入理解后端代码和模板引擎的工作...
Freemarker是一款强大的开源模板引擎,常用于Java Web开发中,生成HTML或其他类型的静态页面。它的设计思想是将数据模型和展示逻辑分离,使得开发者可以专注于业务数据的处理,而不用关心页面的具体呈现方式。本资源...
1. **预处理FreeMarker模板**:使用gulp,我们可以设置一个任务来解析所有的FreeMarker模板文件,并将其转换为静态HTML。这一步通常包括读取模板文件、替换占位符并输出结果。 2. **模板编译**:通过安装如`gulp-...
此外,学习者还可以学习如何在Thymeleaf、Freemarker或其他模板引擎中使用这些静态资源,以及如何使用Spring Boot的错误处理机制来自定义错误页面。 在这个教程中,可能涉及的其他知识点可能包括: - Spring Boot的...
- 使用模板引擎:例如FreeMarker、Thymeleaf,将静态资源与后端数据结合生成HTML。 - CDN加速:将静态资源部署到内容分发网络,减少延迟,提高用户体验。 4. **性能优化**: - 压缩:使用Gzip、Brotli等压缩算法...
# freemarker静态资源配置 spring.freemarker.template-loader-path=classpath:/templates # 关闭缓存,及时刷新,上线生产环境需要修改为true spring.freemarker.cache=false spring.freemarker.charset=UTF-8 ...
在Struts2中,Freemarker被用作视图层的模板语言,允许开发者将静态HTML与动态数据结合。Freemarker的语法简洁,支持条件判断、循环、变量引用等功能,使得视图的创建和维护变得简单。 **Log4j** 是Apache的一个...
6. **生成静态页面**: 特别适用于生成静态网站,FMPP可以创建完整的HTML文件结构,包括图片和其他资源。它能根据模板生成整个HTML树,为网站开发提供便利。 ### **使用场景** 1. **网站生成**: FMPP常用于生成...
在Java Web开发中,FreeMarker常用于视图层,与SpringMVC等框架配合,将后端数据渲染成用户可见的页面。 7. **Nginx**: Nginx是一款高性能的HTTP和反向代理服务器,以其高并发处理能力而著名。它可以作为Web服务器...
FreeMarker则是一个强大的、轻量级的模板引擎,用于将动态数据与静态HTML模板结合,生成最终的网页。 在这个项目中,开发者可能旨在演示如何在Spring Boot应用中设置和使用FreeMarker模板来构建MVC(Model-View-...
Thymeleaf在开发环境中提供即时反馈,而在生产环境中可以被静态化以提高性能。在Spring Boot应用中,Thymeleaf是默认的视图模板技术,只需要在`pom.xml`中添加Thymeleaf依赖即可。配置完成后,你可以在控制器中返回...
在本项目中,我们可能使用FreeMarker来渲染静态内容,以增强用户体验。 六、项目结构与配置 JpSpringBoot项目的目录结构遵循SpringBoot的标准,包括src/main/java、src/main/resources等。在resources目录下,...
例如,使用`<link>`标签引入CSS,使用`<script>`标签引入JavaScript,以及使用模板引擎提供的指令来动态生成页面内容。 7. **Spring Boot的MVC架构** - Spring Boot中的MVC架构允许开发者定义控制器来处理HTTP请求...
在本项目中,我们主要探讨的是使用SpringBoot、Mybatis和Freemarker技术栈搭建一个包含博客首页、管理端和小程序功能的Web应用。这个博客系统不仅提供了前端展示页面,还包含了后台管理功能,便于博主进行文章管理和...
此外,它还支持 WebSocket、静态资源处理和错误页面定制等功能。 FreeMarker 是一个流行的模板引擎,用于将动态数据和静态模板结合生成 HTML 或其他类型的文档。在 Spring Boot 中集成 FreeMarker 非常简单,只需要...
2. `src/main/resources`:资源文件目录,如配置文件(application.properties或application.yml)、模板文件(Freemarker模板)、静态资源(CSS、JavaScript、图片等)。 3. `pom.xml`:Maven的项目对象模型文件,...