小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Java EE 6 之 Servlet 3.0

 CevenCheng 2011-09-05

Servlet之所以沒有像之前的ejb那樣被受到那么多的詬病,是因?yàn)閟ervlet的設(shè)計(jì)確實(shí)非常好。在最新的Java EE6版本里,這么多年都沒有多少重大改動(dòng)的Servlet終于添加了很多新的功能。下面我們一個(gè)一個(gè)來看

1. 基于annotation的配置

自從java 5增加了annotation后,現(xiàn)在annotation已經(jīng)廣范用于各種框架,確實(shí)減少了很多的編寫配置文件的工作?,F(xiàn)在終于可以不用寫web.xml,只要通過WebServlet, WebFilter, WebListener這幾個(gè)annotation就可以輕易的配置Servlet, filter和listener了。而且, web.xml已經(jīng)是可選的了,就算沒有它,也一樣運(yùn)行。

2. 異步請(qǐng)求處理

Servlet 3.0 新添加了一個(gè)類AsyncContext,可以通過ServletRequest活得。如果調(diào)用了ServletRequest的startAsync(),那么這個(gè)請(qǐng)求將會(huì)被異步處理,這意味著即使當(dāng)前的線程執(zhí)行結(jié)束,也不會(huì)給發(fā)送會(huì)響應(yīng),而是要等到AsyncContext的complete()方法被調(diào)用。通過AsyncContext,一樣可以取到ServletRequest,和ServletResponse對(duì)象,這意味著即使最初Servlet執(zhí)行的線程執(zhí)行結(jié)束,也一樣可以取到那次請(qǐng)求數(shù)據(jù)和返回客戶端數(shù)據(jù)。

在通常的Servlet設(shè)計(jì)中,servlet容器會(huì)為每個(gè)客戶端的請(qǐng)求分配一個(gè)線程,如果處理請(qǐng)求的過程中需要等待某種很慢的資源,在訪問量大的時(shí)候,可能導(dǎo)致servlet容器的線程池耗光,從而無法響應(yīng)后續(xù)的請(qǐng)求。有了異步處理的servlet之后,可以將這些線程解放出來,把它們放到一個(gè)隊(duì)列里等待。比起線程,普通的對(duì)象還是要占用較少資源的。

3. Web Fragments

Web容器加載的時(shí)候,會(huì)掃描WEB-INF/lib下的jar, 如果這個(gè)jar的有META-INF/web-fragment.xml,那這這個(gè)web-fragment.xml內(nèi)的配置信息也會(huì)被使用。這個(gè)功能對(duì)做web框架很有用。很多web框架都是通過自定義自己的servlet, filter或listener實(shí)現(xiàn)的,現(xiàn)在,框架的開發(fā)者可以將默認(rèn)的配置放到自己的jar里,使用者只要把jar丟到WEB-INF/lib/目錄下就可以使用框架了,更加方便。通過web-fragment, 可以更容易的對(duì)一個(gè)war實(shí)現(xiàn)部署上的模塊化。

4. 動(dòng)態(tài)注冊(cè)Web application組件

這個(gè)功能的意思是指,應(yīng)用程序可以在運(yùn)行時(shí)注冊(cè)servlet, filter和listener。ServletContext里多了addFilter(), addServlet()等方法,來給用戶調(diào)用。很奇怪的是,我只看到注冊(cè)組件的,沒有看到注銷組件的,如果只能加不能減的話,那這一功能估計(jì)只能看作是通過xml配置的另一種方法。

5. 容器啟動(dòng)回調(diào)

如果WEB-INF/lib下有某個(gè)jar文件包含META-INF/services/javax.servlet.ServletContainerInitializer文件,且該文本文件內(nèi)的類名所對(duì)應(yīng)的類實(shí)現(xiàn)了javax.servlet.ServletContainerInitializer接口,那么這個(gè)類所實(shí)現(xiàn)的該接口方法會(huì)在容器啟動(dòng)時(shí)被調(diào)用。 這個(gè)接口方法是onStartup(java.util.Set> c, ServletContext ctx) , 其中c是一個(gè)類的集合。你必須在這個(gè)方法上使用HandlesTypes annation,這個(gè)annotation會(huì)指定一些類,而所有實(shí)現(xiàn)了,集成了或標(biāo)注了這個(gè)些類的類會(huì)做成一個(gè)結(jié)合作為參數(shù)傳給onStartup方法。說起來復(fù)雜,寫起來簡(jiǎn)單:

@HandlesTypes({A.class})
public void onStartup(Set<Class<?>> c, ServletContext ctx){
   //
}

對(duì)于上面的例子,c集合里的類要么實(shí)現(xiàn)了A,要么集成了A,要么標(biāo)注了A。
看來這個(gè)功能還是為了自定義框架用的。

6. 自定義session cookie

以前Session cookie的名字一般固定為JSESSIONID,現(xiàn)在通過ServletContext可以獲得SessionCookieConfig對(duì)象,而該對(duì)象可以讓我們自定義session cookie的名字等屬性。

7. multipart支持

編寫接受上傳文件的程序更容易了,通過HttpServletRequest對(duì)象可以獲得Part對(duì)象,每一個(gè)Part代表了上傳的一個(gè)文件。調(diào)用Part.write(String)方法,可以很輕松的把上傳的文件保存為參數(shù)指定的文件名。

結(jié)論

可以看出,這些更改,都無疑使Servlet編程更容易更靈活了。所以還是很期待能在項(xiàng)目中使用Servlet 3.0 。

相關(guān)文章:

  1. Java EE,王者回來
  2. Java EE 的依賴注入功能有限,不能注入到非管束的普通類里面
  3. Java EE的不足
  4. 如何保證jms消息的順序性
  5. JavaEE組件的并發(fā)與無狀態(tài)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多