În specificația Servlet 3.0, elementele elementele <injection-target> ale unei referințe de resursă care este definită într-un fișier web-fragment.xml fișier sunt adăugate la fișierul web.xml părinte numai dacă definiția web.xml definiția referinței resursei cu același nume nu are elemente <injection-target>. Specificația Servlet 3.1 clarifică faptul că, pentru o resursă cu același nume, toate elementele elementele <injection-target> din descriptorii web-fragment.xml sunt adăugate la descriptorilor web.xml părinte a elementelor <injection-target>. Caracteristica Servlet 3.1 poate modifica comportamentul aplicației existente prin activarea unor ținte de injecție care erau anterior excluse din fișierul web.xml.
Această regulă marchează elementul <injection-target> din fișierul web-fragment.xml dacă fișierul web.xml conține un element <injection-target> în cadrul unui element <resource-ref> care este definit cu același același nume ca elementul <resource-ref> din fișierul web-fragment.xml.
Următoarele exemple demonstrează modificarea comportamentului când folosiţi o combinaţie dintre un fişier web.xml şi un fişier 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> Container < span class= "XmlElement" > < /res-auth> < /span> < span class= "XmlElement" > < res-sharing-scope> < /span> Shareable < 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> Container < span class= "XmlElement" > < /res-auth> < /span> < span class= "XmlElement" > < res-sharing-scope> < /span> Shareable < 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>
În Servlet 3.0 rezultatul combinat ignoră ţinta de injectare pentru 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> Container < span class= "XmlElement" > < /res-auth> < /span> < span class= "XmlElement" > < res-sharing-scope> < /span> Shareable < 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>
În Servlet 3.1 rezultatul combinat utilizează ţinta de injectare pentru 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>
Pentru informaţii suplimentare despre modificările de comportament ale Servlet 3.1, vedeţi resursa următoare: Modificări de comportament ale Servlet 3.1.