1.在spring.xml中配置

     <!-- 指定vm模版路径 start  -->
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="resourceLoaderPath" value="/WEB-INF/"/>
<property name="preferFileSystemAccess" value="true"/>
<property name="velocityProperties">
<props>
<prop key="input.encoding">UTF-8</prop>
<prop key="output.encoding">UTF-8</prop>
<prop key="default.contentType">text/html;charset=UTF-8</prop>
</props>
</property>
</bean>
<!-- 指定vm模版路径 end -->

2.java方法


@Autowired
@Qualifier("velocityEngine")
private VelocityEngine velocityEngine;

@RequestMapping(value = "/vm", method = RequestMethod.GET)

     public void createHeader(HttpServletRequest request, HttpServletResponse response, String type) throws Exception {
try {
// 静态页生成路径
String path1 = request.getSession().getServletContext().getRealPath("/") + "index/template/include/";
createPath(path1);
String path = path1+"header.jsp";
// css路径
String csspath = getPath(request);
//velocityEngine.setProperty("resourceLoaderPath", "/WEB-INF/velocity/");
Template tl = velocityEngine.getTemplate("./index.vm", "UTF-8");
VelocityContext vc = new VelocityContext();
//数据封装start
vc.put("csspath", csspath);
vc.put("tag", 12);
vc.put("isnull", "");
vc.put("bool", false);
List l=new ArrayList();
l.add("a");
l.add("b");
l.add("c");
l.add("d");
l.add("e");
vc.put("list", l);
SysNew s = new SysNew();
s.setContents("contents");
s.setEvents("eve");
vc.put("sys", s);
//数据封装end
vc.put("charset","<%@ page language='java' import='java.util.*' pageEncoding='UTF-8'%>");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), "UTF-8"));
tl.merge(vc, bw); //直接生成html代码不生成--发模版邮件使用star
//StringWriter sw = new StringWriter();
//tl.merge(vc, sw);
//response.getWriter().print(sw.toString());
//直接生成html代码不生成--发模版邮件使用end
bw.close(); } catch (Exception e) {
System.out.println(e.getMessage() + "-----------------------");
}
}

3.在WEB-INF下创建模版index.vm,内容如下,我整理了常用的标签在模版中

$charset##去掉这个当前页面中文乱码
.变量的调用,后台存入“csspath”,前台
$csspath</br>${csspath}<br />
.if判断</br>
#if($tag == )
等于1
#else
不等于1
#end
<br/>
.判断是否为空<br/>
#if($isnull)
变量为空
#else
变量不为空
#end
<br/>
.判断true OR false <br/>
#if($bool)
true
#else
false
#end
<br/>
.注释:两个“#”注释单行,“#**#”注释代码块
<br/>
.循环<br/>
#foreach($lis in $list)
$lis -- $velocityCount ##当前循环下标
#end
<br/>
.定义变量
#set ($bianliang="bianliang")
$bianliang
<br/>
.调用对象中的值,和jsp中类似<br>
$sys.events
$sys.Contents
<br/>
.引用模版<br/>
主要用于处理具有相同内容的页面,比如每个网站的顶部或尾部内容。
如:##parse("/blog/top.html")或#include("/blog/top.html")
parse与include的区别在于,若包含的文件中有Velocity脚本标签,将会进一步解析,而include将原样显示。
##inclue("模板文件名")或#parse("模板文件名")
<br/>

4.引用jar

velocity-1.7.jar

