JAVA流通橋

          JAVA啟發者

          統計

          留言簿(3)

          AJAX相關網址

          Eclipse相關網址

          Hibernate

          java相關網址

          LINUX相關網址

          webwork相關網址

          友好鏈接

          閱讀排行榜

          評論排行榜

          Servlet2.3中文文檔(第11,12,13章)

                                                            第十一章 請求到servlet的映射
          11.1 URI的使用
          web容器根據客戶端的請求決定要調用的資源。
          URL路徑映射規則是第一個匹配成功就不再匹配了。
          1)引擎將盡力為每一個請求一個servlet的路徑匹配一個servlet
          2)引擎將遞歸的匹配最長的路徑前綴(在一個目錄樹中)
          3)如果在URL路徑中的最后一節有擴展名(例如:.jsp),則servlet引擎將會匹配一個適當的servlet獲
          取請求對象
          4)如果沒有一個servlet能夠匹配請求,引擎將用一個適當的資源來處理該請求。如:在應用中配置了
          默認的servlet,就會被用來處理匹配不到資源的請求。
          11.2 匹配規則
          在web應用描述文件中,匹配的定義如下:
          .以'/'開始,以'/*'為結尾的字符串,用作路徑匹配
          .以'*.'開始的字符串,用作擴展名匹配
          .包含'/'字符串,定義一個默認的servlet。如匹配的servlet路徑是請求URI路徑的最小上下文路徑,路經
          的info為空。
          .其它的字符串用作精確的匹配。
          11.2.1 絕對匹配
          servlet引擎能夠匹配任何精確的資源,如后綴為*.jsp的匹配,引擎中有JSP引擎的話,就會把所有的JSP
          頁面和與之對象的資源相匹配。
          11.2.2 匹配的例子:
          path pattern servlet
          /foo/bar/* servlet1
          /baz/* servlet2
          /catalog servlet3
          *.bop servlet4
          incoming path servlet handling request
          /foo/bar/index.html servlet1
          /foo/bar/index.bop servlet1
          /baz servlet2
          /baz/index.html servlet2
          /catalog servlet3
          /catalog/racecar.bop servlet4
          /index.bop servlet4
          第十二章 安全
          12.1介紹
          web應用的資源能夠被很多的用戶訪問,這些資源經常沒有保護的暴露在網絡中,因此一個穩定的web
          應用需要一個安全的環境。
          提高安全性有以下的幾個方面:
          .認證:訪問一個實例前需要一個特殊的ID進行授權認證后才能訪問該實例
          .資源的訪問控制:一些機密資源或局部資源只限制給某些用戶或程序使用。
          .數據完整性:在傳輸過程中數據不能被意外的改變。
          .機密性:確定信息只能被授權過的用戶使用。
          12.2 公共安全
          安全性聲明是指表明應用是有安全結構的;包括權限、訪問控制、認證。在web應用中部署描述是安全
          聲明的主要工具。
          開發者應該為應用運行時配一個邏輯安全策略,在運行時中,servlet引擎用這個安全策略去驗證授權請
          求。
          安全模塊應該適用web應用的靜態內容,當servlet用RequestDispatcher調用一個靜態資源或servlet用
          forward或include,時安全模塊不適用。
          12.3 程序級安全
          當應用的安全模塊不能充分的表明安全時程序安全就可以被使用。
          程序安全有以下部分組成:
          HttpServletRequest接口:
          .getRemoteUser
          .isUserInRole
          .getUserPrincipal
          getRemoteUser方法返回客戶端用戶的名稱,用于授權。
          isUserInRole方法判斷遠程用戶是否在一個安全的角色內。
          getUserPrincipal方法返回一個java.security.Principal對象,表明當前用戶的主要名稱。這個API允許
          servlet根據這個信息處理一些業務邏輯。
          如果用戶沒有授權,getRemoteUser返回null,isUserInRole返回false,getUserPrincipal返回null。
          isUserInRole以一個role-name為參數。一個security-role-ref元素為在部署描述文件中定義,role-name
          子元素包含角色名稱。Security-role包含一個子元素role-link,role-link的value值是客戶端用戶將匹配的
          安全角色。當用isUserInRole時引擎將調用security-role-ref到security-role的匹配。
          舉個例子:
          <security-role-ref>
          <role-name>FOO</role-name>
          <role-link>manager</role-link>
          </security-role-ref>
          當一個用戶屬于“manager”角色是調用isUsesrInRole("FOO")返回true
          如果匹配一個security-role元素的security-role-ref沒有被定義,引擎必須找出一個與security-role
          列表不同的roel-name元素作為web應用默認的安全角色。但默認的安全角色限制了變換角色名
          稱不需要重新編譯的機動性。
          12.4 角色
          一個安全角色是一組用戶的邏輯名稱。當應用發布時,角色就部署在web應用的運行時環境中
          了。在基于安全屬性的請求到來時,servlet引擎就會執行公共安全或程序級安全。安全請求在以
          下的一些情況中會產生:
          1)開發者給用戶群配置了一個安全角色。
          2)開發者把一個安全角色配置給一個安全域中的一個主要名稱。
          12.5 驗證
          web客戶端可以用以下的一些機制驗證用戶:
          .HTTP Basic Authentication
          .HTTP Digest Authentication
          .HTTPS Client Authentication
          .Form Based Authentication
          12.5.1 HTTP Basic Authentication
          HTTP Basic Authentication是基于用戶名和密碼的驗證機制,是在HTTP/1.0規范中定義的。web
          服務要求客戶端驗證用戶,web服務用一個realm字符串作為請求的一部分,用戶通過這個realm
          字符串被驗證。realm字符串不會和任何安全域相關聯。客戶端獲得用戶名稱和密碼發送到服務
          端。然后服務端用一個特殊的realm去驗證該用戶。
          Basic Authentication 不是安全的驗證協議。用戶的密碼是用base64編碼的,服務端是不能夠識
          別的。一些附加的安全措施可以被使用,這些協議有:HTTPS安全傳輸協議或網絡安全標準(如
          IPSEC協議、VPN策略)。
          12.5.2 HTTP Digest Authentication
          和HTTP Basic Authentication一樣,HTTP Digest Authentication 也是驗證用戶名和密碼的。然而
          這種驗證是把密碼加密傳輸的,要比Basic Authentication的base64編碼要安全的多。Digest
          Authentication 沒有被廣泛的運用,建議servlet引擎支持這種驗證,但不是必須的。
          12.5.3 Form Based Authentication
          web應用部署描述文件包含登陸表單和錯誤頁面。登陸表單必須包含用戶名和用戶密碼字段,這
          兩個字段必須以j_username和j_password命名。當一個用戶要訪問一個被保護的資源時,引擎就
          會驗證該用戶信息,如果該用戶驗證通過就會調用保護的資源,如果沒有驗證通過,以下的步驟
          就會發生:
          1)登陸表單被送到客戶端,啟動這個驗證的URL路徑將被引擎保存。
          2)用戶被要求填寫用戶名和密碼
          3)客戶端重新post表單到服務端
          4)引擎嘗試著重新去驗證該用戶的信息
          5)如果驗證有失敗,響應被設置為401的錯誤頁面將被返回
          6)如果驗證成功,如果該訪問的資源在一個授權角色中,將進一步驗證。
          7)如果用戶是授權用戶,客戶端將用保存的URL路徑重新定向到訪問的資源。
          發送到驗證失敗的用戶的錯誤頁面包含了失敗的信息。
          Form Based Authentication 和 Basic Authentication 有一樣的弊端,密碼是用簡單的文本傳輸
          的,不能夠被服務端驗證。附加的一些協議可以增強這部分功能。如HTTPS傳輸協議,或網路安
          全標準(如IPSEC協議或VPN策略)。
          12.5.3.1 登陸表單的一些注意事項
          登陸的表單和跟蹤session的URL實現上是有限制的。
          登陸表單只能在cookies或SSL跟蹤session的方式下才能使用。
          登陸表單要進行驗證的話,表單的action就必須為j_security_check。這個約束使得登陸表單訪問
          的資源沒有問題,也避免了把表單外的字段提交進請求中。
          在HTML頁面中登陸表單的一個例子如下:
          <form method="POST" action="j_security_check" >
          <input type="text" name="j_username">
          <input type="password" name="j_password">
          </form>
          當登陸表單因為HTTP請求被調用時,原始的請求參數必須被引擎存儲,在驗證成功后重新定向
          請求的資源。
          如果用登陸表單的用戶被驗證通過,創建了一個session,當session超時或調用了失效方法,使得
          登陸者推出了。后續來的請求就必須重新對用戶進行驗證。
          12.5.4 HTTPS Client Authentication
          用HTTPS驗證用戶是很強的驗證機制。這個驗證需要用戶擁有一個公共鑰匙(PKC)。servlet引
          擎不需要支持HTTPS協議。
          12.6 驗證信息的跟蹤
          基本的身份驗證實在運行時環境中進行的:
          1)確認一個登陸驗證機制或策略已經配置在web應用中。
          2)把需驗證的信息發往一個容器中的所有應用。
          3)當一個安全域被刪除時,用戶的請求就需要重新驗證。

          第十三章 部署描述文件
          13.1 部署描述元素
          部署描述文件中的所有元素都要被所有的servlet引擎支持。配置類型有下面的幾種:
          .ServletContext Init Parameteres
          .Session Configuration
          .Servlet Declaration
          .Servlet Mapping
          .Application Lifecycle Listener classes
          .Filter Dfinitions and Filter Mappings
          .MIME Type Mappings
          .Error Pages
          servlet 引擎是實現了J2EE規范的一部分的時候,安全信息才有必要在部署描述文件中定義。
          部署描述文件不光光只支持servlet規范,在部署描述文件為了適應web應用的需求增加了其他的部屬描述元素。如:
          .taglib
          .用于查找JNDI對象的一些元素(env-entry,ejb-ref,ejb-local-ref,resource-ref,resource-env-ref)
           
          13.2 處理部屬描述文件的規則
          本節主要講一下web容器訪問部屬描述文件的幾種規則。
          .web容器應該忽略部屬描述文件中數據的開始空字符和最后的空字符。
          .web容器應該有一個廣泛的選項用戶檢查web應用的有效性。如檢查web應用是否包含部署描述文件,部屬描述文件結構是否正確。部署描述中應該有語義檢查,如:安全規則有同樣的名字,應該報錯等等。
          .部署描述中的URI是假定在URL解碼表單中的
          .引擎必須正確解釋部屬文件中的路徑,如:路徑'/a/../b'必須解釋為'/b',因為路徑是以'..'開始的路徑在部署描述中是無效的。
          .調用資源的URI與WAR的根目錄關聯,以‘/’開頭
          .在一個元素中,如果它的顯示值是一個列表,則這個列表將可能會報錯
          13.2.1 DOCTYPE
          所有2.3版本的部屬描述文件的DOCTYPE必須是:
          <!DOCTYPE web-app PUBLIC "-//sun Microsystems, inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
          13.3 DTD
          web應用的部署描述文件DTD如下:
          <!--
           web-app 元素是部署描述的根元素
          -->
          <!ELEMENT web-app(icon?,display-name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)>
          <!--
          Auth-constraint 元素定義了可以訪問資源列表的用戶角色。Role-name可以作為security-role元素的子元素出現也可以以role-name"*"出現表示所有的角色,如果*和role-name都出現了,引擎將解釋這個資源可以被所有角色使用。如果沒有定義角色,用戶就不能夠訪問定義的資源。
          Used in :security-constraint
          -->
          <!ELEMENT auth-constraint (description?,role-name*)>
          <!--
          Auth-method 元素是配置web應用的安全機制的,是訪問被保護資源的先決條件。用戶必須用這個驗證機制驗證。這個元素Value值有“BASIC”,“DIGEST”,“FORM”或“CLIENT-CERT”
          Userd in : login-config
          -->
          <!ELEMENT auth-method(#PCDATA)>
          <!--
          Context-param元素包含了servlet context初始化的參數
          Used in :web-app
          -->
          <!ELEMENT context-param(param-name,param-value,description?)>
          <!--
          description元素用于對父元素進行說明,description元素可以包含任何說明信息。當父元素被工具訪問時這些說明就會顯示。
          Used in :auth-contraint,context-param,ejb-local-ref,ejb-ref,env-entry,filter,init-param,resource-env-ref,resource-ref,ren-as,security-role,security-role-ref,servlet,user-data-constraint,web-app,web-resource-collection
          -->
          <!ELEMENT description(#PCDATA)>
          <!--
          Display-name元素是一個簡稱,被調用的工具顯示,這個簡稱不必是唯一的
          Used in: filter,security-constraint,sevlet,web-app
          例如:
          <display-name>Employee self Service </display-name>
          -->
          <!ELEMENT display-name(#PCDATA)>
          <!--
          Distributable 元素,這個元素出現在部署描述中,說明該應用可以部署在分布式servlet引擎中。
          Used in :web-app
          -->
          <!ELEMENT distributable EMPTY>
          <!--
          Ejb-link 元素用在ejb-ref 或ejb-local-ref元素中,去指定EJB關聯的一個enterprise bean.
          Ejb-link中的名字是一個關聯著enterprise bean的路徑 或者是目標bean+一個以“#”開頭的路徑。一個ejb-name可以對應多個enterprise beans。
          Used in : ejb-local-ref,ejb-ref
          例如:
          <ejb-link>EmployeeRecord</ejb-link>
          <ejb-link>../products/product.jar#ProductEJB</ejb-link>
          -->
          <!ELEMENT ejb-link (#PCDAATA)>
          <!--
           ejb-local-ref 元素用于描述本地enterprise bean的home接口,描述由下面的部分組成:
          一個可選的描述
          enterprise bean 相關的EJB名稱
          Enterprise bean 的類型
          Enterprise bean 的本地接口
          可選的ejb-link信息
          Used in: web-app
          -->
          <!ELEMENT ejb-local-ref (description?,ejb-ref-name,ejb-ref-type,local-home,local,ejb-link?)>
          <!--
          Ejb-ref 元素用于描述enterprise bean的home接口。描述由下面組成:
          一個可選描述
          enterprise bean 相關的EJB名稱
          Enterprise bean 的類型
          Enterprise bean 的本地接口
          可選的ejb-link信息
          Used in:web-app
          -->
          <!ELEMENT ejb-ref(description?,ejb-ref-name,ejb-ref,type,home,remote,ejb-link?)>
          <!--
          Ejb-ref-name 元素包含一個EJB的名字,這個名字必須是唯一的;這個EJB是web應用環境和關聯的java:comp/env context的入口。建議名字以“ejb/”開頭。
          Used in : ejb-local-ref,ejb-ref
          例如:
          <ejb-ref-name>ejb/Payroll</ejb-ref-name>
          -->
          <!ELEMENT ejb-ref-name(#PCDATA)>
          <!--
          Ejb-ref-type 元素包含enterprise bean的類型。Ejb-ref-type元素必須是下面的一種:
          <ejb-ref-type>Entity</ejb-ref-type>
          <ejb-ref-type>Session</ejb-ref-type>
          Used in :ejb-local-ref,ejb-ref
          -->
          <!ELEMENT ejb-ref-type(#PCDATA)>
          <!--
          Env-entry 元素包含了web應用的環境入口的描述。描述包含一個可選的描述,一個環境入口的名稱,一個可選的value,如果value沒有被指定,在部署中必須提供。
          -->
          <!ELEMENT env-entry (description?,env-entry-name,env-entry-value?,env-entry-type)>
          <!--
           env-entry-name元素包含了web應用環境入口的名稱,這個名稱是一個java:comp/env context關聯的JNDI名稱。名字必須是唯一的。
          例如:
          <env-entry-name>minAmount</env-entry-name>
          Used in: env-entry
          -->
          <!ELEMENT env-entry-name(#PCDATA)>
          <!--
          Env-entry-type 元素包含環境入口值的fully-qualified java類型,這是web應用程序期望有的。
          Env-enry-type合法的類型如下:
          Java.lang.Boolean
          Java.lang.Byte
          Java.lang.Character
          Java.lang.String
          Java.lang.Short
          Java.lang.Integer
          Java.lang.Long
          Java.lang.Float
          Java.lang.Double
          Used in : env-entry
          -->
          <!ELEMENT env-entry-type(#PCDATA)>
          <!--
          Env-entry-value元素包含了web應用環境入口的值,值必須是一個字符串。
          例如:
          <env-entry-value>100.00</env-entry-value>
          Used in : env-entry
          <!ELEMENT env-entry-value(#PCDATA)>
           
          <!--
          Error-code元素包含HTTP的一個錯誤代碼,如:404
          Used in : error-page
          -->
          <!ELEMENT error-code(#PCDATA)>
          <!--
           error-page 元素包含一個錯誤代碼映射或錯誤類型資源的一個路徑
          Used in : web-app
          -->
          <!ELEMENT error-page((error-code | exception-type),location)>
          <!--
           exception-type 包含一個java exception 類型的類名稱
          Used in : error-page
          -->
          <!ELEMENT exception-type(#PCDATA)>
          <!--
           extension元素包含一個擴展名。如“txt”
          Used in : mine-mapping
          -->
          <!ELEMENT extension (#PCDATA)>
          <!--
           filter被filter-mapping中的一個servlet或一個URL通過filter-name映射。filter在運行時能夠通過FilterConfig接口訪問初始化的參數。
          Used in : web-app
          -->
          <!ELEMENT filter (icon?,filter-name,display-name?,description?,filter-class,init-param*)>
           
          <!--
           filter-class元素指明filter類.
          Used in :filter
          -->
          <!ELEMENT filtere-class(#PCDATA)>
          <!--
           引擎用filter-mapping去匹配請求的URI以及匹配的順序,引擎在把匹配的URI匹配一個servlet。
          Used in : web-app
          -->
          <!ELEMENT filter-mapping (Filter-name,(url-pattern | servlet-name))>
          <!--
           filtere-name元素表明了一個filter的邏輯名稱用于匹配用的。邏輯名稱必須唯一
          Used in : filter,filere-mapping
          -->
          <!ELEMENT filter-name (#PCDATA)>
          <!--
           form-error-page元素定義了當登陸失敗是調用的頁面。這個路徑以“/”開始
          Used in: form-login-config
          -->
          <!ELEMENT form-error-page (#PCDATA)>
          <!--
           form-login-config元素指定了登陸的錯誤頁面,如果form不需要驗證,這個元素將被忽略。
          Used in : login-config
          -->
          <!ELEMENT form-login-cofig (form-login-page,form-error-page)>
          <!--
           form-login-page 元素定義了登陸的頁面。路徑以“/”開頭
           used in :form-login-config
          -->
          <!ELEMENT form-login-page (#PCDATA)>
          <!--
           home元素包含了enterprise bean的home接口的名稱
          Used in :ejb-ref
          例如:
          <home>com.aardvark.payroll.PayrollHome</home>
          <!ELEMENT home (#PCDATA)>
          <!--
           http-method 包含了HTTP 方法(GET | POST |...)
          Used in:web-resource-collection
          -->
          <!ELEMENT http-method (#PCDATA)>
           
          <!--
           icon 元素包含small-icon 和large-icon元素,指明一個gif或jpeg的圖標名稱
          Used in : filter,servlet,web-app
          -->
          <!ELEMENT icon (small-icon?,large-icon?)>
           
          <!--
           init-param元素包含了name/value的servlet的初始化參數
          Used in : filter,servlet
          -->
          <!ELEMETN init-param (param-name,param-value,description?)>
          <!--
           jsp-file 元素 包含了一個以“/”開頭JSP文件的全名。
          Used in : servlet
          -->
          <!ELEMENT jsp-file (#PCDATA)>
          <!--
           large-icon 元素包含一個32*32的圖標文件名稱。圖片可以是jpeg或gif。
           used in :icon
          例如:
          <large-icon>employee-service-icon32*32.jsp</large-icon>
          -->
          <!ELEMENT large-icon (#PCDATA)>
           
          <!--
           listener 元素對應著listener bean
          Used in : web-app
          -->
          <!ELEMENT listener (listener-class)>
          <!--
           listener-class 元素,元素值是監聽類的類名。
          Used in : listener
          -->
          <!ELEMENT listener-class (#PCDATA)>
          <!--
           load-on-startup 元素指明了這個servlet在web啟動時是否必須裝入(調用servlet的init()方法)。這個內容是可選的,但有值時必須是個整數,如果是負數,引擎可以選擇在任何時候裝載該servlet,如果是整數或0,引擎就必須在web應用啟動時裝入該servlet。數字越小越被優先裝入。如果值一樣,引擎可以自由選擇裝入的順序。
          Used in : servlet
          -->
          <!ELEMENT load-on-startup (#PCDATA)>
          <!--
           local元素包含了enterprise bean的local接口
          Used in : ejb-local-ref
          -->
          <!ELEMENT local (#PCDATA)>
          <!--
           local-home元素包含了enterprise bean的本地home接口
          Used in : ejb-local-ref
          -->
          <!ELEMENT local-home (#PCDATA)>
           
          <!--
           location 元素包含與web應用根目錄關聯的資源,值必須以‘/’開頭
          Used in : error-page
          -->
          <!ELEMENT location (#PCDATA)>
          <!--
           login-config 元素用于配置驗證的方法的。
          Used in :web-app
          -->
          <!ELEMENT login-conifg (auth-method?,realm-name?,form-login-config?)>
           
          <!--
           mime-mapping 元素定義了擴展名和mime類型的映射關系。
          Used in :web-app
          -->
          <!ELEMENT mime-mapping (extension,mime-type)>
           
          <!--
           mime-type 元素包含了mime類型,如“text/plain”
          Used in : mime-mapping
          -->
          <!ELEMENT mime-type (#PCDATA)>
          <!--
           param-name 元素包含參數的名稱,參數名必須唯一。
          Used in : context-param,init-param
          -->
          <!ELEMENT param-name (#PCDATA)>
           
          <!--
           param-value元素包含了參數的值
          Used in : context-param,init-param
          -->
          <!ELEMENT param-value (#PCDATA)>
           
          <!--
           realm-name 元素用于HTTP Basic 驗證中
          Used in : login-config
          -->
          <!ELEMENT realm-name (#PCDATA)>
           
          <!--
           remote 元素包含了enterprise bean 的remote接口
          Used in : ejb-ref
          例如:
           <remote>com.wombat.empl.EmployeeService</remote>
          -->
          <!ELEMENT remote (#PCDATA)>
           
          <!--
           res-auth 元素表明是web應用代碼控制資源,還是引擎控制資源。該元素的值只能是以下的一種
              <res-auth>Application</res-auth>
              <res-auth>Container</res-auth>
          Used in : resource-ref
          -->
          <!ELEMENT res-auth (#PCDATA)>
           
          <!--
           res-ref-name 元素指明了資源管理器(連接工廠)的名稱,這個名稱是和java:comp/env cocntext關聯的JNDI名稱。該名稱必須是唯一的。
          Used in:resource-ref
          -->
          <!ELEMENT res-ref-name (#PCDATA)>
           
          <!--
           res-sharing-scope 元素表明了從資源管理器連接工廠獲得的連接是否可以被共享。值必須是下面的一種:
           <res-sharing-scope>Shareable</res-sharing-scope>
           <res-sharing-scope>Unshareable</res-sharing-scope>
          默認的值是Shareable
          Used in : resource-ref
          <!ELEMENT ref-sharing-scope (#PCDATA)>
           
          <!--
           res-type 元素描述了資源的數據類型。
          Used in : resource-ref
          -->
          <!ELEMENT res-type (#PCDATA)>
           
          <!--
           resource-env-ref 元素描述了與web應用管理對象相關的資源。包含一個可選的描述,一個資源環境名稱,一個環境資源類型。
          Used in :web-app
          例如:
          <resource-env-ref>
           <resource-env-ref-name>jms/StockQueue</resource-env-ref-name>
           <resource-env-type>javax.jms/Queue</resource-env-ref-type>
          </resource-env-ref>
          -->
          <!ELEMENT resource-env-ref (description?,resource-env-ref-name,resource-env-ref-type)>
           
          <!--
           resource-env-ref-name元素一定一個環境資源名稱,這個名字是與java:comp/env context關聯的JNDI名稱,必須以唯一的。
          Used in : resource-env-ref
          -->
          <!ELEMENT resource-env-ref-name (#PCDATA)>
           
          <!--
           resource-env-ref-type元素定義了環境資源的類型,是一個java類或接口的全名。
          Used in: resource-env-ref
          -->
          <!ELEMENT resource-env-ref-type (#PCDATA)>
           
          <!--
             resource-ref 元素包含web應用涉及的外部資源的描述。它有一個可選的描述,一個資源管理連接工廠的名稱,一個資源管理連接工廠的類型id,一個驗證類型(Application 或 Container),和一個可選的連接共享的選項(Shareale 或 Unshareable)
          Used in : web-app
          例如:
          <resource-ref>
          <res-ref-name>jdbc/EmployeeApppDB</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
          <res-sharing-scope>Shareable</res-sharing-scope>
          </resource-ref>
          -->
          <!ELEMENT resource-ref (description?,res-ref-name,res-type,res-auth,res-sharing-scope?)>
           
          <!--
           role-link 元素是與安全角色相關的。Role-link元素必須包含一個在security-role元素中定義的安全角色的名稱。
          Used in: security-role-ref
          -->
          <!ELEMENT role-link (#PCDATA)>
           
          <!--
           role-name 元素包含一個安全角色的名稱,名稱必須遵守NMTOKEN規則。
          Used in : auth-constraint,run-as,security-role,security-role-ref
          -->
          <!ELEMENT role-name (#PCDATA)>
           
          <!--
           run-as 元素包含一個可選的描述,和一個安全角色的名稱。
          Used in : servlet
          -->
          <!ELEMENT run-as (description?,role-name)>
           
          <!--
           security-constraint元素用于安全約束與一個或多個web資源相關聯。
          Used in :web-app
          -->
          <!ELEMENT security-constraint (display-name?,web-resource-collection+,auth-constraint?,user-data-constraint?)>
           
          <!--
           security-role元素包含安全角色的定義,它由一個可選的安全角色的描述,一個安全角色名稱組成。
          Used in : web-app
          例如:
          <security-role>
          <description>
             this role includes all employees who are authorized to access the employee service application.
          </description>
          <role-name>employee</role-name>
          </security-role>
          -->
          <!ELEMENT security-role (description?,role-name)>
           
          <!--
           security-role-ref 元素包含一個可選的描述,一個調用代碼中的安全角色名稱,一個可選的安全角色連接。如果安全角色沒有被指定,開發者必須選擇一個適當的安全角色。這個role-name元素的值必須是EJBConteext.isCallerInRole(String roleName)或HttpServletRequest.isUserInRole(String role)中的參數。
          Used in :servlet
          -->
          <!ELEMENT security-role-ref (description?,role-name,role-link?)>
           
          <!--
           servlet 元素包含一個servlet的數據描述。如果load-on-startup元素中指定了一個jsp文件,該JSP將被裝入。
          Used in : web-app
          <!ELEMENT servlet (icon?,servlet-name,display-name?,description?,(servlet-class|jsp-file),init-param*,load-on-startup?,run-as?,security-role-ref*)>
           
          <!--
           servlet-class元素包含一個全名的servlet類名稱。
          Used in : servlet
          -->
          <!ELEMENT servlet-class (#PCDATA)>
           
          <!--
           servlet-mapping元素定義了一個servlet和url的關聯
          Used in : web-app
          -->
          <!ELEMENT servlet-mapping (servlet-name,url-pattern)>
           
          <!--
           servlet-name元素包含servlet的名稱,名稱是唯一的。
          Used in : filter-mapping,servlet,servlet-mapping
          -->
          <!ELEMENT servlet-name (#PCDATA)>
           
          <!--
           session-config 元素定義了session參數
          Used in : web-app
          -->
          <!ELEMENT session-config (session-timeout?)>
           
          <!--
           session-timeout 元素定義了一個默認的會話超時的時間,使用于web應用中的所有會話。時間必須是用分鐘的數值表示。
          如果timeout是0或負數,引擎將確保會話永遠不會超時。
          Used in : session-config
          -->
          <!ELEMENT session-timeout (#PCDATA)>
           
          <!--
           small-icon 元素包含一個16*16圖標文件的名稱。
          Used in : icon
          例如:
           <small-icon>employee-service-icon16*16.jpg</small-icon>
          -->
          <!ELEMENT small-icon (#pCDATA)>
           
           taglib 元素用于描述JSP tag 庫。
          Used in : web-app
          -->
          <!ELEMENT taglib (taglib-uri,taglib-location)>
           
          <!--
           taglib-location 元素包含一個資源定位,為tag庫找到tag描述文件
          Used in:taglib
          -->
          <!ELEMENT taglib-location (#PCDATA)>
           
          <!--
           taglib-uri元素描述了一個URI
          Used in: taglib
          -->
          <!ELEMENT taglib-uri (#PCDATA)>
           
          <!--
           transport-guarantee元素指定了客戶端和服務端的通信關系,有NONE,INTEGRAL,CONFIDENTIAL。NONE表示著應用不需要任何傳輸保障。INTEGRAL表示著在數據在客戶端到服務端的過程中不能有任何改變。CONFIDENTIAL表示在傳輸過程中防止其他傳輸內容的干擾。在使用SSl時常用的就INTEGRAL或CONFIDENTIL。
          Used in : user-data-constraint
          <!ELEMENT transport-guarantee (#PCDATA)>
           
          <!--
           url-pattern 元素包含映射的url。必須符合11.2章中servlet API描述的規則。
          Used in:filter-mapping,servlet-mapping,web-resource-collection
          -->
          <!ELEMENT url-pattern (#PCDATA)>
           
          <!--
           user-data-constraint元素用于表明數據在客戶端到服務器端是怎么保護的。
          Used in :security-constraint
          -->
          <!ELEMENT user-data-constraint (description?,transport-guarantee)>
           
          <!--
           web-resource-collection元素用于web應用中安全限制的資源被那些方法使用,如果沒有指定,就可以被web用的所有方法調用。
          Used in:security-constraint
          -->
          <!ELEMENT web-resource-collection (web-resource-name,description?,url-pattern*,http-method*)>
           
          <!--
           web-resource-name 包含一個web資源集合的名稱
          Used in:web-resource-collection
          -->
          <!ELEMENT web-resource-name (#PCDATA)>
           
          <!--
           welcome-file元素包含了web應用中默認的訪問文件,如index.html
          Used in:welcome-file-list
          -->
          <!ELEMENT welcome-file (#PCDATA)>
           
          <!--
           welcome-file-list包含welcome-file的列表
          Used in:web-app
          -->
          <!ELEMENT welcome-file-list (welcome-file+)>
          <!--
           ID機制可以增加額外的部署信息,不允許加一個非標準的元素到標準的部署描述中
          -->
          <!ATTLIST auth-constraint id ID #IMPLIED>
          <!ATTLIST auth-method id ID #IMPLIED>
          <!ATTLIST context-param id ID #IMPLIED>
          <!ATTLIST description id ID #IMPLIED>
          <!ATTLIST display-name id ID #IMPLIED>
          <!ATTLIST ejb-link id ID #IMPLIED>
          <!ATTLIST ejb-local-ref id ID #IMPLIED>
          <!ATTLIST ejb-ref  id ID #IMPLIED>
          <!ATTLIST ejb-ref-name id ID #IMPLIED>
          <!ATTLIST ejb-ref-type id ID #IMPLIED>
          <!ATTLIST env-entry id ID #IMPLIED>
          <!ATTLIST env-entry-name id ID #IMPLIED>
          <!ATTLIST env-entry-type id ID #IMPLIED>
          <!ATTLIST env-enry-value id ID #IMPLIED>
          <!ATTLIST error-code id ID #IMPLIED>
          <!ATTLIST error-page id ID #IMPLIED>
          <!ATTLIST exception-type id ID #IMPLIED>
          <!ATTLIST extension id ID #IMPLIED>
          <!ATTLIST filter id ID #IMPLIED>
          <!ATTLIST filter-class id ID #IMPLIED>
          <!ATTLIST filtere-mapping id ID #IMPLIED>
          <!ATTLIST filter-name id ID #IMPLIED>
          <!ATTLIST form-error-page id ID #IMPLIED>
          <!ATTLIST form-login-config id ID #IMPLIED>
          <!ATTLIST form-login-page id ID #IMPLIED>
          <!ATTLIST home id ID #IMPLIED>
          <!ATTLIST http-method id ID #IMPLIED>
          <!ATTLIST icon id ID #IMPLIED>
          <!ATTLIST init-param id ID #IMPLIED>
          <!ATTLIST jsp-file id ID #IMPLIED>
          <!ATTLIST large-icon id ID #IMPLIED>
          <!ATTLIST listener id ID #IMPLIED>
          <!ATTLIST listener-class id ID #IMPLIED>
          <!ATTLIST load-on-startup id ID #IMPLIED>
          <!ATTLIST local id ID #IMPLIED>
          <!ATTLIST local-home id ID #IMPLIED>
          <!ATTLIST location id ID #IMPLIED>
          <!ATTLIST login-config id ID #IMPLIED>
          <!ATTLIST mime-mapping id ID #IMPLIED>
          <!ATTLIST mime-type id ID #IMPLIED>
          <!ATTLIST param-name id ID #IMPLIED>
          <!ATTLIST param-value id ID #IMPLIED>
          <!ATTLIST realm-name id ID #IMPLIED>
          <!ATTLIST remote id ID #IMPLIED>
          <!ATTLIST res-auth id ID #IMPLIED>
          <!ATTLIST res-ref-name id ID #IMPLIED>
          <!ATTLIST res-sharing-scope id ID #IMPLIED>
          <!ATTLIST res-type id ID #IMPLIED>
          <!ATTLIST resource-env-ref id ID #IMPLIED>
          <!ATTLIST resource-env-ref-name id ID #IMPLIED>
          <!ATTLIST resource-env-ref-type id ID #IMPLIED>
          <!ATTLIST resource-ref id ID #IMPLIED>
          <!ATTLIST role-link id ID #IMPLIED>
          <!ATTLIST role-name id ID #IMPLIED>
          <!ATTLIST run-as id ID #IMPLIED>
          <!ATTLIST security-constraint id ID #IMPLIED>
          <!ATTLIST security-role id ID #IMPLIED>
          <!ATTLIST security-role-ref id ID #IMPLIED>
          <!ATTLIST sevlet id ID #IMPLIED>
          <!ATTLIST servlet-class id ID #IMPLIED>
          <!ATTLIST servlet-mapping id ID #IMPLIED>
          <!ATTLIST servlet-name id ID #IMPLIED>
          <!ATTLIST session-config id ID #IMPLIED>
          <!ATTLIST session-timeout id ID #IMPLIED>
          <!ATTLIST small-icon id ID #IMPLIED>
          <!ATTLIST taglib id ID #IMPLIED>
          <!ATTLIST taglib-location id ID #IMPLIED>
          <!ATTLIST taglib-uri id ID #IMPLIED>
          <!ATTLIST transport-guarantee id ID #IMPLIED>
          <!ATTLIST rul-pattern id ID #IMPLIED>
          <!ATTLIST user-data-constraint id ID #IMPLIED>
          <!ATTLIST web-app id ID #IMPLIED>
          <!ATTLIST web-resource-collection id ID #IMPLIED>
          <!ATTLIST web-resource-name id ID #IMPLIED>
          <!ATTLIST welcome-file id ID #IMPLIED>
          <!ATTLIST welcome-file-list id ID #IMPLIED>
           
          13.4 例子
          13.4.1 基本的例子
          <!DOCTYPE web-app PUBLIC "-//Sun Mmicrosystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
          <web-app>
              <display-name>A Simple Application</display-name>
              <context-param>
                  <param-name>Webmaster</param-name>
                  <param-value>webmaster@mycorp.com</param-value>
             </context-param>
              <servlet>
                  <servlet-name>catalog</servlet-name>
                  <serrvlet-class>com.mycorp.Catalogservlet</servlet-class>
                  <init-param>
                      <param-name>catalog</param-name>
                      <param-value>Spring</param-value>
                  </init-param>
              </servlet>
              <servlet-mapping>
                  <servlet-name>catalog</servlet-name>
                  <url-pattern>/catalog/*</url-pattern>
              </servlet-mapping>
              <session-config>
                  <session-timeout>30</session-timeout>
              </session-config>
              <mime-mapping>
                  <extension>pdf</extension>
                  <mime-type>application/pdf</mime-type>
              </mime-mapping>
              <welcome-file-list>
                  <welcome-file>index.jsp</welcome-file>
                  <welcome-file>index.html</welcome-file>
                  <welcome-file>index.htm</welcome-file>
              </welcome-file-list>
              <error-page>
                  <error-code>404</error-code>
                  <location>/404.html</location>
              <error-page>
          </web-app>
           
          13.4.2 一個安全的例子
          <!DOCTYPE web-app PUBLIC "-//Sun Mmicrosystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
          <web-app>
              <display-name>A Secure Application</display-name>
              <security-role>
                  <role-name>manager</role-name>
              </security-role>
              <servlet>
                  <servlet-name>catalog</servlet-name>
                  <servlet-class>com.mycorp.CatalogServlet</servlet-class>
                  <init-param>
                      <param-name>catalog</param-name>
                      <param-value>Spring</param-value>
                  </init-param>
                  <security-role-ref>
                       <role-name>MGR</role-name>
                       <!-- 在代碼中用的角色名稱-->
                       <role-link>manager</role-link>
                  </security-role-ref>
              </servlet>
              <servlet-mapping>
                   <servlet-name>catalog</servlet-name>
                   <url-pattern>/catalog/*</url-pattern>
              </servlet-mapping>
              <security-constraint>
                  <web-resource-collection>
                      <web-resource-name>SalesInfo</web-resource-name>
                      <url-pattern>/salesinfo/*</url-pattern>
                      <http-method>GET</http-method>
                      <http-method>POST</http-method>
                  </web-resource-collection>
                  <auth-constraint>
                      <role-name>manager</role-name>
                  </auth-constraint>
                  <user-data-constraint>
                      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
                  </user-data-constraint>
              </security-constraint>
          </web-app>
           
          結尾:
          servlet2.3到此就結束了,至于對接口類的解釋。這里就不給與了。有興趣的朋友可以down一個servlet2.3的源碼包自己研究研究。

          posted on 2007-08-20 17:52 朱巖 閱讀(379) 評論(0)  編輯  收藏 所屬分類: servlet文章

          主站蜘蛛池模板: 九江市| 三亚市| 玉溪市| 海林市| 凤阳县| 馆陶县| 安达市| 甘孜县| 龙南县| 庐江县| 鹿邑县| 石阡县| 绥滨县| 光山县| 舟山市| 吴忠市| 且末县| 怀柔区| 陆河县| 云霄县| 常州市| 石景山区| 武川县| 嘉义县| 陆河县| 林甸县| 北流市| 海门市| 贵港市| 望都县| 安陆市| 易门县| 文水县| 政和县| 天峻县| 甘南县| 伊金霍洛旗| 遵义县| 昌都县| 清涧县| 宝鸡市|