目录结构
点我下载工程代码

俩实体类不用说了
看CustomerVelocityServlet类

package com.velocity.servlet;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.servlet.VelocityViewServlet;

import com.velocity.bean.Department;
import com.velocity.bean.Employee;

@SuppressWarnings("serial")
public class CustomerVelocityServlet extends VelocityViewServlet{

    
    //设置返回视图为text/html编码为gbk
    @Override
    protected void setContentType(HttpServletRequest request,
            HttpServletResponse response) {
        response.setContentType("text/html;charset=gbk");
    }
    
    //处理请求
    @Override
    protected Template handleRequest(HttpServletRequest request,
            HttpServletResponse response, Context ctx) throws Exception {
        ctx.put("username", "张三");
        ctx.put("password", "123456789");
        ctx.put("age", "20");
        ctx.put("address", "陕西西安"); 
        ctx.put("blog", "http://blogjava.net/sxyx2008");
        
        List<Employee> list=new ArrayList<Employee>();
        list.add(new Employee(1,"张三","陕西西安",18,new Department(1,"软件研发部1")));
        list.add(new Employee(2,"张三","陕西西安",19,new Department(2,"软件研发部2")));
        list.add(new Employee(3,"张三","陕西西安",20,new Department(3,"软件研发部3")));
        list.add(new Employee(4,"张三","陕西西安",21,new Department(4,"软件研发部4")));
        list.add(new Employee(5,"张三","陕西西安",22,new Department(5,"软件研发部5")));
        list.add(new Employee(6,"张三","陕西西安",23,new Department(6,"软件研发部6")));
        list.add(new Employee(7,"张三","陕西西安",24,new Department(7,"软件研发部7")));
        list.add(new Employee(8,"张三","陕西西安",25,new Department(8,"软件研发部8")));
        list.add(new Employee(9,"张三","陕西西安",26,new Department(9,"软件研发部9")));
        list.add(new Employee(10,"张三","陕西西安",27,new Department(10,"软件研发部10")));
        
        ctx.put("list", list);
        //调用父类的方法getTemplate()
        return getTemplate("demo.vm", "gbk");
    }
    
}

继承org.apache.velocity.tools.view.servlet.VelocityViewServlet,覆写setContentType和handleRequest方法,其中setContentType用于设置浏览器的响应,handleRequest处理用户的请求,返回Template,我们调用父类中的getTemplate()方法返回
在WEB-INF目录下创建一vm目录,用于存放模板文件
在WEB-INF目录下创建velocity.properties(名字可以任意取)
内容为

resource.loader = webapp  
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
webapp.resource.loader.path=/WEB-INF/vm/  
input.encoding="gbk"
output.encoding="gbk"

resource.loader = webapp 加载方式为webapp
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader    webapp方式加载处理类
webapp.resource.loader.path=/WEB-INF/vm/   模板文件目录
input.encoding="gbk"  输入字符编码
output.encoding="gbk"  输出字符编码

配置web.xml

<servlet>
        <servlet-name>customerVelocityServlet</servlet-name>
        <servlet-class>com.velocity.servlet.CustomerVelocityServlet</servlet-class>
        <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>customerVelocityServlet</servlet-name>
        <url-pattern>/customerVelocityServlet</url-pattern>
    </servlet-mapping>

<init-param>
   <param-name>org.apache.velocity.properties</param-name>
   <param-value>/WEB-INF/velocity.properties</param-value>
</init-param>
加载自定义的velocity.properties

demo.vm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> velocity </TITLE>
 </HEAD>

##嘿嘿,我是velocity中的注释噢
#*
    嘿嘿,我也是velocity中的注释噢
*#

 <BODY>
    <h1>hehe,这是经过由servlet返回的velocity视图</h1>
    hello ${username},这是你的信息
    <ul>
        <li>用户密码为:${password}</li>
        <li>年龄为:${age}</li>
        <li>出生地址为:${address}</li>
        <li>个人主页为:<a href='${blog}'>${blog}</a></li>
    </ul>
    
    <br/>
    
    #foreach($emp in $!{list})
        $!{velocityCount}&nbsp;&nbsp;&nbsp;&nbsp;
        $!{emp.id} &nbsp;&nbsp;&nbsp;&nbsp;
        $!{emp.ename} &nbsp;&nbsp;&nbsp;&nbsp;
        $!{emp.eaddress} &nbsp;&nbsp;&nbsp;&nbsp;
        $!{emp.age} &nbsp;&nbsp;&nbsp;&nbsp;
        $!{emp.department.id} &nbsp;&nbsp;&nbsp;&nbsp;
        $!{emp.department.deptname} <hr/>
    #end
    
 </BODY>
</HTML>

http://localhost:8080/velocityweb/customerVelocityServlet

效果图

