web片段的概念
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
注解的引入使得web.xml變成可選的了。但是,我們還是可以使用web.xml。容器會根據(jù)web.xml中的metadata- complete元素的值來決定使用web.xml還是使用注解。如果該元素的值是true,那么容器不處理注解,web.xml是所有信息的來源。如果 該元素不存在或者其值不為true,容器才會處理注解。
Web框架的可插入性
我們前面說過了Servlet3.0的改進(jìn)之一就是使得我們能夠?qū)⒖蚣芎蛶觳迦氲絯eb應(yīng)用程序中。這種可插入性減少了配置,并且提高了web應(yīng)用程序的模塊化。Servlet3.0是通過web模塊布署描述片段(簡稱web片段)來實現(xiàn)插入性的。
一個web片段就是web.xml文件的一部分,被包含在框架特定的Jar包的META-INF目錄中。Web片段使得該框架組件邏輯上就是web應(yīng)用程序的一部分,不需要編輯web布署描述文件。
Web 片段中使用的元素和布署文件中使用的元素基本相同,除了根元素不一樣。Web片段的根元素是<web-fragment>,而且文件名必須叫 做web-fragment.xml。容器只會在放在WEB-INF\lib目錄下的Jar包中查找web-fragment.xml文件。如果這些 Jar包含有web-fragment.xml文件,容器就會裝載需要的類來處理他們。
在web.xml中,我們要求Servlet的name必須唯一。同樣的,在web.xml和所有的web片段中,Servlet的name也必須唯一。
下面就是一個web-fragment的例子:
web-fragment.xml
1. <web-fragment>
2. <servlet>
3. <servlet-name>ControllerServlet</servlet-name>
4. <servlet-class>com.app.control.ControllerServlet</servlet-class>
5. </servlet>
6. <listener>
7. <listener-class>com.listener.AppServletContextListener</listener-class>
8. </listener>
9. </web-fragment>
復(fù)制代碼
框架的Jar包是放在WEB-INF\lib目錄下的,但是Servlet3.0提供兩種方法指定多個web片段之間的順序:
?? 1. 絕對順序
?? 2. 相對順序
我 們通過web.xml文件中的<absolute-ordering>元素來指定絕對順序。這個元素有之元素name,name的值是各個 web片段的name元素的值。這樣就指定了web片段的順序。如果多個web片段有相同的名字,容器會忽略后出現(xiàn)的web片段。下面是一個指定絕對順序 的例子:
web.xml
1. <web-app>
2. <name>DemoApp</name>
3. <absolute-ordering>
4. <name>WebFragment1</name>
5. <name>WebFragment2</name>
6. </absolute-ordering>
7. ...
8. </web-app>
復(fù)制代碼
相對順序通過web-fragment.xml中的<ordering>元素來確定。Web片段的順序 由<ordering>的子元素<before>,<after>和<others>來決定。當(dāng)前的 web片段會放在所有的<before>元素中的片段之前。同樣的,會放在所有的<after>元素中的片段之 后。<others>用來代替所有的其他片段。注意只有當(dāng)web.xml中沒有<absolute-ordering>時,容器 才會使用web片段中定義的相對順序。
下面是一個幫助理解相對順序的例子:
web-fragment.xml
1. <web-fragment>
2. <name>WebFragment1</name>
3. <ordering><after>WebFragment2</after></ordering>
4. ...
5. </web-fragment>
復(fù)制代碼
web-fragment.xml
1. <web-fragment>
2. <name>WebFragment2</name>
3. ..
4. </web-fragment>
復(fù)制代碼
web-fragment.xml
1. <web-fragment>
2. <name>WebFragment3</name>
3. <ordering><before><others/></before></ordering>
復(fù)制代碼
..
</web-fragment>
這些文件將會按照下面的順序被處理:
?? 1. WebFragment3
?? 2. WebFragment2
?? 3. WebFragment1
包含WebFragment3的Jar文件被最先處理,包含WebFragment2的文件被第二個處理,包含WebFragment1的文件被最后處理。
如果既沒有定義絕對順序,也沒有定義相對順序,那么容器就認(rèn)為所有的web片段間沒有順序上的依賴關(guān)系。
轉(zhuǎn)載于:https://my.oschina.net/fivewang/blog/689839
總結(jié)
- 上一篇: 用C语言扩展Python的功能
- 下一篇: crontab命令的使用