根据用户代理更改速度模板



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

似乎我面临着基于User-Agent提供不同Apache Velocity模板(.vm文件(的看似不可能的任务。

遗留 Web 项目的问题源于为移动用户提供稍微不同的服务需求。速度的版本是1.6.2,速度工具的版本是2.0。

在如何执行此操作方面,我有很大的自由度,除了我希望在渲染 Velocity 文件之前在服务器端进行用户代理检查。

tl;博士

如何根据某些算法标准(即用户代理(呈现不同的.vm文件?

将用户代理添加到模板

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

然后在模板中添加逻辑

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

最终有效的是在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)根据用户代理(使用移动 ESP 库(返回正确的*.vm路径。

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

相关内容

  • 没有找到相关文章

最新更新