在AEM中,Externalizer是一种OSGI服务,它允许您以编程方式转换资源路径(例如,/path/to/my/page
)通过预配置的DNS来预定路径,从而将其置于外部和绝对URL(例如https://www.mycompany.com/path/to/my/page
)中。
由于实例在Web层后面运行时无法知道其外部可见URL,并且由于有时必须在请求范围之外创建链接,因此此服务提供了一个配置和构建这些外部URL的中心位置。
本页介绍如何配置Externalizer服务及其使用方法。 有关更多详细信息,请参阅Javaocs。
Externalizer服务允许您集中定义多个域,这些域可用于以编程方式为资源路径添加前缀。 每个域都由一个唯一名称来标识,该名称用于以编程方式引用该域。
要为Externalizer服务定义域映射,请执行以下操作:
通过Tools导航到配置管理器,然后导航到Web控制台,或输入https://<host>:<port>/system/console/configMgr.
单击Day CQ Link Externalizer以打开配置对话框。
到配置的直接链接为https://<host>:<port>/system/console/configMgr/com.day.cq.commons.impl.ExternalizerImpl
定义域映射:映射由唯一名称组成,该名称可在代码中用于引用域、空格和域:
<unique-name> [scheme://]server[:port][/contextpath]
,其中:
例如:production https://my.production.instance
以下映射名称是预定义的,且必须始终设置,因为AEM依赖于这些映射名称:
自定义配置允许您添加新类别,如“生产”、“暂存”,甚至外部非AEM系统(如“my-internal-webservice”),这有助于避免在项目代码库的不同位置对此类URL进行硬编码。
单击Save以保存更改。
Adobe建议您将配置添加到存储库。
此部分显示如何使用Externalizer服务的一些示例。
要在JSP中获取Externalizer服务,请执行以下操作:
Externalizer externalizer = resourceResolver.adaptTo(Externalizer.class);
要将路径外部化为“publish”域,请执行以下操作:
String myExternalizedUrl = externalizer.publishLink(resolver, "/my/page") + ".html";
假定域映射“ publish https://www.website.com
”, myExternalizedUrl的结尾值为“ https://www.website.com/contextpath/my/page.html
”。
要将路径外部化为“author”域,请执行以下操作:
String myExternalizedUrl = externalizer.authorLink(resolver, "/my/page") + ".html";
假定域映射“ author https://author.website.com
”, myExternalizedUrl的结尾值为“ https://author.website.com/contextpath/my/page.html
”。
要将路径外部化为“本地”域,请执行以下操作:
String myExternalizedUrl = externalizer.externalLink(resolver, Externalizer.LOCAL, "/my/page") + ".html";
假定域映射“ local https://publish-3.internal
”, myExternalizedUrl的结尾值为“ https://publish-3.internal/contextpath/my/page.html
”。
您可以在Javaocs中找到更多示例。