Spring渲染Velocity模版執行個體

來源:互聯網
上載者:User

這篇文章適合的人:

  • 已經瞭解Spring MVC request 處理流程(參見 《Spring MVC請求處理流程》,該篇待續)
  • 用maven開發
在Controller返回ModelAndView對象後,我希望view層用velociyt模版展示,需要配置特殊的ViewResolver。以請求http://localhost/vmview.htm為例,分以下幾塊說明:
  1. maven配置
  2. request定位到Contoller
  3. controller如何處理
  4. 模版選擇,渲染輸出
1. maven 的dependency
 <properties><org.springframework.version>2.5.6</org.springframework.version></properties><dependencies><!-- servlet api --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><!-- Spring Framework --><dependency><groupId>org.springframework</groupId><artifactId>spring</artifactId><version>${org.springframework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${org.springframework.version}</version></dependency><dependency><groupId>velocity</groupId><artifactId>velocity</artifactId><version>1.5</version></dependency>       <dependencies>
2. 讓request定位到具體的Controllerweb.xml配置:
<!-- 配置上下文載入器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置DispatcherServlet --><servlet><servlet-name>demo</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><servlet-mapping><servlet-name>demo</servlet-name><url-pattern>*.htm</url-pattern></servlet-mapping>
ContextLoaderListner預設載入設定檔appName(項目名)-servlet.xml。appName-servlet.xml配置:
        <bean name="/vmview.htm" class="com.tiemei.spring.demo.controller.VelocityController" /><!-- for velocity view --><bean id="velocityConfig"class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"><property name="resourceLoaderPath" value="/WEB-INF/templates/" /></bean><bean id="vmViewResolver"class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"><property name="cache" value="true" /><property name="prefix" value="" /><property name="suffix" value=".vm" /><property name="order" value="1" /> <!-- 多ViewResovler配置 --></bean>

預設BeanNameUrlHandlerMapping,/vmview.htm路徑的請求被分發到VelocityController。

3. VelocityController
public class VelocityController extends AbstractController {@Overrideprotected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception {System.out.println("------------ enter VelocityController");List<String> list = new ArrayList<String>();list.add("one");list.add("two");list.add("three");return new ModelAndView("vmview", "list", list);}}

 最後new MovdelAndView傳入的第一個參數vmview在後續ViewSovler尋找對應view時用到。

4. 定位模版,渲染輸出第2步中的appName-servlet.xml定義了尋找模版的規則。會去/WEB-INF/templates/目錄下尋找vmview.vm模版(模版名由第3步確定)。vmview.vm內容:
<ul>#foreach( $entry in $list )    <li>$entry</li>#end</ul>

$list對應第三步中傳入的變數名。

最終瀏覽器中輸出:
  • one
  • two
  • three

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.