我到处寻找解决方案,但似乎这项技术不再那么受欢迎,所以似乎也没有任何答案。
似乎我面临着基于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>
。