velocity整合servlet的更多相关文章

  1. spring boot整合servlet、filter、Listener等组件方式

    创建一个maven项目,然后此项目继承一个父项目:org.springframework.boot 1.创建一个maven项目: 2.点击next后配置父项目及版本号 3.点击finish后就可查看p ...

  2. SpringBoot整合Servlet的两种方式

    SpringBoot整合Servlet有两种方式: 1.通过注解扫描完成Servlet组件的注册: 2.通过方法完成Servlet组件的注册: 现在简单记录一下两种方式的实现 1.通过注解扫描完成Se ...

  3. SpringBoot(四)-- 整合Servlet、Filter、Listener

    SpringBoot中有两种方式可以添加 Servlet.Filter.Listener. 1.代码注册 通过ServletRegistrationBean. FilterRegistrationBe ...

  4. spring boot 2.x 系列 —— spring boot 整合 servlet 3.0

    文章目录 一.说明 1.1 项目结构说明 1.2 项目依赖 二.采用spring 注册方式整合 servlet 2.1 新建过滤器.监听器和servlet 2.2 注册过滤器.监听器和servlet ...

  5. Spring Boot整合Servlet、Filter、Listener

    整合 Servlet   方式一:   编写 servlet package com.bjsxt.controller; import javax.servlet.ServletException; ...

  6. springboot整合web开发(整合servlet、filter、listener、访问静态、文件上传)

    整合servlet 1.继承HttpServlet 2.添加@WebServlet注解 @WebServlet(name="FirstServlet",urlPatterns=&q ...

  7. 【使用篇二】SpringBoot整合Servlet(1)

    两种方式: 通过注解扫描完成 Servlet组件的注册 通过方法完成 Servlet组件的注册 一.通过注解扫描完成 Servlet 组件的注册 1. 编写Servlet类 /** * SpringB ...

  8. spring 整合 servlet

    目的:记录spring整合 servlet过程demo.(企业实际开发中可能很少用到),融会贯通. 前言:在学习spring 过程(核心 ioc,aop,插一句 学了spring 才对这个有深刻概念, ...

  9. springboot(3):整合Servlet,filter,listener

    1.springboot整合Servlet(2种方式) 添加maven依赖:spring-boot-starter-web 1>通过注解扫描完成Servlet组件的注册(方式1) 步骤:需要3步 ...

随机推荐

  1. Python 9X9乘法口诀表

    #乘法口诀 for i in range(1,10): for j in range(1,i+1): print ( j,'*',i,'=',j*i,'',' ',end='') print(end= ...

  2. 论人品 | | noip1015模拟考

    第一题:火车进站... 由于有了老师给的助攻,第一题的时间为半小时,主要在读题了.... jzoj1146 第二题:car 难在正方形的计算? 第二题时间:1.5hour 第三题:sort排序?

  3. flask-admin章节二:wtforms的使用以及在数据库场景中使用QuerySelectField代替SelectField

    概述 flask admin可以支持自定义视图,对于涉及到比较复杂的视图可以选择继承flask_admin.BaseView来定义自己期待的结构. 自定义的视图的每个函数可以使用flask_admin ...

  4. .NET entityframework for mysql ,datetime字段存储值时有误差

    昨天Tester发现数据有问题,大部分时间“datetime类型”都多了一秒,很少一部分数据的时间能完全对上(年月日时分秒),因为缺少关键日志,就各种排查,最后发现在调用Savechange方法前一刻 ...

  5. CSS里常见的块级元素和行内元素

    根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display属性值为“block”,成为“块级 ...

  6. ios页面弹出方式《笔记》

    1.presentViewController 方式,动画效果是从底部弹出,主要用在除导航类页面的弹出 let anotherVC = UIStoryboard(name: "Main&qu ...

  7. Nodejs在centos下的安装

    新学了nodejs,发现在centos下面安装的时候,与windows有一些不同的地方,以前习惯在安装不上的时候,去百度出来,解决了以后,当时都记住如何解决的了,但是过了一段时间以后,就全都忘记光了, ...

  8. APP审核被拒,原因总结

    今天早上,突然看到上周末提交的APP,审核被拒了.原以为是因为IPV6审核没过,后来查看原因后发现是,app的3张展示图里面,有些内容显示的有:测试XX等字眼.苹果说提交的版本不能是含有 test,t ...

  9. DUT Star Round2

    A.Zeratu的军训游戏 Problems: 开灯问题,问无数次操作之后第n盏灯的状态 Analysis: cj:平方数有奇数个约数 Tags: Implementation B.Zeratud的完 ...

  10. eclipse快速移动项目到另一台机器_步骤

    ​快速移动项目到另一台机器_步骤 1.设置好eclipse的编码,必须对应个人项目文件的编码{ window--preferences--general--workspace-text file en ...