- 搞定J2EE核心技術(shù)與企業(yè)應(yīng)用
- 常建功 王向華編著
- 1413字
- 2018-12-29 13:50:03
5.4 Servlet 3.0新特性
Servlet 3.0在前一版本(Servlet 2.5)的基礎(chǔ)上提供了若干新特性用于簡化Web應(yīng)用的開發(fā)和部署,其中有幾項特性值得特別注意。
● 異步處理支持:通過該特性,Servlet線程在接收到請求之后,可以將耗時的操作委派給另一個線程來完成,自己在不生成響應(yīng)的情況下返回至容器。針對業(yè)務(wù)處理較耗時的情況,這將大大減少服務(wù)器資源的占用,并且提高并發(fā)處理速度。
● 注解支持:通過該特性,可以用于簡化Servlet、過濾器(Filter)和監(jiān)聽器(Listener)的聲明,這使得web.xml部署描述文件從該版本開始不再是必選的。
● 可插性支持:通過該特性,可以很方便地擴(kuò)充已有Web應(yīng)用的功能,而不需要修改原有的應(yīng)用。
5.4.1 支持異步處理
通過前面的章節(jié)可以知道,Servlet在處理業(yè)務(wù)時是最耗時的,主要體現(xiàn)在數(shù)據(jù)庫操作及其他的跨網(wǎng)絡(luò)調(diào)用等。在處理過程中,Servlet線程一直處于阻塞狀態(tài),直到業(yè)務(wù)方法執(zhí)行完畢。在處理業(yè)務(wù)的過程中,Servlet資源一直被占用而得不到釋放,對于并發(fā)較大的應(yīng)用,這有可能造成性能的瓶頸。對此,在Servlet 3.0版本之前,通常是采用私有解決方案來提前結(jié)束Servlet線程,并及時釋放資源。
由于Servlet 3.0支持異步處理,因此可以從根源上解決上述問題,這主要是由于Servlet 3.0處理流程調(diào)整為如下的過程:
01 Servlet接收到請求之后,可以先對請求攜帶的數(shù)據(jù)進(jìn)行一些預(yù)處理。
02 Servlet線程接著會將請求轉(zhuǎn)交給一個異步線程來執(zhí)行業(yè)務(wù)處理,而該線程本身返回至容器。此時由于Servlet還沒有生成響應(yīng)數(shù)據(jù),因此必須等異步線程處理完業(yè)務(wù)以后,才可以直接生成響應(yīng)數(shù)據(jù),或者將請求繼續(xù)轉(zhuǎn)發(fā)給其他Servlet。
通過上述的執(zhí)行流程可以發(fā)現(xiàn),Servlet線程不再是一直處于阻塞狀態(tài)以等待業(yè)務(wù)邏輯的處理,而是啟動異步線程之后可以立即返回。
查看Servlet 3.0幫助文檔,異步處理特性可以應(yīng)用于Servlet和過濾器兩種組件,由于異步處理的工作模式和普通工作模式在實現(xiàn)上有著本質(zhì)的區(qū)別,因此默認(rèn)情況下,Servlet和過濾器并沒有開啟異步處理特性,如果希望使用該特性,則需要按一定方式啟用。
5.4.2 支持注解
在Servlet 3.0的部署描述文件web.xml中,在頂層標(biāo)簽<web-app>中存在一個名為metadata-complete的屬性,該屬性主要用來實現(xiàn)指定當(dāng)前部署描述文件是否完整。如果該屬性設(shè)置為true,則容器在部署時將只依賴部署描述文件,忽略所有的注解;如果不配置該屬性,或者將其設(shè)置為false,則表示啟用注解支持。
下面將詳細(xì)介紹Servlet中常見的幾種注解。
1.聲明為Servlet注解——@WebServlet
@WebServlet注解主要用于將一個類聲明為Servlet程序,在具體運(yùn)行時,該注解將會在部署時被容器處理,容器根據(jù)具體的屬性配置將相應(yīng)的類部署為Servlet程序。@WebServlet注解的常用屬性如表5.1所示。
表5.1 @WebServlet注解的屬性

2.初始化參數(shù)注解——@WebInitParam
@WebInitParam注解主要用于為Servlet或者Filter指定初始化參數(shù),這等價于web.xml文件中<servlet>和<filter>標(biāo)簽的<init-param>子標(biāo)簽。該注解主要配合@WebServlet或者@WebFilter使用。@WebInitParam注解的常用屬性如表5.2所示。
表5.2 @WebInitParam注解的屬性

3.聲明為過濾器注解——@WebFilter
@WebFilter用于將一個類聲明為過濾器,在具體運(yùn)行時,該注解將會在部署時被容器處理,容器將根據(jù)具體的屬性配置將相應(yīng)的類部署為過濾器。@WebFilter注解的常用屬性如表5.3所示。
表5.3 @WebFilter注解的屬性

5.4.3 支持可插性(pluggability)
通過Servlet 3.0版本新增的注解可以簡化Servlet、過濾器和監(jiān)聽器的聲明,從而使得web.xml配置文件變?yōu)榭蛇x配置。而對于Servlet 3.0新增的可插性支持則將Servlet配置的靈活性提升到了新的高度,即在可以不修改已有Web應(yīng)用的前提下,只需將按照一定格式打成的JAR包放到WEB-INF/lib目錄下,即可實現(xiàn)新功能的擴(kuò)充,不需要額外的配置。
為了支持可插性,Servlet 3.0版本引入了稱為“Web模塊部署描述符片段”的web-fragment.xml部署描述文件,該文件必須存放在JAR文件的META-INF目錄下,該部署描述文件可以包含一切可以在web.xml文件中定義的內(nèi)容。
- 工業(yè)機(jī)器人虛擬仿真實例教程:KUKA.Sim Pro(全彩版)
- Managing Mission:Critical Domains and DNS
- Dreamweaver CS3網(wǎng)頁設(shè)計50例
- PHP開發(fā)手冊
- 讓每張照片都成為佳作的Photoshop后期技法
- 機(jī)器人創(chuàng)新實訓(xùn)教程
- Pig Design Patterns
- 傳感器與物聯(lián)網(wǎng)技術(shù)
- Cloud Security Automation
- 統(tǒng)計挖掘與機(jī)器學(xué)習(xí):大數(shù)據(jù)預(yù)測建模和分析技術(shù)(原書第3版)
- Learning ServiceNow
- 基于敏捷開發(fā)的數(shù)據(jù)結(jié)構(gòu)研究
- 強(qiáng)化學(xué)習(xí)
- 電腦上網(wǎng)入門
- PowerPoint 2010幻燈片制作高手速成