官术网_书友最值得收藏!

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)容。

主站蜘蛛池模板: 兴义市| 根河市| 贺州市| 海安县| 杨浦区| 行唐县| 托克逊县| 甘德县| 湖南省| 敦煌市| 靖边县| 墨竹工卡县| 满洲里市| 博乐市| 广水市| 浑源县| 什邡市| 阿拉善右旗| 勃利县| 尖扎县| 偃师市| 三亚市| 曲松县| 保靖县| 手游| 永丰县| 江安县| 河北区| 昌乐县| 桐梓县| 武义县| 富顺县| 高雄市| 文水县| 大名县| 虎林市| 洛阳市| 青州市| 定襄县| 广州市| 芜湖市|