在AEM中,Externalizer是OSGI服務,可讓您以程式設計方式轉換資源路徑(例如,/path/to/my/page
),以預先設定的DNS來預先固定路徑,以匯入外部和絕對URL(例如https://www.mycompany.com/path/to/my/page
)。
由於例項在Web層後面執行時無法知道其外部可見的URL,而且有時必須在請求範圍外建立連結,因此此服務提供一個集中位置來設定這些外部URL並建立它們。
本頁說明如何配置Externalizer服務以及如何使用它。 有關詳細資訊,請參閱Javadocs。
Externalizer服務可讓您集中定義多個網域,這些網域可用來以程式設計方式為資源路徑加上前置詞。 每個網域都由唯一名稱來識別,該名稱用於以程式設計方式參考網域。
要定義Externalizer服務的域映射:
通過工具導航到配置管理器,然後通過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]
其中:
計 划通常是http或https,但也可以是ftp等。
服 務器是主機名(可以是域名或IP地址)。
port (可選)是埠號。
contextpath (可選)只有在AEM安裝為位於不同內容路徑下的網頁應用程式時才會設定。
例如:production https://my.production.instance
下列對應名稱是預先定義的,必須一律設定,因為AEM需仰賴這些名稱:
local
-本機例項author
-編寫系統DNSpublish
-公眾對應網站DNS自訂設定可讓您新增新類別,例如production
、staging
,甚至外部非AEM系統,例如my-internal-webservice
。 避免在專案程式碼基底的不同位置硬式編碼此類URL,會很有用。
按一下保存保存更改。
Adobe建議您將配置添加到儲存庫。
本節顯示如何使用Externalizer服務的一些示例:
要在JSP中獲取Externalizer服務,請執行以下操作:
Externalizer externalizer = resourceResolver.adaptTo(Externalizer.class);
若要將路徑外部化為具有「發佈」網域:
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
您可以在Javadocs中找到更多示例。