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

俩实体类不用说了
看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. [z]Java代理(jdk静态代理、动态代理和cglib动态代理)

    一.代理是Java常用的设计模式,代理类通过调用被代理类的相关方法,并对相关方法进行增强.加入一些非业务性代码,比如事务.日志.报警发邮件等操作. 二.jdk静态代理 1.业务接口 1 2 3 4 5 ...

  2. MAVEN解决Cannot change version of project facet Dynamic web module to 2.5

    我们用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp,由于这个catalog比较老,用的servlet还是2.3的,而一 ...

  3. 集合类List,set,Map 的遍历方法,用法和区别

    遍历list: 方法一: for(String s:lists){ System.out.println(s); } 方法二: System.out.println("list with i ...

  4. [转]Centos7下caffe的安装

    Centos7下caffe的安装 原文地址:http://blog.csdn.net/s2392735818/article/details/49796017   版权声明:本文为博主原创文章,未经博 ...

  5. Linux 配置nginx

    1.首先安装依赖包: # yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre ...

  6. Cassandra-几个基本测试常识

    一 使用ycsb进行装载,每次装载都不会删除以前装载过的. 因此如果想在空数据库中装载,需要先情况数据表. drop命令删除整个表,因此需要重建标头. truncate命令删除表的所有行,只留下表头, ...

  7. cassandra安装

    从官网下载下来的包解压后有100多M,里面包含了已经编译好的全部程序. 按照方法,进入目录后运行 bin/cassandra -f 运行不成功. 然后根据"https://wiki.apac ...

  8. 如何在fedora下安装fcitx和搜狗拼音

    过程参考了: http://blog.csdn.net/yang1982_0907/article/details/17100409 下载搜狗deb包:http://packages.linuxdee ...

  9. spring+struts2的jar

  10. 解决chrome和IE样式兼容问题

    在页面title中加入: <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"> ...