根据User-Agent更改Velocity模板

时间:2017-08-07 15:43:48

标签: java tomcat tomcat7 velocity

我到处寻找解决方案,但似乎技术不再那么受欢迎,所以似乎也没有任何答案。

我似乎反对基于 User-Agent 提供不同的Apache Velocity模板( .vm 文件)看似不可能完成的任务。

遗留的Web项目出现了问题,因为需要为移动用户提供一点点服务。速度版本为1.6.2,速度工具2.0版本。

关于如何操作,我有很多自由,除了我希望User-Agent在渲染Velocity文件之前检查服务器端。

TL;博士

如何基于某些算法标准(即User-Agent)呈现不同的 .vm 文件?

2 个答案:

答案 0 :(得分:0)

将用户代理添加到模板

  String userAgent = request.getHeader("User-Agent");
  mapForTemplate.put("userAgent", userAgent);

然后在模板中添加你的逻辑

 #if ($userAgent == "....")
   #include( "chrome.vm" )
 #else
    #include( "firefox.vm" )
 #end

答案 1 :(得分:0)

最终有效的方法是在 web.xml 中创建一个额外的VelocityLayoutServlet,其中包含单独的<param-name>org.apache.velocity.properties</param-name>以及与速度文件不同的<url-pattern>

要完成解决方案,

request.getRequestDispatcher( getPath(request.getHeader("User-Agent")) ).forward(request, response);

其中getPath(String userAgent)根据 User-Agent (为其使用了Mobile ESP library)返回正确的 * .vm 路径。

警告: 不幸的是,<url-pattern>不同时支持文件夹路径表达式和文件扩展名表达式,但前者完成了工作,因此<url-pattern>*.vm</url-pattern>成为<url-pattern>velocity/*</url-pattern>