欢迎。我正在创建 Web 应用程序,堆栈:servlet,freemarker 作为 View 层。我正在尝试按照 MVC 模式来做到这一点。我想在我的所有页面中包含公共(public)页面片段菜单,其中包含指向其他服务/页面的超链接。所有页面均包含一个菜单。
我必须补充一点,我的一些 servlet 已映射到其他子目录示例中:
用户/编辑个人资料
管理/统计
管理/权限
索引
最后消息
就像我之前说过的,我想制作一个包含在其他页面中的通用菜单页面。当 hiperlinks 在由映射在“索引”的 servlet 渲染的模板中工作正常但已经来自管理/统计时,没有。我想我可以使用 contextPath 创建到其他网站的路径,但我不能在 freemarker 中执行此操作;/
最佳答案
您绝对可以在 FreeMarker 中做到这一点,但不要这么做。当然,FreeMarker 不包含这样的现成功能。与 JSP 的根本区别在于 FreeMarker 不规定任何内容(甚至不规定您将其与 Servlet-s 一起使用),因此框架作者可以完全控制模板作者将看到的内容和方式。如果您想公开此类功能,请通过数据模型或共享变量(请参阅 Configuration.setSharedVariable
)或通过 #import
-ed FTL 来实现调用框架的 Java API(Spring 就是这么做的)。从模板作者的角度来看,通常有一个变量包含所有 Web 框架功能,比如说 fw
,然后你可以执行类似 ${fw.url('admin/stats')}
,框架会将其扩展为绝对 URL。请注意,在示例中,模板作者不必处理高技术细节,例如插入 servlet 上下文 URL。此外,通过这种方式,目标可以只是某个操作标识符,然后您可以拥有另一层配置,将 URL 映射到操作(例如,这种灵 active 对于 SEO 很有用),这也意味着您可以自动发现损坏的链接。
关于java - 在 freemarker 模板中获取 contextPath 来链接其他 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18727707/