静态化-VeloCity的更多相关文章

  1. Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

    模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...

  2. 网页静态化技术--Freemarker入门

    网页静态化技术:为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又 ...

  3. 各种系统性能优化技术,采用vilocity实现商品页面静态化

    1.大型门户网站系统:>10万的访问量   行业网站(当当网,卓越网):20万-30万,一个小时内会跟数据库的交互至少20万-30万,会产生数据库瓶颈,每个数据库都有一个最大连接数(socket ...

  4. Day13_商品详情及静态化

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...

  5. 利用PHP的ob函数实现生成静态化页面

    之前用过一些开源的CMS管理系统,当时就很好奇后台中的生成HTML静态文件是怎么实现的.今天和同事讨论了下,没想到同事之前做过这类的生成静态页面的功能,果断向他请教了下. 经他讲解后,才知道其实生成静 ...

  6. 关于大型网站技术演进的思考(二十一)--网站静态化处理—web前端优化—下【终篇】(13)

    本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部,不过该企业把这个事业部里的人事成本,系统运维成本特别 ...

  7. 关于大型网站技术演进的思考(十九)--网站静态化处理—web前端优化—上(11)

    网站静态化处理这个系列马上就要结束了,今天我要讲讲本系列最后一个重要的主题web前端优化.在开始谈论本主题之前,我想问大家一个问题,网站静态化处理技术到底是应该归属于web服务端的技术范畴还是应该归属 ...

  8. 页面静态化技术Freemarker技术的介绍及使用实例.

    一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...

  9. JSP页面静态化

    Ps:好久没写博客了,不是我太懒,是因为苦逼的我出差去上海了,天天加班 刚回成都.... 今天说说jsp页面静态化,知道静态化的朋友都不陌生,说白了就是访问后缀是html 而不是jsp. 没听说过静态 ...

随机推荐

  1. vue全局设置请求头 (封装axios请求)

    Vue.http.interceptors.push((request, next) => { // 请求发送前的处理逻辑 request.headers.set('Authorization' ...

  2. 文件存储Mongo DB后前端对于文件操作的处理方式

    以下是关于后端对于附件从存储服务器改为存储到Mongo DB后,前端对于一些常见需求处理方式的修改:包括文件上传下载和富文本编辑中的贴图实现. 一.文件上传(记录关于fetch中post请求Conte ...

  3. 微信小程序富文本

    <div class="weui-panel__bd pad-all fs13 " > <rich-text nodes="{{detail.conte ...

  4. java 将一个正整数翻译成人民币大写的读法

    程序如下: import java.lang.StringBuffer; /** 给定一个浮点数,将其装换成人民币大写的读法 88.5:捌十捌元零伍角 */ public class Num2Rmb ...

  5. 第六篇.文件处理之python2和3字符编码的区别

    目录 python2和3字符编码的区别 一.字符编码应用之python python2和3字符编码的区别 一.字符编码应用之python 1执行python的三个阶段 python test.py 执 ...

  6. 网络初级篇之VLAN(原理)

    一.早期网络的问题 1.若某时刻有多个节点同时试图发送数据,极易产生冲突域,这样使得网络传输效率大大降低. 2.从一节点发送的数据都会被送到各个节点,极易形成广播域,这样会使得产生太多的广播流量而耗费 ...

  7. 寒武纪C++日常实习生面经(其他人面试题)

    1.C++继承方式? 答:public,protected,private三种继承方式和虚继承一共四种. 派生类可以继承定义在基类中的成员,但是派生类的成员函数不一定有权访问从基类继承而来的成员. 派 ...

  8. 给移动硬盘装win10,知道这些就足够了

    随着制造工业的不断发展,储存介质逐渐廉价化,以某猫和某狗为代表的电商平台上都能轻松买到大容量的原装移动硬盘.如果工厂的产品还不能满足你的要求,那么DIY是一个不错的选择,可以选择购买移动硬盘盒(2.5 ...

  9. 数据库——Oracle(3)

    1 排序:对查询返回的结果,根据某一个列或者某几个列的列值大小进行升序或者降序排列. 1)根据某一个列的列值大小进行升序或者降序排列 格式: select 列名/* from 表名 order by ...

  10. libusb_bulk_transfer 说明

    libusb_bulk_transfer函数说明   API_EXPORTED int libusb_bulk_transfer(struct libusb_device_handle *dev_ha ...