我到处寻找解决方案,但似乎技术不再那么受欢迎,所以似乎也没有任何答案。
我似乎反对基于 User-Agent 提供不同的Apache Velocity模板( .vm 文件)看似不可能完成的任务。
遗留的Web项目出现了问题,因为需要为移动用户提供一点点服务。速度版本为1.6.2,速度工具2.0版本。
关于如何操作,我有很多自由,除了我希望User-Agent在渲染Velocity文件之前检查服务器端。
TL;博士
如何基于某些算法标准(即User-Agent)呈现不同的 .vm 文件?
答案 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>
。