Deployment descriptor (部署描述符)


Deployment descriptor(部署描述符):

部署描述符指的是配置文件對於一個假象部署到一些容器/發動機。

在Java平台,企業版部署描述符描述組件、模塊或應用程序(例如web應用程序或者企業應用程序)應該被部署。它指導部署工具部署具有特定容器選項、安全設置的模塊或應用程序,並描述特定的配置要求。XML用於這些部署描述符文件的語法。

對於網絡應用程序,必須調用部署描述符web . XML並且必須駐留在網絡信息web應用程序根目錄下的目錄。對於Java EE應用程序,必須命名部署描述符application . XML並且必須直接放在META - INF應用程序頂層的目錄、耳朵文件

處理部署描述符的規則:

  • Web容器必須為部署描述符的文本節點的元素內容移除所有前導和后綴空格,在XML1.0中這被定義為"S(white space)"。
  • 部署描述符必須對模式有效。操作Web應用的Web容器和工具有很多選擇來檢查一個WAR的有效性。這包括檢查部署描述符文檔的有效性。
    此外,推薦操作Web應用的Web容器和工具提供一層語義檢查。在非一致性的Web應用case中,工具和容器應該通知開發者描述性的錯誤信息。高端應用服務器提供商被鼓勵以工具和容器分離的方式提供這種有效性檢查。
  • 在本規范中,web-app下的子元素可以按任意順序聲明。由於XML模式的限制,元素distributablesession-configwelcome-file-listjsp-configlogin-configlocale-encoding-mapping-list從可選改變到0或者更多。當部署描述符包含多余一個session-configjsp-configlogin-config時,容器必須通知開發者一個描述性錯誤信息。當有多個出現時,容器必須合並welcome-file-listlocale-encoding-mapping-list中的項目。distributale的多次出現必須像distributable單次出現一樣對待。
  • 在部署描述符中指定的URI路徑被認為是URL編碼格式。當URL包含CR(#xD)或者LF(#xA)時,容器必須通知開發者一個描述性錯誤信息。容器必須保留URL中所有其它包含空格的字符。
  • 容器必須嘗試規范部署描述符中的路徑。比如,/a/../b格式的路徑必須被解析為/b。對以'../'開頭的路徑的路徑開始或者解析在部署描述符中不是有效路徑。
  • 指向一個相對WAR根路徑的資源,或者一個映射相對於WAR根路徑的路徑的URI路徑,除非特殊說明,都應該以前導'/'開頭。
  • 值是枚舉類型元素,值對大小寫敏感。

部署描述符圖:

  1. web-app 元素
    web-app元素對一個Web應用而言,是部署描述符根。元素包含下列元素。這個元素有一個必須的元素version來指定部署描述符遵守哪個版本的規范。這個元素下的所有子元素能夠以任意順序出現。
    圖4-1 web-app 元素結構
     
    web-app元素結構
  2. description元素
    description元素用來提供對父級元素的一個文本描述。這個元素不僅出現在web-app元素中,也會出現在其它多個元素中。它有個可選的屬性xml:lang來表明在描述中使用哪種語言。屬性的默認值是English("en")。
  3. display-name元素
    display-name包含一個簡寫名字,它用來被工具展示。這個顯示名字不必唯一。這個元素有一個可選的屬性xml:lang來指明語言。
  4. icon元素
    icon元素包含小圖和大圖元素,它們用來為代表GUI工具中父級元素的小的和大的GIF或者JPEG圖標指明文件名。
  5. distributable元素
    distributable元素表明Web應用適當地編碼來被部署到一個分布式servlet容器中。
  6. context-param元素
    context-param包含一個Web應用的servlet上下文初始化參數的聲明。
  7. filter元素
    filter在Web應用中聲明了一個filter。在filter-mapping元素中使用filter-name值引用,filter被映射到一個servlet或者一個URL模式上。Filters能夠在運行時通過FilterConfig接口訪問部署描述符中聲明的初始化參數。filter-name元素的元素內容一定不能為空。filter-class是filter的完整類名。init-param元素包含name-value對來作為filter的初始化參數。可選的async-supported元素表明filter支持異步請求處理。
    圖4-2 filter元素結構
     
    filter元素結構
  8. filter-mapping元素
    filter-mapping被容器用來決定哪些filters以什么順序應用在一個請求上。filter-name的值必須要是在部署描述符中聲明的filter。匹配請求能夠用url-pattern或者servlet-name指明。
    圖4-3 filter-mapping元素結構
     
    filter-mapping元素結構
  9. listener元素
    listener元素為一個應用listener bean表明部署properties。子元素listener-class聲明:應用中的一個class必須被注冊為一個Web應用listener bean。值是listener類的全路徑名。
    圖4-4 listener 元素結構
     
    listener 元素結構
  10. servlet元素
    servlet被用來聲明一個servlet。它包含了一個servlet的聲明數據。jsp-file元素包含了一個Web應用中以一個'/'開頭的JSP文件的完整路徑。如果一個jsp-file被指明,並且load-on-startup元素出現,那么JSP被重新編譯和加載。servlet-name元素包含了servlet的規范名字。每個servlet名字在web應用中是唯一的。servlet-name的元素內容一定不能為空。servlet-class包含servlet的完整類名。run-as元素指明了被用來指定一個組件的身份。它包含可選的description,以及被role-name指明的一個安全角色的名字。元素load-on-startup表明這個servlet應該在web應用啟動的時候被加載(實例化並且調用init()方法)。這個元素的元素內容必須是一個整數,用以表明servlet應該被加載的順序。如果這個值為負整數,或者這個元素沒有出現,容器會在它想加載時候去加載這個servlet。如果這個值是正數或者0,容器必須在應用部署的時候加載和初始化這個servlet。容器必須保證數字小的servlet在數字大的servlet之前被加載。容器可以對有相同load-on-startup值的servlet選擇servlet的加載順序。security-role-ref元素在組件里或者在一個部署組件代碼中聲明了安全角色引用。它由可選的description,在代碼(role-name)中使用的安全角色名字以及一個對安全角色(role-link)的可選鏈接組成。如果安全角色沒有被指明,部署者必須選擇一份合適的安全角色。可選的async-supported元素表明servlet能夠支持異步請求處理。如果一個servlet支持文件上傳功能和mime-multipart請求的處理,對同樣的配置能夠在部署描述符中通過multipart-config元素被提供。multipart-config元素能夠被使用來指明文件被存儲的位置,文件被上傳的最大大小,最大請求大小以及文件被寫到磁盤的大小閾值。
    圖4-5 servlet元素結構
     
    servlet元素結構
  11. servlet-mapping元素
    servlet-mapping在一個servlet和一個URL模式之間定義了一個映射。
    圖4-6 servlet-mapping元素結構
     
    servlet-mapping元素結構
  12. session-config元素
    session-config為Web應用定義了會話參數。子元素session-timeout為所有在Web應用中被創建的會話定義了默認會話超時區間。具體的超時必須通過一個完整的分鍾數來表達。如果超時是0或者更少,容器確保會話的默認行為永不超時。如果這個元素沒有被指定,容器必須設置它的默認超時周期。
    圖4-7 session-config元素結構
     
    session-config元素結構
  13. mime-映射元素
    mime-mapping定義了一個擴展和一個mime類型之間的映射。extension元素包含了一個描述一個擴展的字符串,比如'txt'。
    圖4-8 mime-mapping元素結構
     
    mime-mapping元素結構
  14. welcome-file-list元素
    welcome-file-list包含一個歡迎文件的有序列表。子元素welcome-file包含一個文件名來用作一個默認歡迎文件,比如index.html。
    圖4-9 welcome-file-list元素結構
     
    welcome-file-list元素結構
  15. error-page元素
    error-page包含一個錯誤碼或者一個異常類型到一個web應用中資源路徑的映射。子元素exception-type包含一個Java異常類型的完整類名。子元素location包含了web應用中相對於web應用根路徑的資源位置。位置的值必須有一個前導'/'。
    圖4-10 error-page元素結構
     
    error-page元素結構
  16. jsp-config元素
    jsp-config被用來在web應用中為JSP文件提供全局配置信息。它有兩個子元素,taglibjsp-property-grouptaglib元素能夠被用來提供一個tag庫上的信息,它被web應用中的JSP頁面使用。
    圖4-11 jsp-config 元素結構
     
    jsp-config 元素結構
  17. security-constraint元素
    security-constraint被用來關聯有一個或者多個web資源集合的安全約束。子元素web-resource-collection指明了資源和web應用中應用於那些資源上的HTTP方法的一個子集,一個安全約束會應用在這個web應用上。auth-constraint表明一個應該被允許訪問這個資源集合的用戶角色。這里使用的role-name必須對應security-role元素的role-name或者是特別保留的角色名字''。如果''和角色名字同時出現,容器把這個解析為所有所有角色。如果沒有角色被指定,沒有用戶被允許訪問Web應用中被security-constraint描述的部分。當決定訪問時,容器匹配角色名字對大小寫敏感。user-data-constraint表明數據怎樣在客戶端之前交流,並且容器應該通過子元素transport-guarantee來被保護。transport-guarantee的合法值是NONE,INTEGRAL或者CONFIDENTIAL。
    圖4-12 security-constraint 元素結構
     
    security-constraint 元素結構
  18. login-config元素
    login-config被用來配置應該被使用的認證方法,應該被使用的realm名字以及被表單登錄機制所需的屬性。子元素auth-method為web應用配置認證機制。元素內容必須是BASIC,DIGEST,FORM,CLIENT或者一個具體提供商認證規范。realm-name指明了realm名字,它被用來為認證規范選擇web應用。form-login-config指明了應該在表單提交中被使用的登錄和錯誤頁面。如果基於表單登錄沒有被使用,這些元素將會被忽略。
    圖4-13 login-config元素結構
     
    login-config元素結構
  19. security-role元素
    security-role定義了一個安全角色。子元素role-name定義了安全角色的名字。這個名字必須為NMTOKEN遵循字典規則。
    圖4-14 security-role元素結構
     
    security-role元素結構
  20. env-entry元素
    env-entry聲明了一個應用的環境入口。子元素env-entry-name包含一個部署組件環境入口的名字。這個名字是相對於java:comp/env上下文的JNDI名字。名字在部署描述符中必須唯一。env-entry-type包含環境入口值的完整Java類型,應用代碼需要這個環境變量的入口值。子元素env-entry-value定義了一個部署逐漸環境入口的值。這個值必須是一個字符串,這個字符串對指定類型的構造函數有效,這個構造函數需要一個字符串作為參數,或者一個java.lang.Character類型的單個字符。可選的injection-target元素被用來把命名的資源注入定義到域或者JavaBean properties中。一個injection-target指定了一個類和一個資源被注入進來來的類的名字。injection-target-class為被注入類指定了完整的類路徑名。injection-target-name在具體類里制定了類名。第一個被找到的目標作為JavaBean property名字。如果沒有沒找到,找到的目標走位一個域名。具體的資源將會在類初始化期間通過調用set方法或者把值設置到名字域里來被注入到目標里。如果一個injection-target為環境入口被指明,env-entry-type可以被忽略或者必須匹配注入對象的類型。如果沒有指定injection-target,那么env-entry-type是必須要的。
    圖4-15 env-entry 元素結構
     
    env-entry元素結構
  21. ejb-ref元素
    ejb-ref聲明了指向企業bean的home的引用。ejb-ref-name指明了在引用企業bean的部署組件的代碼中被使用的名字。ejb-ref-type是被引用企業bean的期望類型,是Entity或者Sessionhome定義被引用企業bean的home接口的完整名字。remote定義了被引用bean的remote接口的完整名字。ejb-link指明了鏈接到一個企業bean的EJB引用。除了這些元素,injection-target元素能夠被用來定義被命名企業bean注入到一個組件域或者property中。
    圖4-16 ejb-ref元素結構
     
    ejb-ref元素結構
  22. ejb-local-ref元素
    ejb-local-ref聲明了指向企業bean的本地home的引用。local-home定義了企業bean的本地home接口的完整名字。local定義了企業bean的本地引用的完整名字。
    圖4-17 ejb-local-ref元素結構
     
    ejb-local-ref元素
  23. service-ref元素
    service-ref聲明了指向一個Web服務的引用。service-ref-name聲明了邏輯名字,模塊中的組件使用這個名字來查找Web服務。推薦所有服務應用名字都以/service/開頭。service-interface定義了客戶端依賴的JAX-WS服務接口完整類名。大多數場景中,值將會是javax.xml.rpc.Service。一個JAX-WS生成的服務接口類也會被指定。wsdl-file元素包含一個WSDL文件的URI位置。這個位置相對於模塊的根。jaxrpc-mapping-file包含一個文件的名字,這個文件描述了應用使用的Java接口和wsdl-file中的WSDL描述之間的JAX-WS映射。文件名字在一個模塊文件中是一個相對路徑。service-qname元素聲明了正在被引用的具體WSDL服務元素。如果沒有聲明wsdl-file,它將不會被指定。port-component-ref元素聲明了一個容器上的客戶端依賴來把Service Endpoint Interface解析到一個WSDL端口。給Service Endpoint Interface關聯一個特殊端口是可選的。這僅在一個Service.getPort(Class)調用時被容器使用。handler元素為一個端口組件聲明了一個處理器。處理器可以使用HandlerInfo接口來訪問init-name name-value對。如果port-name沒有被指定,處理器被認為與所有服務的端口關聯。可以參考JSR-109獲得詳細信息。
    圖4-18 service-ref元素結構
     
    service-ref元素結構
  24. resource-ref 元素
    resource-ref包含一個部署組件引用一個外部資源的聲明。res-ref-name指明了一個資源管理連接工廠引用的名字。名字是相對於java:comp/env上下文的JNDI名字。名字在部署文件中必須唯一。res-type元素指明了數據源的類型。類型是完整的Java語言類或者被數據源實現的接口。res-auth指明了部署組件代碼是否編程式地登記到資源管理,或者容器是否根據部署組件登記到資源管理。對於后面一種情況,容器使用部署者提供的信息。res-sharing-scope指明了通過特定資源管理連接工廠引用獲取的連接是否能被共享。如果被指定,值必須是Shareable或者Unshareable。可選的injection-target元素被用來把命名的資源注入到fields或者Javabeans properties中。
    圖4-19 resource-ref元素結構
     
    resource-ref元素結構
  25. resource-env-ref元素
    resource-env-ref包含了部署組件的引用,它指向部署組件環境中與一個資源關聯的被管理的對象。resource-env-ref-name指明了資源環境引用的名字。值是在部署組件中代碼中被使用的環境入口名字和一個相對java:comp/env上下文的JNDI名字,並且在部署組件中必須唯一。resource-env-ref-type指明了資源環境引用的類型。它是一個Java語言類或者接口的完整名字。可選的injection-target元素被用來定義把命名資源注入到fields或者JavaBeans properties中。resource-env-ref-type必須被提供,除非一個注入目標被指明。如果否被指明,類型必須兼容注入目標的類型。
    圖4-20 resource-env-ref元素結構
     
    resource-env-ref元素結構
  26. message-destination-ref元素
    message-destination-ref包含了一個部署組件引用的聲明,它指向一個與部署組件環境中與一個資源關聯的消息目標。message-destination-ref-name元素指明了一個消息目的地引用的名字。它的值是在部署組件代碼中被使用的環境入口名字。名字是一個相對java:comp/env上下文的JNDI名字,並且在一個企業beans的ejb-jar或者其它的部署文件中必須唯一。message-destination-type指明了目的地的類型。類型通過將會被實現的Java接口指定。message-destination-usage指明了通過引用表明的消息目的地的使用。值表明了消息是否會從消息目的地被消費,是否會為目的地生產消息,或者兩者皆是。組裝者利用這些信息把一個目的地的生產者與它的消費者關聯起來。message-destination-link鏈接了一個消息目的地引用或者消息啟動bean到一個消息目的地。組裝者設置這個值來反應應用中生產者和消費者之間的信息流。值必須是相同部署文件或者相同Java EE應用單元其它部署文件中一個消息目的地的message-destination-name。值可以由一個路徑名字組成,這個名字指明了一個部署文件,它包含了被引用消息目的地,目的地在路徑名中通過“#”追加或者分隔。路徑名相對於部署文件,它包含引用消息目的地的部署組件。這允許有相同名字的多個消息目的地被確定唯一身份。可選的injection-target元素被用來定義命名資源到fields或者JavaBeans properties的注入。message-destination-type必須被指明,除非一個注入目標被指明,這種情形下目標的類型會被使用。如果都被指定,類型必須與注入目標類型兼容。
    例子:
    <message-destination-ref>
    <message-destination-ref-name>
    jms/StockQueue
    </message-destination-ref-name>
    <message-destination-type>
    javax.jms.Queue
    </message-destination-type>
    <message-destination-usage>
    Consumes
    </message-destination-usage>
    <message-destination-link>
    CorporateStocks
    </message-destination-link>
    </message-destination-ref>
    圖4-21 message-destination-ref元素結構
     
    message-destination-ref元素結構
  27. message-destination元素
    message-destination指明了一個消息目的地。這個元素描述的邏輯目的地被部署者映射到一個物理目的地。message-destination-name元素為一個消息目的地指明了一個名字。在部署文件中,這個名字在消息目的地名字間必須唯一。
    例子:
    <message-destination>
    <message-destination-name>
    CorporateStocks
    </message-destination-name>
    </message-destination>
    圖4-22 message-destination元素結構
     
    message-destination元素結構
  28. locale-encoding-mapping-list元素
    locale-encoding-mapping-list包含locale和encoding之間的映射,它通過子元素locale-encoding指定。
    例子:
    <locale-encoding-mapping-list>
    <locale-encoding-mapping>
    <locale>ja</locale>
    <encoding>Shift_JIS</encoding>
    </locale-encoding-mapping>
    </locale-encoding-mapping-list>
    圖4-23 locale-encoding-mapping-list元素結構
     
    locale-encoding-mapping-list元素結構

 


作者:Lucky_Micky
鏈接:https://www.jianshu.com/p/2c065908165b
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM