在AEM中,Externalizer是OSGI服務,可讓您以程式設計方式轉換資源路徑(例如/path/to/my/page
)填入外部和絕對URL(例如https://www.mycompany.com/path/to/my/page
),方法是使用預先設定的DNS來預先修正路徑。
由於例項在Web層後面執行時無法知道其外部可見的URL,且由於有時必須在請求範圍之外建立連結,因此此服務提供一個集中位置來設定這些外部URL並建置它們。
本頁說明如何配置Externalizer服務以及如何使用它。 有關更多詳細資訊,請參閱Javadocs。
Externalizer服務允許您集中定義多個域,這些域可用於以寫程式方式為資源路徑加上前置詞。 每個網域都以唯一名稱識別,該名稱用於以程式設計方式參考網域。
要定義Externalizer服務的域映射:
透過Tools,然後導覽至Web Console,或輸入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。
按一下儲存以儲存變更。
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
"。
若要將具有「作者」網域的路徑外部化:
String myExternalizedUrl = externalizer.authorLink(resolver, "/my/page") + ".html";
假設網域對應" author https://author.website.com
",myExternalizedUrl結尾為值" https://author.website.com/contextpath/my/page.html
"。
要將具有'local'域的路徑外部化:
String myExternalizedUrl = externalizer.externalLink(resolver, Externalizer.LOCAL, "/my/page") + ".html";
假設網域對應" local https://publish-3.internal
",myExternalizedUrl結尾為值" https://publish-3.internal/contextpath/my/page.html
"。
您可以在Javadocs中找到更多範例。