日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Velocity的layout功能

發布時間:2025/6/17 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Velocity的layout功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、從VelocityViewServlet到VelocityLayoutServlet?

使用Velocity開發web應用時,需要在web.xml中配置一個Velocity提供的VelocityViewServlet接受處理對velocity模板(即vm文件)的forward訪問。VelocityViewServlet負責將設置在request中的attribute“讀出”和模板文件進行merge形成最終的頁面,向response輸出顯示在用戶電腦上。?

VelocityViewServlet是一個簡單的易使用的。但是只要把web.xml中VelocityViewServlet換成VelocityLayoutServlet,并配置上2,3句話,將具有頁面簡單Layout的功能。而這個功能其實非常強大。?

二、VelocityLayoutServlet可以。。。?

VelocityLayoutServlet可以用來簡化velocity下的頁面布局開發。?
使用VelocityLayoutServlet,可以使當forward到一個頁面時,能把自動把該頁面作為一個頁面布局的一部分整體顯示出來。比如訪問用戶資料頁面,能夠自動把網站的頭,尾等自動也輸出顯示處理。?

三、VelocityLayoutServlet使用按步就班?

系統中有若干頁面布局是這樣設定的:頭部(header),左側菜單區域(sub),中右側頁面內容部(main),底部(footer)。?

1、?

創建文件[webapp home]/vm/layout/layout.vm如下:?


Java代碼??
  • ???
  • <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">??
  • <html?xmlns="http://www.w3.org/1999/xhtml"?xml:lang="en">??
  • ????<head>??
  • ????...省略...??
  • ????</head>??
  • ????<body>??
  • ????????<div?id="header>#parse('vm/layout/header.vm')</div>??
  • ????????<div?id="content">??
  • ????????????<div?id="sub">#parse($sub)</div>??
  • ????????????<div?id="main">$screen_content</div>??
  • ????????</div>??
  • ????????<div?id="footer">#parse('vm/layout/footer.vm')</div>??
  • ????</body>??
  • </html>??

  • $screen_content相當于一個占位符,被forward的目標頁面內容將替代該處內容。?
    #parse($sub):表示sub位置是可以動態通過$sub變量設置的。?

    同時也創建'vm/layout/footer.vm''vm/layout/header.vm'這兩個文件。?



    2、?
    創建WEB-INF/vm/user/profile.vm如下:(假設該頁面用于顯示用戶的資料信息)?

    Java代碼??
  • ???
  • #set($layout?=?"layout.vm")??
  • #set($sub=?"vm/user/sub.vm"?)??
  • A:?What's?your?name?<br>??
  • B:?My?name?is?$user.loginName!??


  • 注意,這個文件和普通我vm不一樣的地方在于前兩句話。?
    第一句話設置這個頁面使用哪個布局器。?
    第二句話設置sub的值,用于布局把vm/user/sub.vm文件包含進來。?


    同時也創建"vm/user/sub.vm"文件?

    3、配置velocity.properites文件?

    使用velocity一般都是需要配置velocity.properites的,至少應該設置input.encoding和output.encoding等。在這個文件中增加設置如下代碼:?

    Java代碼??
  • #?Directory?for?layout?templates,??
  • #??relative?to?web?application?root?directory??
  • tools.view.servlet.layout.directory?=?vm/layout/??
  • ??
  • #?Filepath?of?the?default?layout?template??
  • #??relative?to?the?layout?directory??
  • #??!!!!!哥們要注意這行提示:NOT?relative?to?the?root?directory?of?the?webapp!!!!??
  • tools.view.servlet.layout.default.template?=??layout.vm??


  • 4、確定web.xml配置和下面的差不多如下(主要是配置VelocityLayoutServlet,而非VelocityViewServlet):?

    Java代碼??
  • <servlet>??
  • ????<servlet-name>velocity</servlet-name>??
  • ????<servlet-class>??
  • ????????org.apache.velocity.tools.view.servlet.VelocityLayoutServlet??
  • ????</servlet-class>??
  • ??
  • ????<init-param>??
  • ????????<param-name>org.apache.velocity.toolbox</param-name>??
  • ????????<param-value>/WEB-INF/toolbox.xml</param-value>??
  • ????</init-param>??
  • ????<init-param>??
  • ????????<param-name>org.apache.velocity.properties</param-name>??
  • ????????<param-value>/WEB-INF/velocity.properties</param-value>??
  • ????</init-param>??
  • </servlet>??
  • <servlet-mapping>??
  • ????<servlet-name>velocity</servlet-name>??
  • ????<url-pattern>*.vm</url-pattern>??
  • </servlet-mapping>??


  • 5、運行服務器吧,?
    a) 訪問http://www.xxx.com/vm/user/profile.vm 看看效果。?

    b) 回到vm/user/profile.vm文件,把#set($layout = "layout.vm")去掉 看看效果。?

    效果比較:?
    加上$layout設置的profile.vm文件,瀏覽該頁面時,將自動把該頁面變成布局的一部分,把header.vm,sub.vm,footer.vm也輸出出來;去掉$layout設置后瀏覽時,只是輸出該頁面,不會將header.vm,sub.vm,footer.vm輸出出來。?

    這種功能在調試和編寫時非常方便。?



    以后每增加一個新的頁面時,只要在第一行設置了$layout指向一個布局模板便可(注意布局模板的路徑,第3步已經做了提示),便可以輕松具有簡單的布局功能了?



    6、后語:?

    一直想著自己實現一個類似的功能,最后再仔細看看Velocity官方網站時才發現velocity已經有了。我覺得挺好的,很符合我的需求。?

    所以,如果你使用或即將使用Velocity開發系統,強烈推薦使用layout功能。?

    總結

    以上是生活随笔為你收集整理的Velocity的layout功能的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。