5
回答
Velocity在普通Java web中的整合问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

按照官方网站给出的说明,使用VelocityViewServlet来渲染模板,需要在web.xml进行配置,所有以vm结尾的请求,都交给这个Servlet来处理。

如果我的一个servlet映射的url是/hello。当我处理完成后,使用request.getRequestDispatcher("hello.vm").forward(req,resp)后,会被VelocityViewServlet进行处理,然后渲染模板输出。

问题是,模板页里的 $link的地址是http://xxx.xxx.xx/xx/hello.vm  虽然浏览器看上去仍然是 /hello

另外一个问题是,如果使用这种方式来让velocity整合到web中,所有已vm结尾的Servlet都会由默认的velocity Servlet来处理了。感觉用户只要对默认的一个url后面加上.vm的后缀,可能就会产生以外的问题。

请问红薯老大,还有各位了解velocity的朋友,你们是怎么来做的?

举报
xiaowenliang
发帖于7年前 5回/1K+阅
共有5个答案 最后回答: 7年前
	Properties p = new Properties();
	p.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_PATH,jRailsConfig.getJRailsTemplatePath());
	 //进行初始化操作   
	Velocity.init(p);
	//加载模板,设定模板编码   
	Template t = null;
	if(StringUtils.isEmpty(theme)){
	        t=Velocity.getTemplate(renderPath, jRailsConfig.getJRailsServletConfig().getEncoding());
	}else{
	        t=Velocity.getTemplate("/"+theme+renderPath, jRailsConfig.getJRailsServletConfig().getEncoding());
	}
	VelocityContext context = new VelocityContext();

Velocity仅仅是一个模版而已,与你的url采用什么后缀没有必然的联系,在你系统中唯一要注意的就是你的Velocity加载模版的时候只要能找到模版就可以了。也就是如上的renderPath变量,给出你的vm模版路径就ok了。

引用来自#4楼“红薯”的帖子

把 forward 改成 include 就可以用 link

红薯老大你使用VelocityViewServlet来渲染模板还是自己手动渲染好模板后再通过response.getWriter 写到客户端呢?

引用来自#5楼“xiaowenliang”的帖子

引用来自#4楼“红薯”的帖子

把 forward 改成 include 就可以用 link

红薯老大你使用VelocityViewServlet来渲染模板还是自己手动渲染好模板后再通过response.getWriter 写到客户端呢?

我是用 VelocityLayoutServlet 来渲染的,这个类是继承  VelocityViewServlet 的

顶部