美文网首页java web 学习
Java笔记-SpringMVC中利用Velocity渲染HTM

Java笔记-SpringMVC中利用Velocity渲染HTM

作者: 栾呱呱 | 来源:发表于2017-09-17 20:21 被阅读119次

Velocity:基于Java的模板引擎,可以用Java代码渲染的简单而又强大的模板语言。开发Web时,可以将Web页面和Java代码分离,类似JSP和PHP。详细介绍:参见官网:Apache Velocity Project

本篇文章以发送邮件为例子,介绍一下Velocity简单的实际用法

步骤:pom.xml引入包 => xml文件添加配置 => 配置视图 => Java代码

步骤一:maven添加依赖包

pom.xml文件里引入下面的配置代码

<dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity</artifactId>
  <version>1.7</version>
</dependency>
<dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity-tools</artifactId>
  <version>2.0</version>
</dependency>

步骤二:xml里面添加Velocity配置

在配置文件applicationContext.xml中加入配置,这里可以有两种方式

  • 配置文件方式,即Velocity的属性通过配置文件方式来设置
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
        <property name="resourceLoaderPath" value="/WEB-INF/velocity/"/><!-- 模板存放的路径 -->
        <property name="configLocation" value="classpath:velocity.properties"/><!-- Velocity的配置文件 -->
</bean>

resources下面新建velocity.properties文件

input.encoding=UTF-8  
output.encoding=UTF-8  
contentType=ext/html;charset=UTF-8
directive.foreach.counter.name=loopCounter  
directive.foreach.counter.initial.value=0  
  • 直接设置属性方式,即Velocity的属性通过<prop>标签直接设置,也就是将第一种方式合为一步,省去单独设置配置文件的麻烦
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
        <property name="resourceLoaderPath" value="/WEB-INF/velocity/"/><!-- 模板存放的路径 -->
        <property name="velocityProperties">    
        <props>    
            <prop key="directive.foreach.counter.name">loopCounter</prop>    
            <prop key="directive.foreach.counter.initial.value">0</prop>   
            <prop key="contentType">text/html;charset=UTF-8</prop> 
            <prop key="input.encoding">UTF-8</prop> 
            <prop key="output.encoding">UTF-8</prop>
        </props>    
    </property>  
</bean>

步骤三:配置视图

在WEB-INF路径下新建velocity文件夹,文件夹里新建后缀为vm的模板文件,这里说的文件路径对应步骤二中的模板存放路径

下面是一个简单的邮件模板,模板内容是一个表格,也就是发送一个内容为一个表格的邮件。其中,表格的body是通过二层for循环动态设定的数据,具体的velocity语法,自行百度

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        table {
            border-collapse: collapse;
            width: 100%;
        }

        td {
            padding: 6px 8px;
            text-align: center;
            border: solid #000 1px;
        }

        th {
            padding: 6px 8px;
            background: #e2e2e2;
            border: solid #000 1px;
        }
    </style>
</head>
<body>
<h3>数据日期:${date}</h3>
<table>
    <thead>
    <tr>
        <th>数据A</th>
        <th>数据B</th>
        <th>数据C</th>
        <th>数据D</th>
    </tr>
    </thead>
    <tbody>
        #foreach($rowData in $data)
        <tr>
            #foreach($columnData in $rowData)
                <td>$columnData</td>
            #end
        </tr>
        #end
    </tbody>
</table>
</body>
</html>

步骤四:Java代码初始化数据

这里不介绍具体的发送邮件的Api,类似JavaMail的库网上很多。步骤三中写好了模板文件,现在需要利用Java代码将数据填充到模板文件里面,这里用Map数据结构存放需要渲染的原始数据

private void sendMail() throws JobExecutionException {
        String[] to = { "收件人" };
        String subject = "主题";
        String[] cc = {};
        Map<String, Object> model = new HashMap<>();
        model.put("date", "2017-09-17");
        List row1 = new ArrayList();
        list.add("A data");
        list.add("B data");
        list.add("C data");
        list.add("D data");
        List row2 = new ArrayList();
        list.add("A data");
        list.add("B data");
        list.add("C data");
        list.add("D data");
        model.put("data", row1);
        model.put("data", row2);
        String body = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "DataValidator.vm", "UTF-8", model);
        try {
            EmailUtil.send(to, subject, body, cc);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

相关文章

  • Java笔记-SpringMVC中利用Velocity渲染HTM

    Velocity:基于Java的模板引擎,可以用Java代码渲染的简单而又强大的模板语言。开发Web时,可以将We...

  • [学习]thymeleaf模板渲染引擎

    简介 thymeleaf 是java的模板渲染引擎(类似于freemarker,velocity),优点嘛就是分割...

  • HTTP 406 Not Acceptable

    出现了406错误 错误原因:请求后缀为*.htm 在springmvc中如果请求的后缀是*.html或者*.htm...

  • 模板引擎velocity

    本文基于 Velocity 1.7 版本撰写。 概述 什么是Velocity? Velocity是一个基于java...

  • mark-阿里的系统分层规则

    终端显示层:各端模板渲染并执行显示的层。当前主要是 Velocity 渲染,JS 渲染, JSP 渲染,移动端展示...

  • Velocity教程

    Velocity是一个基于Java的模板引擎,通过特定的语法,Velocity可以获取在java语言中定义的对象,...

  • Spring系列 | 小荷才露尖尖角

    MyBatis学习笔记 MyBatis操练 MyBatis源码 SpringMVC学习笔记 SpringMVC...

  • vm文件,.vm后缀的文件

    *.vm后缀的文件,是velocity的文件。velocity是基于java的一种页面模板引擎,支持#if #el...

  • SpringMVC整合jsp与velocity

    本来的项目是纯SpringMVC的,没办法,只会java。后来觉得是不是可以用其它东西来替换jsp,然后发现vel...

  • 使用velocity

    1.是什么 velocity是一个基于java的模板引擎,提供了一个Context容器,在java代码中我们可以往...

网友评论

    本文标题:Java笔记-SpringMVC中利用Velocity渲染HTM

    本文链接:https://www.haomeiwen.com/subject/urypsxtx.html