在公司做项目时看到上个版本使用的后台页面使用的是velocity魔板,很好奇这是什么技术,于是就找了点资料,在maven项目中使用spingMVC配置velocity模板。现在还是让我们初识一下这个技术吧。

 

Velocity初识:

Velocity是一种Java模版引擎技术其实说白了Velocity也就是MVC架构的一种实现,但它更多的是关注在Model和 View之间,作为它们的桥梁。实际上就是一个前台界面与后台业务交互的部分,可以使用jsp替代(或者说两者都可以实现前台展示功能)。使用velocity就要配置velocity解析器,和springmvc中视图解析器方法大致相同,只是使用技术不同而已。

初接触这个东西,首先吸引我的是这个“模板”这个名称,以前学过c#技术,做网站时感觉使用模板确实不错。当做一个系统的网站时,基本上要求总体风格一致,那么可能好多网页的头部和网页的最下面都是相同的。如果不使用模板,会重复很多代码(当然你也可以使用jsp中page指令)。所以第一感觉应该觉得很好使用。接下来就查了一些资料。看来这个技术确实不错。在我看来,它有以下几个优点:

(1)简单易学,只要有html和css等的基础就可以。比较容易入手。

(2)能够实现真正地把java代码从html页面上分割开来

(3)与后台数据进行交互时,用法简单简洁(相比jstl标签而言,不用使用import引入页面所需要的库,而且没有像jstl每次使用都要使用一个前缀,使用复杂。而且两者功能大致相同)

还有,性能优化之类的,这些没有多大体会,大家可以查查资料

那么我们就试试velocity怎么融合在springMVC项目中的吧:

如果大家配置过springMVC的话,那么就特别简单了。只是查些资料,把InternalResourceViewResolver这个视图解析器进行改变即可。当然还需要导入相对应的包和配置文件:velocity-tools.xmlvelocity.properties

如果没有配置过springmvc那么做好学一下,接下来可以参考一下这几个网址资料:

http://blog.csdn.net/javaloverkehui/article/details/38494609

http://www.blogjava.net/liuxiaosan/archive/2011/11/24/364737.html

配置好后配置controller使其页面正常显示。

接下来就是学习velocity的语法了。

可以参考一下文章:

http://www.open-open.com/doc/view/aa893717a65647f6a020c5e05b07e748

http://blog.csdn.net/initphp/article/details/8513326

特别要注意的是怎么使用模板:下面举一个小例子:

    Default.vm

     

    #* @vtlvariable name="screen_content" type="java.lang.String" *#

    <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"> 

    <html xmlns="http://www.w3.org/1999/xhtml">

     <body>

    $screen_content   ##一定要注意$screen_content,它表示需要填充的内容 </body>

    </html> 

 

    接下来看怎么使用这个模板:

    在另外一个页面中直接这样使用,就可以使用这个模板。模板中也可以有一部分的设计,但是一定在需要填充内容的部分使用$screen_content标记出来。

    #set($layout="layout/default.vm")

    <div class="blue">

        <div class="x">

            <div class="z logo"></div>

            <div class="z d_h"></div>

            <div class="z d_v"></div>

        </div>

    </div>

接下里看怎么进行数据交互的。使用velocity获取controller的数据(用法与jstl有点相似)

    booklist.vm

    #set($layout="layout/default.vm")

    <center>

    <table>

    #foreach($t in ${books})

    <tr>

    <td>${t.bookName}</td>

    <td>${t.studentId}</td>

    </tr>

    #end

    </table>

    </center>

     

    对应的controller:

    @RequestMapping("/getBookList.html")

    public String   getBookInfo(HttpServletRequest request, HttpServletResponse response) {     

        

    List<Book> books=new ArrayList<Book>();

    books=bookService.findBooksByStudent((long) 1);

    request.setAttribute("books", books);

    return "book/booklist";

    }

 

只要把数据使用request.setAttribute("books", books)进行键值对存储,就可以在请求的页面上直接使用el语言进行获取,使用#foreach($t in ${books})直接获取到了这个数组,并进行数据解析。

其他使用还请参考具体语法进行学习。