資源描述:
《簡(jiǎn)化web應(yīng)用開(kāi)發(fā) servlet 3.0特性詳解new》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、簡(jiǎn)化Web應(yīng)用開(kāi)發(fā)Servlet3.0特性詳解Servlet3.0作為JavaEE6規(guī)范體系中一員,隨著JavaEE6規(guī)范一起發(fā)布。該版本在前一版本(Servlet2.5)的基礎(chǔ)上提供了若干新特性用于簡(jiǎn)化Web應(yīng)用的開(kāi)發(fā)和部署。Servlet3.0作為JavaEE6規(guī)范體系中一員,隨著JavaEE6規(guī)范一起發(fā)布。之前51CTO也曾報(bào)導(dǎo)過(guò)《JavaEE6新特性之Servlet3.0的異步處理》的相關(guān)內(nèi)容,而本文將比較全面的、并結(jié)合代碼實(shí)例介紹Servlet3.0的新特性。關(guān)于JavaEE6平臺(tái)的更多內(nèi)容,51C
2、TO推薦閱讀:JavaEE6平臺(tái)指南異步處理支持:有了該特性,Servlet線程不再需要一直阻塞,直到業(yè)務(wù)處理完畢才能再輸出響應(yīng),最后才結(jié)束該Servlet線程。在接收到請(qǐng)求之后,Servlet線程可以將耗時(shí)的操作委派給另一個(gè)線程來(lái)完成,自己在不生成響應(yīng)的情況下返回至容器。針對(duì)業(yè)務(wù)處理較耗時(shí)的情況,這將大大減少服務(wù)器資源的占用,并且提高并發(fā)處理速度。新增的注解支持:該版本新增了若干注解,用于簡(jiǎn)化Servlet、過(guò)濾器(Filter)和監(jiān)聽(tīng)器(Listener)的聲明,這使得web.xml部署描述文件從該版本開(kāi)
3、始不再是必選的了??刹逍灾С郑菏煜truts2的開(kāi)發(fā)者一定會(huì)對(duì)其通過(guò)插件的方式與包括Spring在內(nèi)的各種常用框架的整合特性記憶猶新。將相應(yīng)的插件封裝成JAR包并放在類(lèi)路徑下,Struts2運(yùn)行時(shí)便能自動(dòng)加載這些插件?,F(xiàn)在Servlet3.0提供了類(lèi)似的特性,開(kāi)發(fā)者可以通過(guò)插件的方式很方便的擴(kuò)充已有Web應(yīng)用的功能,而不需要修改原有的應(yīng)用。下面我們將逐一講解這些新特性,通過(guò)下面的學(xué)習(xí),讀者將能夠明晰了解Servlet3.0的變化,并能夠順利使用它進(jìn)行日常的開(kāi)發(fā)工作。異步處理支持Servlet3.0之前,一個(gè)
4、普通Servlet的主要工作流程大致如下:首先,Servlet接收到請(qǐng)求之后,可能需要對(duì)請(qǐng)求攜帶的數(shù)據(jù)進(jìn)行一些預(yù)處理;接著,調(diào)用業(yè)務(wù)接口的某些方法,以完成業(yè)務(wù)處理;最后,根據(jù)處理的結(jié)果提交響應(yīng),Servlet線程結(jié)束。其中第二步的業(yè)務(wù)處理通常是最耗時(shí)的,這主要體現(xiàn)在數(shù)據(jù)庫(kù)操作,以及其它的跨網(wǎng)絡(luò)調(diào)用等,在此過(guò)程中,Servlet線程一直處于阻塞狀態(tài),直到業(yè)務(wù)方法執(zhí)行完畢。在處理業(yè)務(wù)的過(guò)程中,Servlet資源一直被占用而得不到釋放,對(duì)于并發(fā)較大的應(yīng)用,這有可能造成性能的瓶頸。對(duì)此,在以前通常是采用私有解決方案來(lái)
5、提前結(jié)束Servlet線程,并及時(shí)釋放資源。Servlet3.0針對(duì)這個(gè)問(wèn)題做了開(kāi)創(chuàng)性的工作,現(xiàn)在通過(guò)使用Servlet3.0的異步處理支持,之前的Servlet處理流程可以調(diào)整為如下的過(guò)程:首先,Servlet接收到請(qǐng)求之后,可能首先需要對(duì)請(qǐng)求攜帶的數(shù)據(jù)進(jìn)行一些預(yù)處理;接著,Servlet線程將請(qǐng)求轉(zhuǎn)交給一個(gè)異步線程來(lái)執(zhí)行業(yè)務(wù)處理,線程本身返回至容器,此時(shí)Servlet還沒(méi)有生成響應(yīng)數(shù)據(jù),異步線程處理完業(yè)務(wù)以后,可以直接生成響應(yīng)數(shù)據(jù)(異步線程擁有ServletRequest和ServletResponse對(duì)
6、象的引用),或者將請(qǐng)求繼續(xù)轉(zhuǎn)發(fā)給其它Servlet。如此一來(lái),Servlet線程不再是一直處于阻塞狀態(tài)以等待業(yè)務(wù)邏輯的處理,而是啟動(dòng)異步線程之后可以立即返回。異步處理特性可以應(yīng)用于Servlet和過(guò)濾器兩種組件,由于異步處理的工作模式和普通工作模式在實(shí)現(xiàn)上有著本質(zhì)的區(qū)別,因此默認(rèn)情況下,Servlet和過(guò)濾器并沒(méi)有開(kāi)啟異步處理特性,如果希望使用該特性,則必須按照如下的方式啟用:對(duì)于使用傳統(tǒng)的部署描述文件(web.xml)配置Servlet和過(guò)濾器的情況,Servlet3.0為和7、>標(biāo)簽增加了子標(biāo)簽,該標(biāo)簽的默認(rèn)取值為false,要啟用異步處理支持,則將其設(shè)為true即可。以Servlet為例,其配置方式如下所示:1.2.DemoServlet3.footmark.servlet.DemoServlet4.true5.對(duì)于使用S
8、ervlet3.0提供的@WebServlet和@WebFilter進(jìn)行Servlet或過(guò)濾器配置的情況,這兩個(gè)注解都提供了asyncSupported屬性,默認(rèn)該屬性的取值為false,要啟用異步處理支持,只需將該屬性設(shè)置為true即可。以@WebFilter為例,其配置方式如下所示:6.@WebFilter(urlPatterns="/demo",asyncSupported=true)7.pu