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