• Velocity 的工作原理


    原文出处:http://www.blogjava.net/jackybu/articles/8803.html

    这个程序很简单,但是它能让你清楚的了解Velocity的基本工作原理。程序中其他部分基本上很固定,最主要的部分在以下代码

      这里Velocity获取模板文件,得到模板引用

    /* next, get the Template */ 
    Template t = ve.getTemplate( "hellosite.vm" ); 

      这里,初始化环境,并将数据放入环境

    /* create a context and add data */ 

    VelocityContext context = new VelocityContext(); 

    context.put("name", "Eiffel Qiu"); 

    context.put("site", " http://www.eiffelqiu.com"); 

      其他代码比较固定,但是也非常重要,但是对于每个应用来说写法都很相同:
    这是初始化Velocity模板引擎

    /* first, get and initialize an engine * / 

    VelocityEngine ve = new VelocityEngine(); 
    ve.init(); 

      这是用来将环境变量和输出部分结合。

    StringWriter writer = new StringWriter(); 
    t.merge( context, writer ); 
    /* show the World */ 
    System.out.println( writer.toString() ); 

      记住,这在将来的servlet应用中会有所区别,因为网页输出并不和命令行输出相同,如果用于网页输出,将并不通过System.out输出。这会在以后的教程中给大家解释的。

    那让我来总结一下Velocity真正的工作原理:
      Velocity解决了如何在Servlet和网页之间传递数据的问题,当然这种传输数据的机制是在MVC模式上进行的,也就是View和Modle , Controller之间相互独立工作,一方的修改不影响其他方变动,他们之间是通过环境变量(Context)来实现的,当然双方网页制作一方和后台程序一方要相互约定好对所传递变量的命名约定,比如上个程序例子中的site, name变量,它们在网页上就是$name ,$site 。这样只要双方约定好了变量名字,那么双方就可以独立工作了。无论页面如何变化,只要变量名不变,那么后台程序就无需改动,前台网页也可以任意由网页制作人员修改。这就是Velocity的工作原理。

      你会发现简单变量名通常无法满足网页制作显示数据的需要,比如我们经常会循环显示一些数据集,或者是根据一些数据的值来决定如何显示下一步的数据, Velocity同样提供了循环,判断的简单语法以满足网页制作的需要。Velocity提供了一个简单的模板语言以供前端网页制作人员使用,这个模板语言足够简单(大部分懂得javascript的人就可以很快掌握,其实它比javascript要简单的多),当然这种简单是刻意的,因为它不需要它什么都能做, View层其实不应该包含更多的逻辑,Velocity的简单模板语法可以满足你所有对页面显示逻辑的需要,这通常已经足够了,这里不会发生象jsp那样因为一个无限循环语句而毁掉系统的情况,jsp能做很多事情,Sun在制定Jsp 1.0标准的时候,没有及时的限定程序员在jsp插入代码逻辑,使得早期的jsp代码更象是php代码,它虽然强大,但是对显示层逻辑来说,并不必要,而且会使MVC三层的逻辑结构发生混淆。

    我的网站: http://www.eiffelqiu.com 
    Email: eiffelqiu@163.com 
    希望和大家交流
  • 相关阅读:
    多线程之同步代码块与同步函数
    图片上传客户端与服务端
    tcp上传学习二--文本文件上传
    javaScript编写9*9口诀
    tcp聊天
    udp聊天室--简易
    往sencha.cmd中恢复设计项时,不论是系统的还是应用的,恢复进去之后都应该一键发布到前端
    一个设计项上的按钮调另一个设计项的列表界面,同时加筛选条件
    点击【****】设计项上的某个按钮,直接调出另一个设计项的【编辑界面】
    前端向后端发送请求,后端返回的一个值的请求的ajax.get();方法
  • 原文地址:https://www.cnblogs.com/zkycode/p/6265061.html
Copyright © 2020-2023  润新知