四、在Servlets中使用Velocity
Servlet编程
Velocity的一个主要的应用领域就是JAVA Servlet。有很多理由可以说明Velocity适合这个领域,最关键的是Velocity强制视图层(VIEW)和代码分离!
在servlet中使用velocity非常的简单。基本上你要做的就是继承VelocityServlet基类和实现handRequest()方法。
从Velocity1.1开始,有两个handRequest()方法:
public Template handRequest(Context)
这是旧的方法。这个方法要求返回一个有效的Template对象。如果无效或者为空,将会产生异常!同时error()方法会被调用!如果你希望产生异常后做一些其他的事情(比如重定向)可以重写这个方法。强烈建议您使用新的方法!
public Template handRequest(HttpServletRequest,HttpServletResponse,Context)
这是新方法。与旧的方法不同,它可以返回一个null来说明方法已经执行,并且Velocity什么都不做。
下面是一个简单的例子:
public class SampleServlet extends VelocityServlet
{
public Template handleRequest( HttpServletRequest request,
HttpServletResponse response,
Context context )
{
String p1 = "Jakarta";
String p2 = "Velocity";
Vector vec = new Vector();
vec.addElement( p1 );
vec.addElement( p2 );
context.put("list", vec );
Template template = null;
try
{
template = getTemplate("sample.vm");
}
catch( ResourceNotFoundException rnfe )
{
// couldn't find the template
}
catch( ParseErrorException pee )
{
// syntax error : problem parsing the template
}
catch( Exception e )
{}
return template;
}
}
|
是不是觉得很面熟?除了创建context对象,这已经由VelocityServelt帮你做了,并且VelocityServlet也帮你实现了merge()方法,这和我们开始部分的编码方式基本上是一样的。我们获得context和应用程序数据,并反回一个template。
默认传递给handleRequest()方法的context对象包含当前的HttpServletRequest和HttpServletResponse对象。他们分别被放置在常量VelocityServlet.REQUEST和VelocityServlet.RESPONSE中。你可以在JAVA代码中获得并使用他们:
public Template handleRequest( Context context )
{
HttpServletRequest request = (HttpServletRequest) context.get( REQUEST );
HttpServletResponse response = (HttpServletResponse) context.get( RESPONSE );
...
|
也可以在template中使用
#set($name = $req.getParameter('name') )
|
VelocityServelt允许开发者重写它的一些方法,以更好的使用它。
Properties loadConfiguration(ServletConfig)
这个方法允许重写通常的配置机制,增加或修改配置属性。
Context createContext(HttpServletRequest,HttpServletResponse)
这个方法允许你创建自己的Context对象。默认的实现只是简单的包含request和response的VelocityContext对象。为了避免在一些servlet容器中发生内省缓存问题,这个resquest和response对象被一个简单的包裹器类包装了。你可以正常的使用他们,但是请注意他们并不是javax.servlet.XXX !
void mergeTemplage(Template,Context,HttpServletResponse)
这个方法允许你产生输出流。VelocityServlet提供了一个有效的Writer类的池,所以只有在特殊的情况下才重写这个方法。
protected void error(HttpServletResquest,HttpServletResponse,Exception)
用于处理在处理请求过程中产生的异常。默认的实现将发送一个包含错误信息的简单HTML给用户。可以重写这个方法实现更高级的处理。
部署
当你部署基于Velocity的Servlet时,请确保你的属性文件被用来配置Velocity运行时刻环境。在Tomcat中,一个不错的方法就是放置你的velocity.properties文件在你的web应用的根目录下,并在web.xml文件中如下配置:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.foo.bar.MyServlet</servlet-class>
<init-param>
<param-name>properties</param-name>
<param-value>/velocity.properties</param-value>
</init-param>
</servlet>
|
Velocity在核心运行时刻类中使用了单例模式,为了确保web应用的classloader会管理你的运行时刻实例,把velocity-xx.jar包放在WEB-INF/lib目录下是一个好主意!不要放在CLASSPATH或容器的根路径下。
分享到:
相关推荐
包括以下四个基本文档: Velocity初级入门指南.doc velocity基础.doc Velocity教程.pptx velocity入门使用教程.doc
Velocity入门教程,语法,Velocity布局,Spring框架集成Velocity
Velocity入门教程实例,包括velocity介绍,语法详解,以及具体的示例!
Velocity入门Demo,含源代码, 直接放到tomcat可以运行
Velocity模板入门简单DEMO, 代码有注解;
Velocity入门,velocity是基于Java的引擎模版
初学velocity,做的一个小实例。
入门文档及应用源码,很适合做自动代码生成 包括:Velocity的中文指南\ velocity中文手册\ \基于Ant+Velocity的简单代码生成器的思路与实现
velocity的简单入门使用,主要适合刚开始学习velocity的人使用,也可以作为平时的参考
velocity入门简介,可作为入门学习,培训材料1
从Velocity的基础说起,讲到了其语法、然后结合其他流行技术进行延伸讲解,希望对你有帮助——资料仅有前14章,但已足够学习了
velocity快速入门
Apache-Velocity-java
NULL 博文链接:https://yaphis.iteye.com/blog/2080752
文档是velocity基本知识,语法运用,宏定义等,适合新手入门
本课程从velocity engine也就是velocity引擎开始, 先讲解velocity的基本使用以及基础语法 , 然后再讲解velocity 的进阶内容velocity Tools , 以及velocity作为web项目的视图改如何使用 , 每一部分都会有一个综合案例...
想学习velocity模板语言的可以看一看,内容比较简洁,适合初学者使用。
Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎
velocity入门实例,java代码读取配置文件 可直接运行