`

Velocity学习(二)绝对路径 ContextPath

阅读更多

Velocity学习(一)文章中,使用Velocity简单在页面中输出了一句话,接下来想在template文件中引用图片、CSS文件或者JS文件,也就是要处理一些与路径相关问题。要在模板中引入一张图片,摆在面前一个首要问题就是图片的路径问题。这时候想到在JSP中如何引入图片,JSP中通过Request.getContextPath()可以获得项目根目录,也就是说在Velocity中如果拿到了项目的根目录也就解决了上面的路径问题。很幸运的是Velocity的开发者已经预料到这个问题。

创建toolbox配置文件,通常使用XML文件,将tool.xml配置文件的路径配置到web.xml文件中。

 

<?xml version="1.0" encoding="UTF-8"?>

<tools>
   <toolbox scope="request">
     <tool key="link" class="org.apache.velocity.tools.view.LinkTool"
              forceRelative="true" includeRequestParams="true"/>
   </toolbox> 
</tools>
            

 配置web.xml文件

<context-param>  
            <param-name>org.apache.velocity.toolbox</param-name>
    		<param-value>/WEB-INF/tools.xml</param-value>
  	</context-param>

 在模板中使用$link.contextPath就可以获得项目根目录

 

 

<body>
	<div style="margin:20px;"></div>
	<div style="width:50%">
	<table width="50%">
		<tr><th>姓名</th><th>头像</th></tr>
		<tr>
			<td>$userName</td>
			<td><img src="$link.contextPath/resources/images/head.jpg" width="60" heigth="60"/></td>
		</tr>
	</table>
	</div>
</body>

 效果如下:

 



 Context有多个构造器,在构造Contex对象时可以传递Map对象或者InnerContext对象构造方法如下



 在Servlet中要灵活使用Context对象,可以采用下面一种解决方案

@SuppressWarnings("serial")
public class UserServlet extends VelocityViewServlet {
	@Override
	protected Template handleRequest(HttpServletRequest request,
			HttpServletResponse response, Context ctx) {
		Template template = getTemplate("user.html");
		return template;
	}

	@Override
	protected void fillContext(Context context, HttpServletRequest request) {
		// TODO Auto-generated method stub
		context.put("userName", "薛之谦");
	}

	@Override
	protected void mergeTemplate(Template template, Context context,
			HttpServletResponse response) throws IOException {
		// context 进行了一些参数初始化
		// TODO Auto-generated method stub
		Map<String, Object> values = new HashMap<String, Object>();
		values.put("userName", "薛之谦");
		// 组织复杂的数据可以这样
		Context context2 = new VelocityContext(values, context);

		super.mergeTemplate(template, context2, response);
	}
}

 

  • 大小: 11.3 KB
  • 大小: 12.7 KB
分享到:
评论

相关推荐

    velocity模板路径

    - `FileResourceLoader` 用于加载磁盘上的文件,路径可以是绝对路径或相对于当前工作目录的相对路径。 - `ClasspathResourceLoader` 用于从类路径中加载模板,路径通常是类路径内的相对路径。 - `...

    Velocity学习Web项目

    【Velocity学习Web项目】 Velocity是Apache软件基金会的一个开源项目,它是一个基于Java的模板引擎,用于生成动态网页内容。在J2EE环境中,Velocity经常与Struts等MVC框架结合使用,以提供更加灵活和高效的视图层...

    velocity学习笔记

    ### Velocity学习笔记精要 **一、Velocity简介与特点** Velocity是一种基于Java的模板引擎,用于将静态数据和动态内容结合在一起,生成最终的HTML、XML或其他格式的文档。其最大的特点是性能高、易于理解和使用,...

    velocity学习资料.zip

    在这个“velocity学习资料.zip”压缩包中,可能包含了关于Velocity的基本概念、语法、最佳实践以及一些示例代码,帮助初学者或有经验的开发者更好地理解和应用Velocity。 Velocity的工作原理基于MVC(Model-View-...

    velocity的学习资料

    在这个"velocity的学习资料"压缩包中,我们很可能会找到关于Velocity的基本概念、语法、最佳实践以及如何将其整合到Java Web项目中的相关信息。 1. **Velocity基本概念** - **模板语言**: Velocity使用简单的文本...

    JAVA的Velocity语法学习

    提供的《Velocity_java开发指南》和《Java的模板引擎Velocity初体验》两本书籍是学习Velocity的好资料。它们会详细介绍Velocity的使用方法、语法特性以及最佳实践,对于初学者来说非常有帮助。同时,Apache官网也有...

    velocity中文

    **Velocity中文手册与学习资料详解** Velocity是一款基于Java的模板引擎,它允许开发者将HTML页面设计与业务逻辑相分离,让网页设计人员专注于页面布局,而程序员则专注于编写控制逻辑。Velocity通过简单的语法使得...

    Velocity框架学习教程

    ### Velocity框架学习教程知识点 #### 一、Velocity框架概述 - **定义**:Velocity是一款开源的Java模板引擎,它的核心作用在于将业务逻辑与展示层相分离,使得开发者能够更加专注于各自的任务。对于Web开发而言,...

    Velocity学习指南(中文版).rar

    Velocity用户指南旨在帮助页面设计者和内容提供者了解Velocity和其简单而又强大的脚本语言(Velocity Template Language (VTL))。本指南中有很多示例展示了用Velocity来讲动态内容嵌入到网站之中,但是所有的VTL ...

    velocity官方工具包

    1. **引入依赖**: 在Java项目中,需要添加Velocity的jar包到类路径中。 2. **创建引擎**: 通过`VelocityityEngine`创建一个Velocity引擎实例。 3. **加载模板**: 使用引擎实例加载模板文件,例如`VelocityContext ...

    velocity web开发

    2. **上下文(Context)**:上下文是Velocity的核心组件,用于存储要在模板中显示的数据。你可以将Java对象放入上下文中,然后在模板中通过变量引用它们。 3. **解释器(Parser)**:Velocity解释器负责解析模板,...

    Velocity学习资料

    9. **最佳实践**:学习如何编写清晰、可维护的Velocity模板,遵循一定的编码规范和设计模式。 10. **性能优化**:理解Velocity的缓存机制,以及如何通过配置和编程优化模板的执行效率。 通过学习Velocity,你可以...

    velocity插件与学习文档

    学习Velocity,你需要掌握以下几个关键点: 1. **基础语法**: Velocity模板语言包括变量引用(如`${variable}`)、控制结构(如`#if`, `#else`, `#foreach`等)、逻辑运算符和比较操作。 2. **上下文对象**: 模板中...

    velocity 配置jar包

    这里的 `FILE_RESOURCE_LOADER_PATH` 属性指定了模板文件的路径。 3. **设置 Context**:将需要在模板中使用的 Java 对象放入 Context。 ```java VelocityContext context = new VelocityContext(); context.put(...

    Velocity之HelloWorld配置

    在Java代码中,我们需要初始化Velocity上下文(Context)和Velocity引擎。在`main`方法中,加入以下代码: ```java import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.VelocityContext; ...

    Velocity学习指南.doc

    Velocity是一个强大的基于Java的模板引擎,它是Apache软件基金会的Jakarta项目的一部分。...Velocity通过使用简单的模板语言(Velocity ...无论是在Web应用还是在其他领域,Velocity都是一个值得学习和使用的工具。

    velocity所需的jar包

    `eclipse相关插件`,虽然不是必需的jar包,但对于使用Eclipse作为IDE的开发者来说,可能需要安装Velocity支持的Eclipse插件,如Velocity视图插件,它能提供模板语法高亮和代码完成等功能,提高开发效率。 为了正确...

    velocity-1.5.jar,velocity-1.6.2-dep.jar,velocity-tools-1.3.jar

    在实际使用中,开发者需要将这些JAR文件添加到项目的类路径中,然后可以通过创建VelocityContext对象,填充数据,最后使用Velocity Engine渲染模板。这整个过程是完全独立于具体的服务器环境的,使得Velocity成为一...

    velocity学习笔记与struts2整合

    Velocity是Apache软件基金会的一个开源项目,它是一款快速、强大且易用的模板引擎,用于生成动态Web内容。在Java世界中,Velocity常被用来作为MVC框架中的视图层技术,与Struts2等框架集成,以实现更灵活的页面渲染...

Global site tag (gtag.js) - Google Analytics