Velocity学习(二)绝对路径 ContextPath

阅读更多

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

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

 




   
     
    

            

 配置web.xml文件

  
            org.apache.velocity.toolbox
    		/WEB-INF/tools.xml
  	

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

 

 


	
姓名头像
$userName

 效果如下:

 


Velocity学习(二)绝对路径 ContextPath_第1张图片
 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 values = new HashMap();
		values.put("userName", "薛之谦");
		// 组织复杂的数据可以这样
		Context context2 = new VelocityContext(values, context);

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

 

  • Velocity学习(二)绝对路径 ContextPath_第2张图片
  • 大小: 11.3 KB
  • Velocity学习(二)绝对路径 ContextPath_第3张图片
  • 大小: 12.7 KB
  • 查看图片附件

你可能感兴趣的:(Velocity,ContextPath)