欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Velocity学习(二)绝对路径 ContextPath

程序员文章站 2022-06-12 09:55:31
...

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>

 效果如下:

 


Velocity学习(二)绝对路径 ContextPath
            
    
    博客分类: 模板引擎 VelocityContextPath 
 Context有多个构造器,在构造Contex对象时可以传递Map对象或者InnerContext对象构造方法如下


Velocity学习(二)绝对路径 ContextPath
            
    
    博客分类: 模板引擎 VelocityContextPath 
 在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);
	}
}

 

  • Velocity学习(二)绝对路径 ContextPath
            
    
    博客分类: 模板引擎 VelocityContextPath 
  • 大小: 11.3 KB
  • Velocity学习(二)绝对路径 ContextPath
            
    
    博客分类: 模板引擎 VelocityContextPath 
  • 大小: 12.7 KB