Velocity+Spring+Ibatis框架搭建说明文档
- 格式:docx
- 大小:94.03 KB
- 文档页数:28
各种系统架构图及其简介1.Spring 架构图Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。
框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE 应用程序开发提供集成的框架。
Spring 框架的功能可以用在任何J2EE 服务器中,大多数功能也适用于不受管理的环境。
Spring 的核心要点是:支持不绑定到特定J2EE 服务的可重用业务和数据访问对象。
这样的对象可以在不同J2EE 环境(Web 或EJB )、独立应用程序、测试环境之间重用。
组成Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。
每个模块的功能如下:∙核心容器:核心容器提供Spring 框架的基本功能。
核心容器的主要组件是BeanFactory ,它是工厂模式的实现。
BeanFactory 使用控制反转(IOC )模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
∙Spring 上下文:Spring 上下文是一个配置文件,向Spring 框架提供上下文信息。
Spring 上下文包括企业服务,例如JNDI 、EJB 、电子邮件、国际化、校验和调度功能。
∙Spring AOP :通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了Spring 框架中。
所以,可以很容易地使Spring 框架管理的任何对象支持AOP 。
Spring AOP 模块为基于Spring 的应用程序中的对象提供了事务管理服务。
通过使用Spring AOP ,不用依赖EJB 组件,就可以将声明性事务管理集成到应用程序中。
∙Spring DAO :JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。
异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。
Spring DAO 的面向JDBC 的异常遵从通用的DAO 异常层次结构。
velocity模板引擎Velocity模板引擎是一种用于动态生成文本输出的模板引擎,它广泛应用于各种Java Web开发框架中,如Struts、Spring MVC等。
Velocity模板引擎的主要作用是将模板文件中的静态文本与动态数据进行结合,生成最终的文本输出。
在本文档中,我们将详细介绍Velocity模板引擎的基本用法、语法特点以及在实际项目中的应用。
一、基本用法。
1. 引入Velocity模板引擎库。
在使用Velocity模板引擎之前,首先需要在项目中引入相应的Velocity库文件。
通常情况下,我们可以通过Maven或手动下载jar包的方式将Velocity库文件引入到项目中。
2. 创建Velocity模板。
接下来,我们需要创建Velocity模板文件,通常以.vm为后缀。
在模板文件中,我们可以使用Velocity提供的语法来插入动态数据、控制流程、定义变量等。
3. 准备数据模型。
在生成输出之前,我们需要准备好动态数据模型。
这些数据通常以Java对象的形式存在,可以是POJO、Map、List等类型的数据。
4. 合并模板与数据模型。
最后一步是将准备好的数据模型与Velocity模板进行合并,生成最终的文本输出。
Velocity模板引擎会根据模板文件中的语法和动态数据模型生成最终的文本输出结果。
二、语法特点。
1. 变量插值。
在Velocity模板中,我们可以使用$符号来引用变量,例如$foo。
当模板引擎解析模板时,会将$foo替换为实际的变量值。
2. 控制指令。
Velocity模板引擎提供了丰富的控制指令,如if-else、foreach等,可以用于控制模板中的流程和逻辑。
3. 宏定义。
通过宏定义,我们可以在模板中定义和复用一些常用的模板片段,提高模板的复用性和可维护性。
4. 工具类。
Velocity模板引擎还提供了一些内置的工具类和方法,用于处理字符串、日期、数学运算等常见的操作。
三、实际应用。
1.Spring 架构图Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。
框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE 应用程序开发提供集成的框架。
Spring 框架的功能可以用在任何J2EE 服务器中,大多数功能也适用于不受管理的环境。
Spring 的核心要点是:支持不绑定到特定J2EE 服务的可重用业务和数据访问对象。
这样的对象可以在不同J2EE 环境(Web或EJB )、独立应用程序、测试环境之间重用。
组成Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。
每个模块的功能如下:∙核心容器:核心容器提供Spring 框架的基本功能。
核心容器的主要组件是BeanFactory ,它是工厂模式的实现。
BeanFactory 使用控制反转(IOC )模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
∙Spring 上下文:Spring 上下文是一个配置文件,向Spring 框架提供上下文信息。
Spring 上下文包括企业服务,例如JNDI 、EJB 、电子邮件、国际化、校验和调度功能。
∙Spring AOP :通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了Spring 框架中。
所以,可以很容易地使Spring 框架管理的任何对象支持AOP 。
Spring AOP 模块为基于Spring 的应用程序中的对象提供了事务管理服务。
通过使用Spring AOP ,不用依赖EJB 组件,就可以将声明性事务管理集成到应用程序中。
∙Spring DAO :JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。
异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。
Spring DAO 的面向JDBC 的异常遵从通用的DAO 异常层次结构。
velocity模板Velocity模板。
Velocity是一种用于生成文本输出的模板语言,它可以用于生成HTML、XML、JSON等各种文档格式。
Velocity模板可以帮助开发人员将数据和模板进行分离,提高了代码的可维护性和可读性。
本文将介绍Velocity模板的基本语法和常见用法,希望能够帮助大家更好地理解和使用Velocity模板。
1. 变量定义和输出。
在Velocity模板中,可以使用$符号来引用变量,变量的定义和赋值使用#set指令。
例如:```。
#set($name = "Velocity")。
Welcome to $name!```。
上面的例子中,我们定义了一个名为name的变量,并将其赋值为"Velocity",然后通过$name来引用这个变量。
在模板输出中,$name会被替换为实际的数值,输出结果为:```。
Welcome to Velocity!```。
2. 条件判断。
Velocity模板中的条件判断使用#if指令。
例如:```。
#set($score = 85)。
#if($score >= 60)。
You have passed the exam.#else。
You have failed the exam.#end。
```。
在上面的例子中,我们定义了一个名为score的变量,并根据其数值进行条件判断。
如果score大于等于60,则输出"You have passed the exam.",否则输出"You have failed the exam."。
3. 循环。
Velocity模板中的循环使用#foreach指令。
例如:```。
#set($list = ["apple", "banana", "orange"])。
#foreach($item in $list)。
架构设计文档为方便以后快速开发,我们来做一套通用的JA V AEE架构。
我们将沿用大家熟知的Spring+ibatis开源框架。
数据库方面,希望能够做到通用,无论是Oracle、mysql还是sqlserver,这一点可能有些难度。
对于前台我们会用到Jquery,因为它强大易用。
对于一个系统,用户体验尤为重要,为此我们需要设计出更加人性化、美观的界面。
我们会做出一套模板,例如列表页面,查看详情页面,这样以后方便套使用。
整个架构,希望做到安全、利于维护、方便扩展、开发迅速和用户体验良好。
开发及运行环境:系统:WindowXP/Win7/Linux 工具:MyEclipse/PLSql/PS/Axure环境:JDK1.6/Oracle11g Web应用服务器:Tomcat 版本控制:svn以下我将介绍框架搭建的具体步骤一、新建web工程、填写工程名选择对应java版本,点finish二、工程目录Pro-src-com.lld.pro.entitycom.lld.pro.daocom.lld.pro.dao.implcom.lld.pro.sqlMapcom.lld.pro.servicecom.lld.pro.service.implcom.lld.pro.webcom.lld.pro.web.controllercom.lld.pro.logcom.lld.pro.filtercom.lld.pro.utiltest-com.lld.pro.daoCom.lld.pro.servicesqlwebRoot-static-cssjsimagesincludedecoratorsWEB-INF-libviews三、导入Spring/ibatis/数据库对应包,新建数据库pro四、数据库中新建一张Test表。
用代码生成工具生成对应的类,做一个新增操作来测试框架是否稳定。
---------------------------------------------------------------------------------------------------------------------- 我们会开发一些通用的功能,比如登录和权限,在大多数系统中都会有需求。
SpringBoot官⽅⽂档中⽂版-3.构建你的代码前⾔这是 SpringBoot 官⽅⽂档中⽂翻译版系列的第三篇⽂章:前两篇⽂章如下:Spring Boot 不需要任何特定的代码布局来⼯作。
然⽽,有⼀些最佳实践是有帮助的。
1.避免使⽤“默认”包当⼀个类不包含包声明时,它被认为是在“默认包”中。
通常不⿎励使⽤“默认包”,应该避免使⽤。
对于使⽤ @ComponentScan、@ConfigurationPropertiesScan、@EntityScan或@SpringBootApplication 注释的 SpringBoot 应⽤程序来说,它可能会导致特定的问题,因为每个 jar 中的每个类都被读取。
我们建议您遵循 Java 推荐的包命名约定并使⽤反向的域名(例如,com.example.project)。
2. 主应⽤程序类的位置我们通常建议您将主应⽤程序类放在其他类之上的根包中。
@SpringBootApplication 注释通常放在主类上,它隐式地为某些项定义了⼀个基本的“搜索包”。
例如,如果您正在编写⼀个 JPA 应⽤程序,则使⽤ @SpringBootApplication 注释类的包来搜索@Entity 项。
使⽤根包还允许只在项⽬上应⽤组件扫描。
如果你不想使⽤ @SpringBootApplication,它导⼊的 @EnableAutoConfiguration 和 @ComponentScan 注释定义了该⾏为,所以你也可以使⽤它们。
下⾯的清单显⽰了⼀个典型的布局:com+- example+- myapplication+- MyApplication.java|+- customer| +- Customer.java| +- CustomerController.java| +- CustomerService.java| +- CustomerRepository.java|+- order+- Order.java+- OrderController.java+- OrderService.java+- OrderRepository.javaMyApplication.java ⽂件将声明 mian ⽅法,以及基本的 @SpringBootApplication,如下所⽰:import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}}每天学习⼀点点,每天进步⼀点点。
SpringMVC目录结构配置SpringMVC是一种常见的Java Web框架,它遵循MVC(Model-View-Controller)设计模式,用于构建灵活可扩展的Web应用程序。
SpringMVC的目录结构对于项目的开发和维护非常重要,下面会详细介绍SpringMVC的标准目录结构以及配置方式。
1.标准目录结构1.1 src/main/java:主要用于存放Java源代码。
1.2 src/main/resources:主要用于存放配置文件和资源文件。
1.3 src/main/webapp:主要用于存放Web应用的静态资源。
1.4 src/test/java:主要用于存放测试用例的Java源代码。
1.5 src/test/resources:主要用于存放测试用例的配置文件和资源文件。
2.详细解析2.1 src/main/java目录src/main/java目录是存放Java源代码的默认目录,它包括以下几个子目录:- config:用于存放Spring配置类,如配置数据库连接、配置事务管理等。
- interceptor:用于存放SpringMVC的拦截器。
- model:用于存放数据模型相关的实体类。
- util:用于存放工具类。
- web:用于存放SpringMVC的控制器。
2.2 src/main/resources目录src/main/resources目录是存放配置文件和资源文件的默认目录,它包括以下几个子目录:- static:用于存放静态资源文件,如CSS、JavaScript、图片等。
- templates:用于存放模板文件,如HTML、Thymeleaf模板等。
- application.properties:存放项目的配置信息,如数据库配置、端口配置等。
- logback.xml:存放日志配置,如日志级别、输出路径等。
- mapper:存放MyBatis的Mapper.xml文件。
SSI框架搭建SpringMVC3.1.2+Spring3.1.2+Mybatis3.2.6编号:SSI-SMVC3-S3-I3版本:V1.0级别:公开编写时间:2016-02-17目录1 导言 (1)1.1 目的 (1)1.2 范围 (1)1.3 说明 (1)2 搭建SpringMVC (2)2.1 搭建所需jar包 (2)2.2 其他依赖包 (3)2.3 搭建步骤 (4)2.3.1 创建项目 (4)2.3.2 导入jar包 (6)2.3.3 配置web.xml (7)2.3.4 配置spring-servlet.xml (9)2.3.5 配置applicationContext.xml (10)2.3.6 配置log4j.properties (10)3 整合mybatis (11)3.1 整合所需jar包 (11)3.2 其他依赖包 (11)3.3 整合步骤 (11)3.3.1 导入jar包 (11)3.3.2 配置config.properties (12)3.3.3 配置spring-dataSource.xml (12)3.3.4 配置applicationContext.xml (15)3.3.5 配置mybatis-config.xml (16)3.3.6 创建实体model (17)3.3.7 创建实例化dao (19)3.3.8 创建业务服务service (21)3.3.9 创建控制层controller (23)3.3.10 页面代码 (28)3.3.11 启动项目 (37)1导言1.1 目的本文档是根据个人的工作经验搭建的轻量级SSI框架,也是实际应用中比较全面的基础框架,用于指导SSI框架初学者学习搭建SSI框架,希望能给各位使用者提供帮助,同时也希望朋友们尽量去帮助其他人。
1.2 范围本次框架搭建的版本是SpringMVC3.1.2+Spring3.1.2+Mybatis3.2.6,数据库采用的是mysql,在eclipse开发工具下搭建直接搭建的web项目,页面采用的是h5,ajax实现数据访问,如果页面为jsp等,则修改controller的返回类型即可。
springboot目录结构和配置文件详解Spring Boot是一个用于创建独立的、基于生产级别的Spring应用程序的框架。
它具备了自动配置、内嵌服务器和依赖管理等特性,使得开发人员可以更加便捷地创建和部署Spring应用程序。
在使用Spring Boot开发应用程序时,了解其目录结构和配置文件是非常重要的。
本文将详细介绍Spring Boot的目录结构和配置文件。
一、目录结构Spring Boot的项目目录结构与传统的Java Web项目有些不同,主要包括以下几个目录:1. src/main/java:该目录用于存放项目的源代码文件。
2. src/main/resources:该目录用于存放项目的资源文件,如配置文件、静态资源文件等。
3. src/test/java:该目录用于存放项目的测试用例代码文件。
4. src/test/resources:该目录用于存放项目的测试用例的资源文件。
除了以上几个目录外,还有一些重要的文件如下:1. pom.xml:该文件是项目的依赖管理文件,用于配置项目所需的依赖库。
2. application.properties/application.yml:这是Spring Boot 的配置文件,用于配置应用程序的参数。
二、配置文件在Spring Boot中,配置文件主要包括两种形式:properties和yml。
1. application.properties:application.properties是以key=value的形式配置的文本文件。
其中,key为配置项的名称,value为配置项的值。
以下是一个示例的application.properties文件:```#数据库连接配置#服务器端口配置server.port=8080#日志级别配置.springframework=INFO```在上述示例中,配置了数据库连接URL、用户名和密码,服务器端口和日志级别等配置项。
一、什么是Java模板引擎Velocity?Java模板引擎Velocity是一种用于动态生成文本的工具,它能够通过预定义的模板和数据生成所需的文本。
它是Apache软件基金会的一个开源项目,因其灵活性和高效性而得到了广泛的应用。
二、Velocity的基本用法1. 引入Velocity库要使用Velocity,首先需要在项目中引入Velocity库。
可以通过Maven或手动下载并导入jar包的方式将Velocity集成到项目中。
2. 创建模板文件在使用Velocity时,需要预先创建模板文件,模板文件中可以包含一些占位符和逻辑控制代码,用来指示Velocity填充内容或执行相应的逻辑。
3. 创建模板上下文在Java代码中,需要创建一个模板上下文对象,该对象用于存储模板中需要填充的数据。
4. 渲染模板通过Velocity引擎的渲染方法,将模板文件和模板上下文传入,即可生成最终的文本内容。
五、Velocity的高级用法1. 模板继承Velocity支持模板继承的功能,可以在模板中定义块,然后在子模板中重写这些块的内容。
2. 自定义指令Velocity允许用户自定义指令,以满足特定的需求。
通过编写自定义指令的代码,可以扩展Velocity的功能。
3. 工具类集成Velocity本身并不包含太多实用的工具类,但它可以和一些常用的工具类集成,比如Apache Commons和Guava等,以提高模板中逻辑控制的灵活性和便利性。
六、Velocity的优缺点1. 优点(1)简单易学:Velocity的语法简单易懂,很容易上手。
(2)高效灵活:Velocity能够高效地生成文本,并且支持高度的灵活定制。
(3)可扩展性强:Velocity支持自定义指令,可以满足各种复杂的需求。
2. 缺点(1)性能一般:相比一些新的模板引擎,Velocity的性能并不算太突出。
(2)社区活跃度不高:作为一个老牌的模板引擎,Velocity的社区活跃度已经不如以前,新功能和bug修复相对较慢。
各种系统架构图及其简介1.Spring架构图Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。
框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。
Spring框架的功能可以用在任何J2EE 服务器中,大多数功能也适用于不受管理的环境。
Spring的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据访问对象。
这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。
组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。
每个模块的功能如下:核心容器:核心容器提供Spring框架的基本功能。
核心容器的主要组件是BeanFactory,它是工厂模式的实现。
BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息。
Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP模块直接将面向方面的编程功能集成到了Spring框架中。
所以,可以很容易地使Spring框架管理的任何对象支持AOP。
Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。
通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO:JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。
异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。
Spring DAO的面向JDBC的异常遵从通用的DAO异常层次结构。
Spring ORM:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。
各种系统架构图及其简介I.Spring 架构图Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的框架的主要优势之一就是其分层架构, 分层架构允许您选择使用哪一个组件, 同 时为J2EE 应用程序开发提供集成的框架。
Spring 框架的功能可以用在任何J2EE 服务器中,大多数功能也适用于不受 管理的环境。
Spring 的核心要点是:支持 不绑定到特定J2EE 服务的可重用业务和数据访问对象。
这样的对象可以在不同 J2EE 环境(Web 或EJB )、独立应用程序、测试环境之间重用组成Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个 或多个模块联合实现。
每个模块的功能如下:核心容器:核心容器提供 Spring 框架的基本功能。
核心容器的主要组件是 BeanFactory ,它是工厂模式的实现。
BeanFactory 使用控制反转 (IOC ) 模式 将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring 上下文:Spring 上下文是一个配置文件,向Spring 框架提供上下文信息。
Spring 上下文包括企业服务,例如JNDI 、EJB 电子邮件、国际化、校验和调度 功能。
Spring AOP :通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能 集成到了 Spring 框架中。
所以,可以很容易地使Spring 框架管理的任何对象支 持AOP Spring AOP 模块为基于Spring 的应用程序中的对象提供了事务管理服 务。
通过使用Spring AOP ,不用依赖EJB 组件,就可以将声明性事务管理集成 到应用程序中。
Spring AOP SouiGedevel rrwladiitii AQP in rra^imctureSpring ORMHi bematri y-i. ppxt i Bats suppovl j DO supponSpring WebplicafanrrCartait 帖ell 闻 rt rostHvor VtH) ulltbesspring DAOTrjnsacti<w*i inFra&tiucturB 」OBC B up pari 0A0 auppQrtSpring Coniext AppMcailcri contextUl auppert 如li 肃伽」NDL EJB ^uppcn fmdremodelinghlAllWebMVCWfcb MVC FrarneusrkVVci) VnwajSP/VeitwirvPDF/ExpMlSpring DAO: JDBC DAOS象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。
springboot项目层次结构_SpringBoot项目目录结构(工程结构)Spring Boot是一个用于构建Java应用程序的开源框架,它提供了一个快速、便捷的开发方式,同时也给开发者提供了一套默认的目录结构。
Spring Boot的项目目录结构分为主目录和子目录两部分。
主目录包含了项目的配置文件、启动类和一些特定的文件,而子目录则用于放置不同的应用模块。
下面是Spring Boot项目的主目录结构:1. src/main/java:这是Java源码文件的存放目录,所有的Java类和包都应该放在这个目录中。
在这个目录中,通常会包含一个主启动类,以及其他的服务类、控制器类、实体类等。
2. src/main/resources:在这个目录中,通常会包含一些资源文件,如配置文件、静态资源、模板文件等。
Spring Boot会自动将这些资源添加到项目的类路径下,方便在程序中进行读取和使用。
3. src/test/java:这是测试代码的存放目录。
在这个目录中,通常会包含一些测试类,用于对程序进行单元测试和集成测试。
4. src/test/resources:这是测试资源文件的存放目录,与src/main/resources类似。
在这个目录中,可以放置一些用于测试的配置文件、静态资源等。
5. pom.xml:这是项目的Maven配置文件,用于配置项目的依赖和构建方式。
通过配置pom.xml文件,可以方便地管理项目的依赖关系,以及构建和打包项目。
6. application.properties/application.yml:这是项目的配置文件,用于配置应用程序的行为和属性。
通过配置这些文件,可以灵活地调整应用程序的行为,如数据库连接、日志等。
7. .gitignore:这是用于配置Git版本控制的忽略文件,可以指定不希望被Git跟踪和管理的文件和目录。
除了主目录外,Spring Boot的项目还可以包含一些特定的子目录,以组织不同的应用模块。
velocity模板 for语法Velocity模板语言是一种用于动态生成文本的模板语言,它广泛用于Java应用程序中。
Velocity模板语法包含了一些基本的元素和语法结构,下面我将从不同的角度来介绍Velocity模板语言的for语法。
1. 基本语法结构:Velocity模板中的for语法结构类似于Java中的for循环,用于迭代集合中的元素。
其基本语法结构如下:#foreach( $item in $list )。
...循环体...#end.其中,$item是迭代时的临时变量,$list是要迭代的集合。
2. 遍历集合:使用for语法可以方便地遍历集合中的元素,例如:#set( $list = [1, 2, 3, 4] )。
#foreach( $item in $list )。
$item.#end.上述代码将会输出集合中的每一个元素。
3. 获取索引值:有时候我们需要在循环过程中获取元素的索引值,Velocity也提供了相应的语法结构:#foreach( $item in $list )。
$velocityCount. $item.#end.其中$velocityCount是内置的变量,表示当前迭代的次数,从1开始。
4. 嵌套循环:在Velocity模板中,我们也可以使用嵌套的for循环来处理嵌套的集合结构,例如:#foreach( $outer in $outerList )。
#foreach( $inner in $outer.innerList )。
$outer $inner.#end.#end.上述代码展示了如何遍历嵌套的集合。
5. 控制流:在for循环中,我们还可以使用break和continue来控制循环的执行流程,类似于Java中的用法。
总的来说,Velocity模板语言中的for语法提供了丰富的功能和灵活的应用方式,能够满足我们在模板中处理循环逻辑的需求。
希望以上介绍能够帮助你更好地理解和应用Velocity模板语言中的for语法。
velocity用法数据结构(最新版)目录1.Velocity 简介2.Velocity 的基本用法3.Velocity 中的数据结构4.总结正文【1.Velocity 简介】Velocity 是一个基于 Java 的模板引擎,用于生成基于文本的输出,例如:HTML、XML、RTF、TXT 等。
它允许用户通过简单的模板语法定义输出的结构,并通过数据结构填充模板中定义的变量,从而实现代码的复用和简化。
【2.Velocity 的基本用法】Velocity 的基本用法主要包括以下几个步骤:(1)导入 Velocity 库:在项目中引入 Velocity 的 jar 包,例如:velocity-1.7.jar。
(2)配置 Velocity 环境:创建一个 velocity.properties 文件,用于配置 Velocity 的基本属性,例如:输出目录、编码方式等。
(3)编写 Velocity 模板:创建一个.vm 文件,编写模板代码,并在需要的地方使用$符号定义变量。
(4)执行 Velocity 模板:通过 Velocity 引擎执行模板文件,生成目标文件。
【3.Velocity 中的数据结构】Velocity 中的数据结构主要包括以下几种:(1)String:表示一个字符串,用于表示模板中的普通文本。
(2)Integer:表示一个整数,用于表示模板中的整数值。
(3)Double:表示一个浮点数,用于表示模板中的小数值。
(4)Boolean:表示一个布尔值,用于表示模板中的逻辑值。
(5)Date:表示一个日期对象,用于表示模板中的日期值。
(6)ArrayList:表示一个列表,用于表示模板中的列表结构。
(7)HashMap:表示一个哈希表,用于表示模板中的键值对结构。
这些数据结构在 Velocity 模板中通过$符号定义,并在模板引擎执行时进行填充和解析。
【4.总结】Velocity 作为一个强大的模板引擎,可以简化代码的编写,提高开发效率。
Velocity配置文件详解在velocity的发布方包中有一个velocity.properties(位于 org.apache.velocity.runtime.defaults package下,文件定义了velocity的配置信息org.apache.velocity.runtime.RuntimeConstants中定义了key值)#模板编码:input.encoding=ISO-8859-1//模板输入编码output.encoding=ISO-8859-1 //模板输出编码#foreach配置= velocityCount //计数器名称directive.foreach.counter.initial.value = 1 //计数器初始值directive.foreach.maxloops = -1 //最大循环次数,-1为默认不限制 = velocityHasNex //迭代器名称#set配置directive.set.null.allowed = false //是否可设置空值#include配置directive.include.output.errormsg.start= <!-- include error : //错误信息提示开始字符串directive.include.output.errormsg.end = see error log --> //错误信息提示结束字符串#parse配置directive.parse.max.depth = 10 //解析深度#模板加载器配置resource.loader = file //模板加载器类型,默认为文件,可定义多个file.resource.loader.description= Velocity File Resource Loader //加载器描述file.resource.loader.class=Velocity.Runtime.Resource.Loader.FileResourceLoader //加载器类名称file.resource.loader.path = . //模板路径file.resource.loader.cache = false //是否启用模板缓存file.resource.loader.modificationCheckInterval = 2 //检查模板更改时间间隔宏配置velocimacro.library//指定宏定义文件的位置velocimacro.permissions.allow.inline= true //是否可以行内定义velocimacro.permissions.allow.inline.to.replace.global = false //是否可以用行内定义代替全局定义velocimacro.permissions.allow.inline.local.scope = false //行内定义是否只用于局部velocimacro.context.localscope= false //宏上下文是否只用于局部velocimacro.max.depth = 20 //解析深度velocimacro.arguments.strict= false //宏参数是否启用严格模式#资源管理器配置resource.manager.class= Velocity.Runtime.Resource.ResourceManagerImpl //管理器类名称resource.manager.cache.class = Velocity.Runtime.Resource.ResourceCacheImpl //缓存器类名称#解析器池配置parser.pool.class= Velocity.Runtime.ParserPoolImpl //解析池类名称parser.pool.size = 40 //初始大小#evaluate配置directive.evaluate.context.class= Velocity.VelocityContext //上下问类名称#可插入introspector配置runtime.introspector.uberspect = Velocity.Util.Introspection.UberspectImpl //默认introspector类名称#日志配置runtime.log = velocity.log用以指定 Velocity 运行时日志文件的路劲和日志文件名,如不是全限定的绝对路径,系统会认为想对于当前目录.runtime.log.logsystem这个参数没有默认值,它可指定一个实现了org.apache.velocity.runtime.log.LogSystem.接口的自定义日志处理对象给Velocity。
Spring框架参考文档-5.0.0-中文完整版AuthorsRod Johnson , Juergen Hoeller , Keith Donald , Colin Sampaleanu , Rob Harrop , Thomas Risberg , Alef Arendsen , Darren Davison , Dmitriy Kopylenko , Mark Pollack , Thierry Templier , Erwin Vervaet , Portia Tung , Ben Hale , Adrian Colyer , John Lewis , Costin Leau , Mark Fisher , Sam Brannen , Ramnivas Laddad , Arjen Poutsma , Chris Beams , Tareq Abedrabbo , Andy Clement , Dave Syer , Oliver Gierke , Rossen Stoyanchev , Phillip Webb , Rob Winch , Brian Clozel , Stephane Nicoll , Sebastien Deleuze版本号:5.0.0.RELEASECopyright ? 2004-2016Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically.文档官网:https://docs.spring.io/spring/docs/5.0.0.RELEASE/spring-framework-reference/index.html现在官网的5.0.0已经在2017年9月28日出了release版,为此翻译了5.0.0版本(从4.3.10升级到此版本,如果还在使用4.3.10版本,请看本人的前一个版本),翻译前后历时15天,十多次的修改和校对。
Velocity用户手册---中文版1、Velocity是什么?Velocity是一个基于java的模板引擎(template engine)。
它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC 架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。
Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。
Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。
Velocity也可以为Turbine web开发架构提供模板服务(template service)。
Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。
2、Velocity能为我们作什么?The Mud Store Example假设你是一家专门出售Mud的在线商店的页面设计人员,让我们暂且称它为“在线MUD商店”。
你们的业务很旺,客户下了各种类型和数量的mud订单。
他们都是通过输入用户名和密码后才登陆到你的网站,登陆后就允许他们查看订单并购买更多的mud。
现在,一种非常流行的mud正在打折销售。
另外有一些客户规律性的购买另外一种也在打折但是不是很流行的Bright Red Mud,由于购买的人并不多所以它被安置在页面的边缘。
所有用户的信息都是被跟踪并存放于数据库中的,所以某天有一个问题可能会冒出来:为什么不使用velocity来使用户更好的浏览他们感兴趣的商品呢?Velocity使得web页面的客户化工作非常容易。
各种系统架构图及其简介1.Spring架构图应用程序开发复杂性而创建的。
框架是一个 Spring框架,是为了解决开源企业的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为服务Spring框架的功能可以用在任何J2EEJ2EE应用程序开发提供集成的框架。
的核心要点是:支持不绑定管理的环境。
Spring器中,大多数功能也适用于不受环服务的可重用业务和数据访问对象。
这样的对象可以在不同J2EE到特定J2EE 测试环境之间重用。
境(Web或EJB)、独立应用程序、框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个Spring组成模块联合实现。
每个模块的功能如下:框架的基本功能。
核心容器的主要组件是核心容器:核心容器提供Spring?模IOC ()BeanFactory,它是工厂模式的实现。
BeanFactory使用控制反转式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下?文信息。
Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP模块直接将面向方面的编程?功能集成到了Spring框架中。
所以,可以很容易地使Spring框架管理的的应用程序中的对象提Spring模块为基于Spring AOP。
AOP任何对象支持.组件,就可以将EJB供了事务管理服务。
通过使用Spring AOP,不用依赖声明性事务管理集成到应用程序中。
抽象层提供了有意义的异常层次结构,可用该结构Spring DAO:JDBC DAO?供应商抛出的错误消息。
异常层次结构简化来管理异常处理和不同数据库了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。
Spring DAO的面向JDBC的异常遵从通用的DAO异常层次结构。
从零开始搭建springboot+springcloud+mybatis本地项⽬全过程(图解)记录⼀下从零开始搭建⼀个springboot+springcloud+mybatis本地项⽬的demo的过程。
纯代码⼩⽩⼀枚,若有不⾜或错误之处,欢迎⼴⼤朋友指出!开发环境准备:IDE:IntelliJ Idea 2019.3数据库:mysql 8.0.2.2SpringBoot版本:2.2.0.RELEASESpringCloud版本:Hoxton.RELEASE⼀、创建⼀个新的Idea项⽬打开Idea,单击New->File->Project,选择Maven,直接下⼀步输⼊我们的项⽬名,我这⾥起名为pam,单击Finish完成创建⼆、右键单击project下的⽗节点->New->Module,创建⼀个注册中⼼服务端的Module,输⼊⼀下名称,我这⾥以pam-server为例,直接选finish;同理再创建⼀个客户端的Module,输⼊⼀下名称,我这⾥以pam-service为例,直接选finish,结构如图所⽰:三、单击File->Settings->Maven,配置⼀下本地的maven,单击OK四、在最外层pom⽂件引⼊⼀下springboot、springcloud及mybatis的依赖。
这⾥引⼊的springboot版本为2.2.0-RELEASE,与之相对应的springcloud版本为Hoxton.RELEASE。
注意⼆者版本需要相适配,否则会启动报错。
这⾥额外引⼊了⼏个常⽤依赖,直接在maven单击⼀下刷新,仓库即可在线将所需依赖下载进去。
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.0.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!--注册中⼼相关依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.4.RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.10.0</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId><version>1.3.1.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-contract-stub-runner</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-contract-verifier</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream-test-support</artifactId><scope>test</scope></dependency><dependency><groupId>mons</groupId><artifactId>commons-lang3</artifactId><version>3.5</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency></dependencies>五、创建如图所⽰的⽬录结构:①编写注册中⼼,注册中⼼⽬录结构:编写WebApplication启动类,添加注解@EnableEurekaServer和@SpringBootApplication,我这⾥想做⼀个纯注册中⼼,不与数据库挂钩,所以增加了⼀个exclude = DataSourceAutoConfiguration.class,启动项⽬时不⾃动与数据库连接,若想让注册中⼼也连接数据库,这个exclude也可以不要。
目录一.创建ORACLE数据库 (2)二.Myeclipse下新建工程SVI (2)三.配置ibatis (4)四.配置web.xml (5)五配置VSITest-servlet.xml (5)六对应实例代码 (11)七.创建velocity模板 (25)八.测试 (28)一.创建ORACLE数据库数据库名为ORCL,并创建表T_USERCREATE TABLE T_USER(USERNAME VARCHAR2(20)NOT NULL,PASSWORD VARCHAR2(20)NOT NULL)插入些数据二.Myeclipse下新建工程SVI 用myeclipse新建一个web工程,导入所需的jar包,包括包结构为上图为本测试的WEB工程结构,可以看出WEB工程采用流行的三层框架,即MVC,这里我们采用的是Spring MVC,即表示层采用velocity,运用ibatis作为持久化对象,采用springIOC配置javabean的实际调用,以spring相关类作为控制器控制页面转发,核心是spring MVC对应包说明如下:com.sc.VSITest.dao------------------------------------系统DAO接口com.sc.VSITest.dao.impl------------------------------------系统DAO实现com.sc.VSITest..mapping------------------------------------bean文件及其映射文件com.sc.VSITest.service------------------------------------系统服务层接口com.sc.VSITest.service.impl------------------------------------系统服务实现com.sc.VSITest.Controller------------------------------------系统控制层,为页面跳转提供支持com.sc.VSITest.formbean------------------------------------系统传输对象目录三.配置ibatis1.在web-inf下配置ibatis总配置文件SqlMapConfig.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMapConfig PUBLIC "-////DTD SQL Map Config 2.0//EN""/dtd/sql-map-config-2.dtd"><sqlMapConfig><settings cacheModelsEnabled="true"enhancementEnabled="false"lazyLoadingEnabled="false" maxRequests="3000"maxSessions="3000"maxTransactions="300" useStatementNamespaces="true"/><!-- 配置ibatis --><sqlMap resource="com/sc/VSITest/mapping/User.xml"/> </sqlMapConfig>2.在web-inf下配置数据文件SqlMapForOracle.propertiesdriverName=oracle.jdbc.driver.OracleDriverurl=jdbc:oracle:thin:@localhost:1521:ORCLusername=qbstkpassword=liusheng四.配置web.xml<!-- 1.配置Sring MVC的核心控制器DispatcherServletDispatcherServlet从一个xml文件中装入Spring应用程序上下文,xml文件的名称是servlet名称后面加上-sevlet,在这个示例中,DispatcherServlet会从VSITest-servlet.xml文件装入应用程序上下文--><servlet><servlet-name>VSITest</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class><load-on-startup>1</load-on-startup></servlet><!--为VSITest建立映射 --><servlet-mapping><servlet-name>VSITest</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>所有.do的请求都会转到DispatcherServlet五配置VSITest-servlet.xml当前用的spring版本为2.0,可以考虑升级到2.5或3.0<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN""/dtd/spring-beans-2.0.dtd">1. 数据源配置<!--===================================================================== ============== --><!-- 数据源配置 --><!--===================================================================== ============== --><!-- DataSourse定义 --><bean id="propertyConfigure"class="org.springframework.beans.factory.config.PropertyPlaceholderCo nfigurer"><property name="locations"><list><value>/WEB-INF/SqlMapForOracle.properties</value> </list></property></bean><bean id="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"><value>${driverName}</value></property><property name="url"><value>${url}</value></property><property name="username"><value>${username}</value></property><property name="password"><value>${password}</value></property></bean>2.配置ibatis<!--===================================================================== ============== --><!-- ibatis 配置 --><!--===================================================================== ============== --><!-- 注入ibatis总配置文件和数据源让它们给我生成 SqlMapClient--><bean id="sqlMapClient"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource" ref="dataSource"/><property name="configLocation"value="WEB-INF/SqlMapConfig.xml"/></bean>3.配置velocity<!--===================================================================== ============== --><!-- Velocity 配置 --><!--===================================================================== ============== --><!-- 配置Velocity引擎VelocityConfigurer负责在Spring中设置Velocity引擎,这里,我们通过属性resourceLoaderPath告诉Velocity到哪里寻找它的模板建议将模板放到web-inf的某个子目录里,这样可以保证这些模板不能被直接访问--><bean id="velocityConfigurer"class="org.springframework.web.servlet.view.velocity.VelocityConfigur er"><!-- resourceLoaderPath属性通知Velocity到哪里找到velocity模板 --><property name="resourceLoaderPath"value="/WEB-INF/velocity/"/><!-- 处理中文 --><property name="velocityProperties"><props><prop key="input.encoding">gbk</prop><prop key="output.encoding">gbk</prop></props></property></bean><!-- 配置velocity视图解析器 --><bean id="viewResolver"class="org.springframework.web.servlet.view.velocity.VelocityViewReso lver"><!-- 配置模板的后缀 --><property name="suffix"><value>.vm</value></property><!-- 处理中文乱码 --><property name="contentType"><value>text/html;charset=gbk</value></property></bean>4.注入dao和service<beans><!--===================================================================== ============== --><!-- 系统DAO层注入 --><!--===================================================================== ============== --><!-- dao定义 --><bean id="userDao" class="erDaoImpl"> <!-- 为UserDaoImpl注入 SqlMapClient--><property name="sqlMapClient" ref="sqlMapClient"></property> </bean><!--===================================================================== ============== --><!-- Service层注入 --><!--===================================================================== ============== --><bean id="userService"class="erServiceImpl"><!-- 注入 UserDao --><property name="userDao" ref="userDao"></property> </bean></beans>5.配置Controller<!--===================================================================== ============== --><!-- Controller层注入本层实现Spring MVC 核心控制--><!--===================================================================== ============== --><!-- 配置方法名解析器 --><bean id="methodNameResolver"class="org.springframework.web.servlet.mvc.multiaction.PropertiesMeth odNameResolver"><property name="mappings"><props><prop key="/addUser.do">addUser</prop><prop key="/addUserForm.do">addUserForm</prop><prop key="/updateUser.do">updateUser</prop><prop key="/updateUserForm.do">updateUserForm</prop><prop key="/findUser.do">findUserByName</prop><prop key="/listUser.do">listUser</prop></props></property></bean><!-- 配置控制器 url映射 --><bean id="urlMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMappin g"><property name="mappings"><props><prop key="/findUser.do">findUserController</prop><prop key="/listUser.do">findUserController</prop><prop key="/addUser.do">addUserController</prop><prop key="/addUserForm.do">addUserController</prop><prop key="/delUser.do">delUserController</prop><prop key="/updateUser.do">updateUserController</prop><propkey="/updateUserForm.do">updateUserController</prop></props></property></bean><!-- 查询用户控制器 --><bean id="findUserController"class="com.sc.VSITest.Controller.FindUserController"><property name="methodNameResolver" ref="methodNameResolver"/><!-- 注入模板名称 --><property name="page_listUser"><value>listUser</value></property><!-- 注入 userService --><property name="userService" ref="userService"/></bean><!-- 增加用户控制器 --><bean id="addUserController"class="com.sc.VSITest.Controller.AddUserController"><property name="methodNameResolver"><ref bean="methodNameResolver"/></property><!-- 注入模板名称 --><property name="page_listUser"><value>listUser</value></property><property name="page_addUser"><value>addUser</value></property><!-- 注入 userService --><property name="userService" ref="userService"/></bean><!-- 删除用户控制器 --><bean id="delUserController"class="com.sc.VSITest.Controller.DelUserController"><!-- 注入模板名称 --><property name="page_listUser"><value>listUser</value></property><!-- 注入 userService --><property name="userService" ref="userService"/></bean><!-- 修改用户控制器 --><bean id="updateUserController"class="com.sc.VSITest.Controller.UpdateUserController"><property name="methodNameResolver"><ref bean="methodNameResolver"/></property><!-- 注入模板名称 --><property name="page_listUser"><value>listUser</value></property><property name="page_updateUser"><value>updateUser</value></property><!-- 注入 userService --><property name="userService" ref="userService"/> </bean>六对应实例代码er.javapackage com.sc.VSITest.mapping;public class User {private String username ;private String password ;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}er.xml, 与User.java在同一个目录下<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapPUBLIC "-////DTD SQL Map 2.0//EN""/dtd/sql-map-2.dtd"><sqlMap namespace="USER_SPACE"><typeAlias alias="User" type="er"/><!-- 负责将结果集的列值映射成 Java Bean的属性值 --><resultMap id="result_user" class="er"> <result property="username" column="username"/><result property="password" column="password"/></resultMap><!-- 查询所有用户 --><select id="get_user_list" parameterClass="java.util.Map"resultMap="result_user">select username,password from t_user</select><!-- 按姓名查询 --><select id="find_user_by_username"parameterClass="ng.String" resultMap="result_user">select username,password from t_user where username=#username# </select><!-- 添加一个用户 --><insert id="add_user" parameterClass="User">insert into t_user values(#username#,#password#)</insert><!-- 删除用户 --><delete id="del_user_by_name" parameterClass="ng.String"> delete from t_user where username=#username#</delete><!-- 修改用户 --><update id="update_user" parameterClass="User">update t_user set password=#password# where username=#username# </update></sqlMap>erDao.javapackage com.sc.VSITest.dao;import java.util.Collection;import er;/***系统DAO接口**@author Administrator**/public interface UserDao {public Collection<User> getUserList();public void delUserByName(String username);public void updateUser(User user);public void addUser(User user);public User findUserByName(String username); }package com.sc.VSITest.dao.impl;import java.util.Collection;import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; import erDao;import er;public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao {/***注意:此处要在配置文件中注入SqlMapClient*/public Collection<User> getUserList() {returnthis.getSqlMapClientTemplate().queryForList("USER_SPACE.get_user_list ");}public void addUser(User user) {this.getSqlMapClientTemplate().insert("USER_SPACE.add_user",user) ;}public void delUserByName(String username) {this.getSqlMapClientTemplate().delete("USER_SPACE.del_user_by_nam e", username) ;}public void updateUser(User user) {this.getSqlMapClientTemplate().update("USER_SPACE.update_user", user) ;}public User findUserByName(String username) {return(User)this.getSqlMapClientTemplate().queryForObject("USER_SPACE.find_ user_by_username",username) ;}}package com.sc.VSITest.service;import java.util.Collection;import er;/***服务层接口**@author Administrator**/public interface UserService {public Collection<User> getAllUsers();public void delUserByName(String username);public void updateUser(User user);public void addUser(User user);public User findUserByName(String username); }6. UserServiceImpl.javapackage com.sc.VSITest.service.impl;import java.util.Collection;import erDao;import er;import erService;public class UserServiceImpl implements UserService {/***注入UserDao*/private UserDao userDao;public Collection<User> getAllUsers() {Collection<User> userResult = userDao.getUserList();/***do some otherthings*/return userResult;}public User findUserByName(String username) {return userDao.findUserByName(username);}public void addUser(User user) {userDao.addUser(user);}public void delUserByName(String username) {userDao.delUserByName(username);}public void updateUser(User user) {userDao.updateUser(user);}public UserDao getUserDao() {return userDao;}public void setUserDao(UserDao userDao) {erDao = userDao;}}7. AddUserController.javapackage com.sc.VSITest.Controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;importorg.springframework.web.servlet.mvc.multiaction.MultiActionController ;import er;import erService;public class AddUserController extends MultiActionController { /***注入UserService*/protected UserService userService;/***注入viewPage viewPage代表处理完后要返回的页面*/private String page_listUser;private String page_addUser;public ModelAndView addUser(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {User user = new User();user.setUsername(request.getParameter("username"));user.setPassword(request.getParameter("password"));userService.addUser(user);return new ModelAndView(page_listUser, "users",userService.getAllUsers());}public ModelAndView addUserForm(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {return new ModelAndView(page_addUser);}public UserService getUserService() {return userService;}public void setUserService(UserService userService) { erService = userService;}public String getPage_listUser() {return page_listUser;}public void setPage_listUser(String page_listUser) { this.page_listUser = page_listUser;}public String getPage_addUser() {return page_addUser;}public void setPage_addUser(String page_addUser) { this.page_addUser = page_addUser;}}8 DelUserController.javapackage com.sc.VSITest.Controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;importorg.springframework.web.servlet.mvc.multiaction.MultiActionController ;import erService;public class DelUserController extends MultiActionController {/***注入UserService*/protected UserService userService;/***注入viewPage viewPage代表处理完后要返回的页面*/private String page_listUser;public ModelAndView delUser(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// 处理中文问题String username = newString(request.getParameter("username").getBytes("ISO-8859-1"), "gbk");userService.delUserByName(username);return new ModelAndView(page_listUser, "users", userService .getAllUsers());}public UserService getUserService() {return userService;}public void setUserService(UserService userService) { erService = userService;}public String getPage_listUser() {return page_listUser;}public void setPage_listUser(String page_listUser) { this.page_listUser = page_listUser;}}9 FindUserController.javapackage com.sc.VSITest.Controller;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;importorg.springframework.web.servlet.mvc.multiaction.MultiActionController ;import er;import erService;public class FindUserController extends MultiActionController {/***注入UserService*/protected UserService userService;/***注入viewPage*viewPage代表处理完后要返回的页面*/private String page_listUser ;public ModelAndView findUserByName(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//接收输入域数据String username = request.getParameter("input") ;User user = userService.findUserByName(username) ;System.out.println("user-----"+user);if(null==username||username.trim().length()==0){return newModelAndView(page_listUser,"users",userService.getAllUsers()) ;}List<User> list = null ;if(user!=null){list = new ArrayList<User>() ;list.add(user);}System.out.println("list---"+list);return new ModelAndView(page_listUser,"users",list);}public ModelAndView listUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {return newModelAndView(page_listUser,"users",userService.getAllUsers()) ;}public UserService getUserService() {return userService;}public void setUserService(UserService userService) { erService = userService;}public String getPage_listUser() {return page_listUser;}public void setPage_listUser(String page_listUser) { this.page_listUser = page_listUser;}}10 UpdateUserController.javapackage com.sc.VSITest.Controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;importorg.springframework.web.servlet.mvc.multiaction.MultiActionController ;import er;import erService;public class UpdateUserController extends MultiActionController {/***注入UserService*/protected UserService userService;/***注入viewPage viewPage代表处理完后要返回的页面*/private String page_listUser;private String page_updateUser;public ModelAndView updateUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String usrename = request.getParameter("username");String password = request.getParameter("password");User user = userService.findUserByName(usrename);user.setPassword(password);userService.updateUser(user);return new ModelAndView(page_listUser, "users", userService .getAllUsers());}public ModelAndView updateUserForm(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// 处理中文问题String username = newString(request.getParameter("username").getBytes("ISO-8859-1"), "gbk");User user = userService.findUserByName(username);return new ModelAndView(page_updateUser, "user", user);}public UserService getUserService() {return userService;}public void setUserService(UserService userService) { erService = userService;}public String getPage_listUser() {return page_listUser;}public void setPage_listUser(String page_listUser) { this.page_listUser = page_listUser;}public String getPage_updateUser() {return page_updateUser;}public void setPage_updateUser(String page_updateUser) { this.page_updateUser = page_updateUser;}}七.创建velocity模板在WEB-INF下建立目录velocity交将以下文件放下其中1.listUser.vm<html><head><meta http-equiv="Content-Type" content="text/html;charset=gbk"><title>test</title></head><body><h1>Test Web Application System</h1><hr><h1>velocity模板本身中文</h1><form action="/VSITest_v5_1/findUser.do" method="post" name="listform"><input type="text" name="input"> <input type="submit" value=" find"> <a href="addUserForm.do">addUser</a><table border="1"><tr><td>username</td><td>password</td><td>update</td><td>delete</td></tr>#if(!$users)<tr><td colspan="4">no data</td></tr>#else#foreach($user in $users)<tr><td>$ername</td><td>$user.password</td><td><ahref="updateUserForm.do?username=${ername}">update</a></td><td><a href="delUser.do?username=${ername}">delete</a></td> </tr>#end#end</table></form></body></html>2.addUser.vm<html><meta http-equiv="Content-Type" content="text/html; charset=gbk"><head><title>test</title></head><body><h1>add a User</h1><hr><form action="/VSITest_v5_1/addUser.do" method="post" name="addUserForm"> username:<input type="text" name="username"/><br><br>password:<input type="text" name="password"/><br><br><input type="submit" name="submit" value="submit"/> <input type="reset" name="reset" value="reset"/> </form></body></html>3.updateUser.vm<html><meta http-equiv="Content-Type" content="text/html; charset=gbk"><head><title>test</title></head><body><h1>update User</h1><hr><form action="/VSITest_v5_1/updateUser.do" method="post" name="updateUserForm"> username:<input type="text" name="username" value="${ername}" readonly="readonly" /><br><br>new password:<input type="text" name="password"/><br><br><input type="submit" name="submit" value="submit"/> <input type="reset" name="reset" value="reset"/></form></body></html>八.测试在浏览器中敲入http://localhost:8080/VSI/listUser.do 出现以下界面则配置成功点击addUser出现界面点击update出现界面。