您的位置:网站首页 > 源码环境 > 正文

Velocity教程

类别:源码环境 日期:2016-8-23 16:42:24 人气: 来源:

  Velocity是一个基于Java的模板引擎,通过特定的语法,Velocity可以获取在java语言中定义的对象,从而实现界面和java代码的真正分离,这意味着可以使用velocity替代jsp的开发模式了(实际上笔者所在的公司已经这么做了)。这使得前端开发人员可以和Java程序开发人员同步开发一个遵循MVC架构的web站点,在实际应用中,velocity还可以应用于很多其他的场景.

  Velocity是一个基于Java的模板引擎,其提供了一个Context容器,在java代码里面我们可以往容器中存值,然后在vm文件中使用特定的语法获取,这是velocity基本的用法,其与jsp、freemarker并称为三大视图展现技术,相对于jsp而言,velocity对前后端的分离更加彻底:在vm文件中不允许出现java代码,而jsp文件中却可以.

  作为一个模块引擎,除了作为前后端分离的MVC展现层,Velocity还有一些其他用途,比如源代码生成、自动email和转换xml等,具体的用法可以参考这篇文章.

  在这里我们以一个HelloVelocity作为Velocity的入门实例.首先在官网下载velocity的最新发布包,新建普通java项目,引入其中的velocity-1.7.jar和lib文件夹下的所有jar包即可.然后分为如下两步:

  首先,我们在代码中初始化了VelocityEngine这个模板引擎,对其设置参数进行初始化,指定使用ClasspathResourceLoader来加载vm文件。然后我们就可以往VelocityContext这个Velocity容器中存放对象了,在vm文件中我们可以取出这些变量,从而进行模板输出.

  其中,vm文件放在classpath目录下即可,类加载器会进行加载

  hellovelocity.vm文件如下:

  #set($greet=hello)$greet$name#foreach($iin$list)$i#end

  在Velocity中也有变量的概念,使用\$符声明变量,可以声明变量也可以对变量进行赋值(变量是弱类型的)。另外还可以使用\$取出在VelocityContext容器中存放的值

  #set(${!name}=velocity)#set(${!foo}=$bar)#set($foo=“hello”=$bar.name)#set($foo.name=$bar.getName($arg))#set($foo=123)#set($foo=[“foo”,$bar])

  在Velocity中可以使用条件语法对流程进行控制

  #if(condition)...dosonmething...#elseif(condition)...dosomething...#else...dosomething...#end

  在Velocity中也有宏的概念,可以将其作为函数来理解,使用#macro声明宏

  ##声明宏#macro(sayHello$name)hello$name#end##使用宏#sayHello(NICK)

  在Velocity中可以通过parse或者include指令引入外部vm文件,但是二者存在区别:include指令会将外部文件原样输出,而parse指令会先对其进行解析再输出(即对外部文件中的vm语法解析)

  #parse(header.vm)#include(footer.vm)

  velocity只是一个模板引擎,在web项目中使用Velocity还得添加一个HTTP框架来处理请求和转发,apache提供了velocity-tools,其提供了VelocityViewServlet,也可继承VelocityViewServlet,从而实现自己的HTTP框架

  一般都是继承VelocityViewServlet,重写handleRequest方法,在其中存入公共的参数.

  通过继承或直接使用VelocityViewServlet,可以在管理的vm文件中获得request、session与application对象,也可以直接获取在这几个域对象中保存的值,获取的顺序与EL表达式获取的顺序类似:

  ${request}--${session}--${application}

  比如${testArr},获取testArr属性,velocity会在velocity的context中寻找。没找到在request域中找,没找到在session中找.

  下面将通过实例的方式讲解如何在web项目中使用Velocity

  首先引入velocity-tools及其依赖的相关jar包,然后分为如下4步:

  通过继承VelocityViewServlet重写handleRequest方法,可以自定义转发规则

  publicclassMyVelocityViewServletextendsVelocityViewServlet{@OverrideprotectedTemplatehandleRequest(HttpServletRequestrequest,HttpServletResponseresponse,Contextctx){//往Context容器存放变量ctx.put(fullName,lixiaolin);//也可以往request域中存值request.setAttribute(anotherName,xlli);//forward到指定模板returngetTemplate(test.vm);}}

  对自定义的VelocityViewServlet配置就像配置普通的Servlet一样,如下:

  servletservlet-nameMyVelocityServlet/servlet-nameservlet-classcom.lxl.velocity.MyVelocityViewServlet/servlet-class/servletservlet-mappingservlet-nameMyVelocityServlet/servlet-nameurl-pattern/servlet/myVelocityServlet/url-pattern/servlet-mapping

  vm文件是作为jsp的替代来展示给用户,在vm文件中可以获得在Context域或request等域中存放的值。默认情况下,会在资源根路径下搜索vm文件,所以直接将vm放在根路径下即可(也可以通过配置velocity.properties指定加载路径)

  如下:

  #set($greet=hello)!doctypehtmlhtmllang=enheadmetacharset=UTF-8titleDocument/title/headbodyp$!{greet}$!{fullName}/ppmyanothernameis$!{anotherName}/p/body/html

  通过配置velocity.properties文件,可以自定义vm文件加载方式,指定编码等。当然,也可以不配置velocity.properties,使用缺省的值即可.

  ##设置模板文件加载器,webapp从应用根目录加载resource.loader=webappwebapp.resource.loader.class=org.apache.velocity.tools.view.WebappResourceLoader##模板路径,根目录下的vm文件夹webapp.resource.loader.path=/vm##设置编码input.encoding=UTF-8output.encoding=UTF-8

  在web站点开发的过程中,经常会碰到几个页面的布局大致相同,比如引用相同的头部和尾部、左侧边栏相同等,在使用jsp开发时我们可以将头部等公共文件抽离出来,然后在实际页面中引入。Velocity也提供了类似的功能,并且该功能更加强大.

  apache提供了VelocityLayoutServlet来实现页面布局,它是VelocityViewServlet的子类,通过使用VelocityLayoutServlet可以简化velocity下页面布局开发,可以使当forward到一个vm页面时,把该页面作为一个已有页面布局的一部分整体显示出来,比如访问资料页面,能够自动把头、尾部显示出来

  velocity-tools包中已经包含了这个类,其使用分为如下几步:

  在/WEB-INF/路径下配置velocity.properties文件,指定模板布局文件的位置

  input.encoding=UTF-8output.encoding=UTF-8##定义加载器resource.loader=webappwebapp.resource.loader.cache=false##布局文件夹位置yout.directory=/templates/layout##定义默认布局文件tools.view.servlet.layout.default.template=layout.vm##错误模板文件tools.view.servlet.error.template=err.vm

  本文中的完整代码可在github上下载.

  你可以通过联系我.

  欢迎在github或者知乎上关注我^_^.

  也可以访问个人网站

推荐:

关键词:jsp项目源码
0
0
0
0
0
0
0
0
下一篇:没有资料

相关阅读

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

CopyRight 2002-2012 技术支持 源码吧 FXT All Rights Reserved

赞助合作: