自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Servlet 3.0規(guī)范最終建議草案發(fā)布

開發(fā) 后端
在近日公布的Servlet 3.0最終建議草案中,無需手動修改應用程序web.xml文件成為了主要目標,Servlet 3.0中的多項新特性改進可以加速應用的部署。

Servlet 3.0規(guī)范的一個主要目標是無需手動修改應用程序web.xml文件,即可部署servlet,filter(過濾器)和listener(監(jiān)聽器)等。新的特征包括:

◆Annotation(注釋)在filter和servlet中的使用,讓部署它們時可以不用在web.xml中聲明相關條目。

◆支持“web片段(fragment)”,由開發(fā)人員提供配置信息,無需手動編輯web.xml文件。XML片段放置于/META-INF/web-fragments.xml文件中,它包含大部分與web.xml描述符相同的元素。容器將在部署時處理這些XML片段,并配置最終的描述符。

◆源于ServletContextListeners的對filter和servlet的編程式配置,這些配置會被放在jar包中的/META-INF/*.tld文件里。

在早期草案審閱階段,Servet 3.0這些特征引起過一些爭論。一些專家組成員擔心會有嚴重的安全風險,諸如部署了非預期的filter和servlet,無論這是偶然的或是故意混淆的結果。專家組成員Greg Wilkins在他言辭激烈的博文中將這一規(guī)范描述為“糟糕的文檔以及缺陷流程下工作不和諧的專家組的成果”。最終建議草案中討論了大部分以上被關注的問題,包括指定多個jar文件的絕對順序,以及允許排除個別jar文件。它以如下方式工作:借助META-INF/web-fragment.xml文件中的元素,WEB-INF/lib中的每個jar文件被賦予一個對應的名字。Web應用的WEB-INF/web.xml將包含元素,并以應用的順序列出以上的片段名,同時它還有一個可選的元素,用于標識是否以及何時包含(include)那些未被命名的jar文件。部署者可以選擇只部署那些列表中可信的jar文件,以防止意外部署的問題。此外,在找到web-fragment.xml文件之前,順序的特性可以排除(exclude)那些不需要掃描的jar文件,因此加速了應用的部署。

除了支持片段以及使用注釋,專家組所設定的另一個需求是可以插入框架共享副本,包括JAX-WS,JAX-RS和JSF等構建在Web容器之上的框架。公開評閱草稿中加入的ServletContainerInitializer正是用于處理這個用例。ServletContainerInitializers通過jar服務API被發(fā)現(xiàn),另外它指定它所能處理的一系列類型。任何包含在WEB-INF/lib下jar文件里的的這些類型的類(Class),在發(fā)現(xiàn)后會被傳遞給ServletContainerInitializer,它能夠使用與ServletContextListeners相同的編程式來配置APIs。盡管這點廣受歡迎,但ServletContainerInitializer也的確引出了另一個新的問題,正如Wilkins在后續(xù)的博文中所強調的那樣,目前仍不清晰的是使用絕對的順序機制能否排除ServletContainerInitializer。他給出了一些自己的建議,以澄清這一點:

如果web.xml具有一個不包含元素的,那么只有在順序中列出的包含片段的jar文件才可以通過注釋和可插拔(Pluggability)特征實例化Filter、Listener和Servlet等。具體來說: 

◆被排除的jar文件的web-fragment.xml不會被處理;

◆對于注釋的servlet,filter或listener,被排除的jar文件不會被掃描。但是,如果一個源于被排除的jar的servlet,filter或者listener被列在了web.xml或者非排除性的web-fragment.xml中,除非它被metadata-complete所排除,那么這些注釋將被采用。

◆在被排除的jar文件的TLD文件中所發(fā)現(xiàn)的ServletContextListeners將不能夠通過編程式APIs配置filter和servlet。任何這樣的嘗試將導致IllegalStateException異常。

◆如果從被排除的jar文件中裝載一個發(fā)現(xiàn)的ServletContainerInitializer,它將會被忽略。

◆在ServerletContainerInitializers處理類時,將不會掃描被排除的jar文件。

Servlet 3.0除了這些易于使用的特征,JSR-315還添加了對異步請求的支持,它允許線程提前返回容器并執(zhí)行其他任務。這個特征備受爭議,專家組試圖利用已有的RequestDispatcher處理異步的重分發(fā)。討論的結果是,新規(guī)范添加了20個方法和3個新的接口。由于其復雜性,在公開審閱階段被廣泛批評。最終建議草案定義了一個明確的分發(fā)類型:AsyncContext.dispatch,它被用于執(zhí)行異步請求,并包含相當簡化了的API。@WebServlet和@WebFilter注釋具有一個boolean型的屬性:asyncSupported,缺省為false。當它被設為true時,應用程序可以通過調用startAsync啟動另一個分離的線程進行異步處理,同時傳遞給它到request(請求)和response(響應)對象的引用,之后從容器里的原線程退出。這意味著response將沿著與進來相同的路徑反序遍歷這些過濾器(或過濾器鏈)。當異步處理從request開始時,另一個線程或者回調(callback)也可以產生response并調用complete方法,或者通過AsyncContext.dispatch方法將request分發(fā)出去,以便它在容器的上下文環(huán)境中運行。

 

【編輯推薦】

  1. JSP/Servlet中的重定向技術的綜述
  2. 高性能、高彈性JSP和Servlet性能優(yōu)化
  3. 淺析Servlet和Jsp中的多國語言顯示
  4. 淺談開源Servlet容器Jetty
  5. JSP/Servlet/JSF中對標簽庫的深入研究
責任編輯:佚名 來源: InfoQ
相關推薦

2013-01-05 09:58:35

JavaEEJavaEE7JMS 2.0

2009-07-08 09:35:53

Java ServleServlet 3.0

2009-07-08 10:02:41

Servlet 3.0

2009-09-29 13:38:16

Ubuntu 9.10最終圖標linux

2009-10-20 09:25:17

Java EE 6最終

2022-09-28 14:40:12

人工智能視頻分析大數(shù)據(jù)

2010-07-07 10:32:33

藍牙無線

2012-04-13 09:55:20

CSSWEB

2012-05-30 10:54:59

自動化業(yè)務服務交付

2012-05-28 09:30:43

JavaJFile

2009-09-28 15:28:07

Jython 2.5.

2010-05-11 16:22:40

2011-10-13 10:21:01

C++

2010-04-30 09:19:05

Servlet 3.0

2010-05-26 13:56:59

Tomcat 7Servlet 3.0

2011-12-31 10:31:06

Linux Deepi

2011-07-20 09:40:44

Linux 3.0

2009-05-13 10:02:37

Tapestry 5.servletApache

2009-08-20 09:17:11

Exchange201測試版下載

2015-09-01 13:48:26

七牛數(shù)據(jù)時代峰會
點贊
收藏

51CTO技術棧公眾號