zoukankan      html  css  js  c++  java
  • [JavaWeb基础] 020.Velocity 模板引擎简单示例

    1.什么是Velocity

    一种J2EE前端模版技术,和JSP,Freemarker差不多,都是用来展示网页内容的。和JSP不同的是velocity只能显示Action中的数据,不能处理数据。不能写java代码,但是可以使用Velocity标记。也就是说把显示代码后端的JAVA代码分离开来,降低程序的耦合性

    2.需要引入哪些Jar包

    velocity-1.5.jar,velocity-1.6.2.jar,velocity-tools-2.0.jar,velocity-tools-generic-2.0.jar,velocity-tools-view-2.0.jar

    3.编写模板.vm文件

    <html>
    	<head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    	</head>
    	<body>
    		<!-- 页面对变量赋值  -->
    		#set( $current = "Velocity22")
    		<!-- 输出 -->
    		$current is great!  <br/>
    <!-- 输出后台context设置的参数 --> $name <br/> <!--String循环--> #foreach( $elem in $arrList) $elem</br> #end <!--对象循环--> #foreach( $elem in $userList) 名字:$elem.name 性别:$elem.sex 地址:$elem.address</br> #end </body> </html>

     4.编写servelet文件

    package com.babybus.sdteam.servelet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.io.StringWriter;
    import java.util.ArrayList;
    import java.util.Properties;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.velocity.VelocityContext;
    import org.apache.velocity.app.Velocity;
    import org.apache.velocity.app.VelocityEngine;
    import org.apache.velocity.exception.MethodInvocationException;
    import org.apache.velocity.exception.ParseErrorException;
    import org.apache.velocity.exception.ResourceNotFoundException;
    
    import com.babybus.sdteam.vo.User;
    
    public class VelocityTemplateServelt extends HttpServlet {
    
    	private static final long serialVersionUID = 1L;
    
    	@Override
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws IOException, ServletException {
    		
    		// 设置request 和 response 编码,放置乱码
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            
            // 获取页面输出流
            PrintWriter out = response.getWriter(); 
            
            // 创建Properties文件,也可以直接在目录下创建
            Properties properties=new Properties();
            properties.setProperty("resource.loader", "class");
            properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
            properties.setProperty(Velocity.ENCODING_DEFAULT, "UTF-8");
            properties.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
            properties.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8");
            
            // 创建模板引擎
            VelocityEngine velocityEngine = null;
    		try {
    			velocityEngine = new VelocityEngine(properties);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    		// 创建上下文, 用于存放变量
            VelocityContext context=new VelocityContext();
            context.put("name", "test");
            
            // List(String)
            ArrayList<String> arrList = new ArrayList<String>();
            arrList.add("test01");
            arrList.add("test02");
            arrList.add("test03");
            context.put("arrList", arrList);
            
            // UserList(存放对象List)
            ArrayList<User> userList = new ArrayList<User>();
            userList.add(new User("蔡大三", "男", "南安一中五条巷子"));
            userList.add(new User("马大哈", "男", "红灯区"));
            userList.add(new User("林超",  "女", "下三路"));
            context.put("userList", userList);
            
            // 读取模板文件流
            StringWriter sw = new StringWriter();
            try {
    			velocityEngine.mergeTemplate("templates/example.vm", "utf-8", context, sw);
    		} catch (ResourceNotFoundException e) {
    			e.printStackTrace();
    		} catch (ParseErrorException e) {
    			e.printStackTrace();
    		} catch (MethodInvocationException e) {
    			e.printStackTrace();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
            
            // 输出到页面
            out.println(sw.toString());
        }
    }
    

     5.配置web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    	xmlns="http://java.sun.com/xml/ns/javaee" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <display-name></display-name>	
      
      <!--MyVelocity-->
      <servlet>
    	   <servlet-name>ve</servlet-name>
    	   <servlet-class>com.babybus.sdteam.servelet.VelocityTemplateServelt</servlet-class>
      </servlet>
      <servlet-mapping>
    	    <servlet-name>ve</servlet-name>
    	    <url-pattern>/ve</url-pattern>
      </servlet-mapping>
    
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    

     6.输入地址:http://localhost:8080/velocitydemo/ve启动项目

     

    本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 

    转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4827097.html

  • 相关阅读:
    一个字符串(文本)中括号匹配问题
    完整版链表反转,包括链表类的构建
    几种常见的排序方法
    celery开启worker报错django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE o
    ubuntu18.10搜狗输入法的安装
    github学习笔记
    [TYVJ] P1049 最长不下降子序列
    [TYVJ] P1065 津津的储蓄计划
    [TYVJ] P1044 数字三角形
    [TYVJ] P1006 ISBN
  • 原文地址:https://www.cnblogs.com/superdo/p/4827097.html
Copyright © 2011-2022 走看看