velocity的web开发"/>
velocity的web开发
此版本比较老,但是可以参考下。
基于Velocity的应用程序现在很多企业都在使用,特别是做门户网站的系统。
对于Velocity的基础,可以参考之前的Velocity Step By Step,地址为.asp?id=19
velocity是一个核心工程,假如,你需要使用velocity去开企业应用,你需要下载velocity-tools工程,velocity-tools工程提供了Web应用的解决方案及Struts整合方案。下载可以到。
现在,以一个读取用户信息为例,介绍如何去使用Velocity
第一步,安装
解压缩velocity-tools-1.3.zip,这个版本也是当前的最新版本。
在解压缩的目录里面,有一个叫sample.war的web应用程序,其实这个就是一个velocity应用的最简单模板。可以将sample.war文件copy到%TOMCAT_HOME%/webapps里面,启动tomcat,将会自动地解压缩sample.war;或使用winrar打开sample.war文件,进入WEB-INF/lib里面,将相应的jar文件copy到eclipse工程的WebRoot/WEB-INF/lib里面,eclipse会自动地将jar文件加到classpath当中。
第二步,配置web.xml
接下来,需要配置web.xml,配置velocity的Servlet,以便对支持vm后缀的url,配置如下:
<web-app version = "2.4" xmlns = ""
xmlns:xsi = ""
xsi:schemaLocation = "
http: / /java.sun /xml /ns /j2ee /web-app_2_4.xsd ">
<servlet >
<servlet-name >velocity < /servlet-name >
<servlet-class >org.apache.velocity.tools.view.servlet.VelocityViewServlet < /servlet-class >
<init-param >
<param-name >org.apache.velocity.toolbox < /param-name >
<param-value > /WEB-INF /toolbox.xml < /param-value >
< /init-param >
<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 >velocity < /servlet-name >
<url-pattern >*.vm < /url-pattern >
< /servlet-mapping >
<welcome-file-list >
<welcome-file >index.jsp < /welcome-file >
< /welcome-file-list >
< /web-app >
第三,创建toolbox.xml,velocity.properties
在WebRoot/WEB-INF/下面新建一个toolbox.xml文件,该文件是velocity的工具箱,管理着所有的业务层实现,或者将这引起理解为模型。
在WebRoot/WEB-INF/下面新建一个velocit.properties文件,该文件用以定义velocity的一些必要参数,假如没有配置这个文件,系统将默认使用ISO-8859-1的编码形式,中文将会乱码。在velocity.properties配置文件当中,添加两行配置信息,配置信息如下:
input.encoding=GBK
output.encoding=GBK
第四步,创建数据库
启动Mysql,新建一个新的数据库,创建数据库的代码如下:
创建数据库:create database velocity;
使用velocity数据库:use velocity;
创建表:
ID INT NOT NULL AUTO_INCREMENT ,
NAME VARCHAR (20 ) NOT NULL ,
LOGINID VARCHAR (20 ) NOT NULL ,
AGE INT NOT NULL ,
PRIMARY KEY (ID )
) ;
初始化数据:
Insert INTO T_USER (NAME ,LOGINID ,AGE ) VALUES ( '罗志祥' , 'lzx' ,26 ) ;
Insert INTO T_USER (NAME ,LOGINID ,AGE ) VALUES ( '陈奕迅' , 'cyx' ,32 ) ;
Insert INTO T_USER (NAME ,LOGINID ,AGE ) VALUES ( '梁静茹' , 'ljr' ,30 ) ;
Insert INTO T_USER (NAME ,LOGINID ,AGE ) VALUES ( '容祖儿' , 'rze' ,29 ) ;
Insert INTO T_USER (NAME ,LOGINID ,AGE ) VALUES ( '王力宏' , 'wlh' ,31 ) ;
第五步,建立数据源:
<Resource name = "jdbc/velocity" auth = "Container" type = "javax.sql.DataSource"
maxActive = "10" maxIdle = "5" maxWait = "5000" logAbandoned = "true"
username = "root" password = "admin" driverClassName = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost:3306/velocity?characterEncoding=GBK&useUnicode=true&autoReconnect=true" / >
< /Context >
关于数据源的配置可以参考一下同一个类别下的Tomcat数据源配置:.asp?id=20
第六步,编写使用数据源的数据库连接通用类
ConnectionUtils.java
import java .sql .Connection ;
import java .sql .SQLException ;
import javax .naming .Context ;
import javax .naming .InitialContext ;
import javax .naming .NamingException ;
import javax .sql .DataSource ;
/**
*
* 数据库连接的通用函数.
* @author ZIZZ.
* @version Create Date: 2007-12-29 下午04:51:15.
*/
public class ConnectionUtils {
/**
* 从数据源当中获取一个数据库连接.
* @return
*/
public static Connection getConnection ( ) {
Connection result = null ;
try {
Context context = new InitialContext ( ) ;
DataSource dataSource = (DataSource )context .lookup ( "java:/comp/env/jdbc/velocity" ) ;
result = dataSource .getConnection ( ) ;
} catch (NamingException e ) {
e .printStackTrace ( ) ;
} catch (SQLException e ) {
e .printStackTrace ( ) ;
}
return result ;
}
}
第七步,编写表T_USER的操作对象
UserManager.java
import java .sql .Connection ;
import java .sql .ResultSet ;
import java .sql .SQLException ;
import java .sql .Statement ;
import java .util .ArrayList ;
import java .util .List ;
/**
*
* 该类是用户表的管理对象,提供对T_User表的所有操作.
* @author ZIZZ.
* @version Create Date: 2007-12-29 下午04:53:37.
*/
public class UserManager {
/**
* 列出所有用户.
* @return
* @throws SQLException
*/
public List listAllUsers ( ) throws SQLException {
List <User > result = new ArrayList <User > ( ) ;
Connection conn = ConnectionUtils .getConnection ( ) ;
Statement stmt = conn .createStatement ( ) ;
ResultSet rs = stmt .executeQuery ( "select * from t_user" ) ;
while (rs .next ( ) ) {
User user = new User ( ) ;
user .setId (rs .getInt ( "ID" ) ) ;
user .setName (rs .getString ( "NAME" ) ) ;
user .setLoginId (rs .getString ( "LOGINID" ) ) ;
user .setAge (rs .getInt ( "AGE" ) ) ;
result . add (user ) ;
}
//以下这种写法不太规则,因为假如rs关闭报错的时候,conn将没有被关闭.只是为了方便
rs .close ( ) ;
stmt .close ( ) ;
conn .close ( ) ;
return result ;
}
}
User.java
/**
* 用户对象,对应着数据库表T_User
* Class Comment
* @author 陈毓哲.Suneca-Developer-Group.
* @version Create Date: 2007-12-29 下午04:42:10.
*/
public class User {
private int id ;
private String name ;
private String loginId ;
private int age ;
public int getAge ( ) {
return age ;
}
public void setAge ( int age ) {
this .age = age ;
}
public int getId ( ) {
return id ;
}
public void setId ( int id ) {
this .id = id ;
}
public String getLoginId ( ) {
return loginId ;
}
public void setLoginId ( String loginId ) {
this .loginId = loginId ;
}
public String getName ( ) {
return name ;
}
public void setName ( String name ) {
this .name = name ;
}
}
第八步,配置toolbox.xml文件
在toolbox.xml文件当中做了如下定义:
<toolbox >
<data type = "string" >
<key >userlist_title < /key >
<value >用户列表 < /value >
< /data >
<tool >
<key >userManager < /key >
<scope >request < /scope >
<request-path > /userList /* < /request-path >
<class >zizz.UserManager < /class >
< /tool >
< /toolbox >
在配置文件当中,
key表示vm引用的对象名称,该名称必须是唯一的
scope表示对象的生命周期,其可以设置的值为:request,session,application
request-path假如scope设置为request,该对象是为那一个servlet使用的,request-path的命名最后需要加上/*,这是必须的
class表示对应的实现类
第九步,定义userList.vm文件
在WebRoot下,创建一个新的userList.vm模板文件,该文件来以读取数据库,显示数据,该文件内容如下:
<html >
<head >
<meta http-equiv = "Content-Type" content = "text/html; charset=GBK" >
<title >$userlist_title < /title >
< /head >
<body >
<table width = "50%" bgcolor = "#C0F6EE" >
<tr bgcolor = "#FFFFFF" >
<th >编号 < /th >
<th >姓名 < /th >
<th >登录号 < /th >
<th >年龄 < /th >
< /tr >
#foreach($user in ${userManager.listAllUsers()})
<tr bgcolor = "#FFFFFF" >
<td align = "center" >${user.getId()} < /td >
<td align = "center" >${user.getName()} < /td >
<td align = "center" >${user.getLoginId()} < /td >
<td align = "center" >${user.getAge()} < /td >
< /tr >
#end
< /table >
< /body >
< /html >
该模板文件使用了循环foreach,是不是看起来很眼熟?
更多推荐
velocity的web开发
发布评论