Servlet 3.0 스펙에서, web-fragment.xml 파일에 정의된 자원 참조의 <injection-target> 요소는 동일한 이름의 web.xml 자원 참조 정의에 <injection-target> 요소가 없는 경우에만 상위 web.xml 파일에 추가됩니다. Servlet 3.1 스펙은 동일한 이름의 자원 참조에서 web-fragment.xml 디스크립터의 모든 <injection-target> 요소가 <injection-target> 요소의 상위 web.xml 디스크립터 목록에 추가됨을 명시합니다. Servlet 3.1 기능은 이전에 web.xml 파일에서 제외되었던 인젝션 대상을 활성화하여 기존 애플리케이션 동작을 변경합니다.
이 규칙은 web.xml 파일 내에 web-fragment.xml 파일의 <resource-ref> 요소와 동일한 이름으로 정의된 <resource-ref> 요소 내에 <injection-target> 요소가 포함된 경우 web-fragment.xml 파일의 <injection-target> 요소에 플래그를 지정합니다.
다음 예제는 web.xml 파일과 web-fragment.xml 파일의 조합을 사용할 경우 동작 변경을 보여줍니다.
web.xml:
< span class= "XmlElement"> < resource-ref> < /span> < span class= "XmlElement"> < res-ref-name> < /span>ReferenceName< span class="XmlElement"> < /res - ref-name> < /span> < span class= "XmlElement"> < res-type> < /span>javax.sql.DataSource< span class="XmlElement"> < /res-type> < /span> < span class= "XmlElement"> < res-auth> < /span> 컨테이너 < span class="XmlElement"> < /res-auth> < /span> < span class= "XmlElement"> < res-sharing-scope> < /span> 공유 가능 < span class="XmlElement"> < /res - sharing-scope> < /span> < span class= "XmlElement"> < injection-target> < /span> < span class= "XmlElement"><injection-target-class>Class1 < /injection - target-class> < /span> < span class= "XmlElement"><injection-target-name>Resource1 < /injection - target-name> < /span> < span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>
web-fragment.xml:
< span class= "XmlElement"> < resource-ref> < /span> < span class= "XmlElement"> < res-ref-name> < /span>ReferenceName< span class="XmlElement"> < /res - ref-name> < /span> < span class= "XmlElement"> < res-type> < /span>javax.sql.DataSource< span class="XmlElement"> < /res-type> < /span> < span class= "XmlElement"> < res-auth> < /span> 컨테이너 < span class="XmlElement"> < /res-auth> < /span> < span class= "XmlElement"> < res-sharing-scope> < /span> 공유 가능 < span class="XmlElement"> < /res - sharing-scope> < /span> < span class= "XmlElement"> < injection-target> < /span> < span class= "XmlElement"><injection-target-class>Class2 < /injection - target-class> < /span> < span class= "XmlElement"><injection-target-name>Resource2 < /injection - target-name> < /span> < span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>
Servlet 3.0에서 결합 결과는 Class2의 인젝션 대상을 무시합니다.
< span class= "XmlElement"> < resource-ref> < /span> < span class= "XmlElement"> < res-ref-name> < /span>ReferenceName< span class="XmlElement"> < /res - ref-name> < /span> < span class= "XmlElement"> < res-type> < /span>javax.sql.DataSource< span class="XmlElement"> < /res-type> < /span> < span class= "XmlElement"> < res-auth> < /span> 컨테이너 < span class="XmlElement"> < /res-auth> < /span> < span class= "XmlElement"> < res-sharing-scope> < /span> 공유 가능 < span class="XmlElement"> < /res - sharing-scope> < /span> < span class= "XmlElement"> < injection-target> < /span> < span class= "XmlElement"><injection-target-class>Class1 < /injection - target-class> < /span> < span class= "XmlElement"><injection-target-name>Resource1 < /injection - target-name> < /span> < span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>
Servlet 3.1에서 결합된 결과는 Class2의 인젝션 대상을 사용합니다.
<resource-ref> <res-ref-name>ReferenceName</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> <injection-target> <injection-target-class>Class1</injection-target-class> <injection-target-name>Resource1</injection-target-name> </injection-target> <injection-target> <injection-target-class>Class2</injection-target-class> <injection-target-name>Resource2</injection-target-name> </injection-target> </resource-ref>
Servlet 3.1 동작 변경에 대한 자세한 정보는 다음 자원을 참조하십시오. Servlet 3.1 동작 변경사항.