美文网首页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

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