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

淺析Servlet 3.0 API的概念

開(kāi)發(fā) 后端
本文簡(jiǎn)單介紹了Servlet 3.0 API的概念,以及介紹servlet 和過(guò)濾器類的代碼示例等。

如今,像 Struts、JSF 和 Springweb 這樣的 web 框架已經(jīng)被普遍接受,并已經(jīng)確立成為構(gòu)建 web 應(yīng)用程序的技術(shù)。將這些框架集成為一個(gè) web 應(yīng)用程序并不是那么容易,因?yàn)檫@一過(guò)程涉及將不同的片段同化在一起,之后編輯一個(gè)描述如何將所有這些片段配合在一起的單獨(dú)描述符文件。絕大多數(shù)框架強(qiáng)制您在應(yīng)用程序的部署描述符文件中配置像 servlet 類(通常為 控制器 Servlet)、過(guò)濾器類或者偵聽(tīng)器類這樣的框架細(xì)節(jié)。這種必備配置的主要原因是當(dāng)今的 web 應(yīng)用程序只支持一個(gè)單獨(dú)的整體部署描述符,其中定義了所有的部署信息。當(dāng)應(yīng)用程序的大小增加時(shí),外部框架的依賴關(guān)系可能也增加,從而生成復(fù)雜的部署描述符文件。正如您可能知道的,復(fù)雜描述的維護(hù)始終存在爭(zhēng)議。

為了解決這些問(wèn)題,Servlet 3.0 API 最為顯著的概念之一是 web 片段 或者 模塊 web.xml 的思想。Web 片段是將 web 應(yīng)用程序邏輯分區(qū)為 servlet、servlet-mapping、servlet-filter、filter-mapping、servlet-listener 之類的元素及其子元素。框架開(kāi)發(fā)人員可以利用該功能以定義存在于框架內(nèi)自己的 web 片段,開(kāi)發(fā)人員可以在不修改現(xiàn)有的部署描述符的情況下僅僅通過(guò)將庫(kù)文件包含到應(yīng)用程序的類路徑中來(lái)插入越來(lái)越多的框架。簡(jiǎn)言之,該功能旨在當(dāng)用框架或者庫(kù)進(jìn)行工作時(shí)進(jìn)行零配置。

對(duì)該部署描述符已經(jīng)進(jìn)行了更改以包含保存 web 片段細(xì)節(jié)的 這一新元素。如果該片段被打包為一個(gè) .jar 文件且以部署描述符的形式具備元數(shù)據(jù)信息,則 web.xml 文件必須包含在 .jar 文件的 META-INF 目錄下。在部署時(shí),器掃描應(yīng)用程序的類路徑,查找所有 web 片段并加以處理。前面討論過(guò)的 metadata-complete 標(biāo)志在應(yīng)用程序啟動(dòng)期間控制 web 片段的掃描。以下顯示了一個(gè)示例 web 片段:

  1. <web-fragment> 
  2. <servlet> 
  3. <servlet-name>myservlet</servlet-name> 
  4. <servlet-class>samples.MyServlet</servlet-class> 
  5. </servlet> 
  6. <listener> 
  7. <listener-class>samples.MyListener</listener-class> 
  8. </listener> 
  9. </web-fragment> 

為了提供增強(qiáng)的可插拔性,Servlet 3.0 借助添加到 ServletContext 的 API 為增加 servlets 和過(guò)濾器類的編程提供了非常需要的支持。這些新的 API 使您能通過(guò)編程來(lái)聲明 servlets、過(guò)濾器類及其 URL 映射。這些類在應(yīng)用程序啟動(dòng)或者運(yùn)行期間進(jìn)行初始化。最重要的是,您只能通過(guò) ServletContext 的 contextInitialized 方調(diào)用這些 API。有關(guān)這些 API 的更多信息,請(qǐng)參閱 Servlet 3.0 API 文檔。通過(guò)編程添加 servlet 和過(guò)濾器類的代碼示例如下所示:

  1. @ServletContextListener  
  2. public class MyListener {  
  3. public void contextInitialized (ServletContextEvent sce) {  
  4. ServletContext sc = sce.getServletContext();  
  5.  
  6. //Declare servlet and servlet mapping  
  7. sc.addServlet("myServlet", "Sample servlet", "samples.MyServlet", null, -1);  
  8. sc.addServletMapping("myServlet", new String[] {"/urlpattern/*"});  
  9.  
  10. //Declare filter and filter mapping  
  11. sc.addFilter("myFilter", "Sample Filter", " samples.MyFilter", null);  
  12. sc.addFilterMapping("myFilter", new String[] {"/urlpattern/*"}, "myServlet",  
  13. DispatcherType.REQUEST, false);  
  14. }  

大家應(yīng)該都遇到過(guò) servlets 運(yùn)行緩慢的問(wèn)題,特別是 servlets 必須等待來(lái)自 web 服務(wù)、JDBC 連接、JMS 消息等的響應(yīng)。在當(dāng)前情況下,servlet 在生成響應(yīng)前需要等待進(jìn)程完成,這會(huì)導(dǎo)致低效率阻塞操作消耗容器的線程或者其他有限的資源。在采用 JDBC 連接時(shí)的另一個(gè)不利影響是,數(shù)據(jù)庫(kù)可能存在許多等待訪問(wèn)的阻塞線程。這種情況最終將導(dǎo)致整個(gè) web 容器的線程不足和服務(wù)質(zhì)量下降。

為了克服上述缺點(diǎn),Servlet 3.0 添加了對(duì)掛起和恢復(fù)請(qǐng)求處理的支持,使 servlet 以異步、非阻塞的方式響應(yīng)請(qǐng)求(這就是編程的 Comet 樣式)。當(dāng)一項(xiàng)請(qǐng)求被掛起時(shí),處理請(qǐng)求的線程將在不生成任何響應(yīng)的情況下返回給容器并準(zhǔn)備執(zhí)行其他任務(wù)。處理請(qǐng)求的 resume 方法恢復(fù)請(qǐng)求處理。只要當(dāng)所請(qǐng)求的資源可用時(shí),處理事件的線程才恢復(fù)被掛起的請(qǐng)并進(jìn)行處理以生成響應(yīng)。以下列舉的是異步 servlets 的一些功能:

即使數(shù)據(jù)到達(dá)緩慢(非阻塞輸入),也能在沒(méi)有阻塞事件的情況下從客戶機(jī)接收數(shù)據(jù)。

即使客戶機(jī)或者網(wǎng)絡(luò)運(yùn)行緩慢(非阻塞輸出),也能在不發(fā)生阻塞的情況下向客戶機(jī)發(fā)送數(shù)據(jù)。

能處理被延遲的請(qǐng)求。如果在響應(yīng)請(qǐng)求前必須獲得遠(yuǎn)程/緩慢的資源,或者如果需要抑制訪問(wèn)特定的資源以防止過(guò)多的同步訪問(wèn),對(duì)被延遲事件的處理是非常有用的。

能處理被延遲的響應(yīng)關(guān)閉;也就是響應(yīng)將保持打開(kāi)以允許在發(fā)生異步事件時(shí)發(fā)送其他數(shù)據(jù)。

能通知阻塞或者非阻塞事件。

將新的 API 添加到 ServletRequest 和 ServletResponse,用于掛起、恢復(fù)和查詢請(qǐng)求的狀況、啟用禁用和查詢響應(yīng)的狀況。開(kāi)發(fā)人員可以分別通過(guò) requestSuspended(), requestResumed() 和 requestCompleted() 方法使用請(qǐng)求的 resume、suspend 和 complete 方法通知事件。有關(guān)這些方法的詳細(xì)信息請(qǐng)參閱 Servlet 3.0 API。

【編輯推薦】

  1. Servlet在session中共享鏈接
  2. 配置Servlet開(kāi)發(fā)環(huán)境
  3. Future Response Servlet特性
  4. Tomcat Java Servlet引擎安全設(shè)定
  5. Jetty-Servlet容器額外功能
責(zé)任編輯:佚名 來(lái)源: 中國(guó)IT實(shí)驗(yàn)室
相關(guān)推薦

2009-07-03 18:26:11

Servlet過(guò)濾器

2009-07-08 09:35:53

Java ServleServlet 3.0

2009-07-09 13:45:06

Servlet基本結(jié)構(gòu)

2009-07-06 09:23:51

Servlet定義

2009-07-08 11:37:32

Servlet API

2009-07-07 17:51:50

Java Servle

2021-07-05 15:22:03

Servlet過(guò)濾器客戶端

2009-07-06 17:11:38

Servlet文件上傳

2009-07-09 16:47:26

Servlet的Web

2009-07-03 13:22:37

調(diào)用Servlet

2009-07-03 17:18:34

Servlet多線程

2010-05-11 16:22:40

2023-03-12 15:25:37

2009-07-07 15:12:06

Servlet API

2022-11-24 13:17:43

2009-07-07 17:10:57

JSP和Servlet

2009-07-07 02:15:03

Servlet2.5

2009-07-03 10:31:57

什么是ServletServlet API

2009-07-07 09:22:27

Servlet性能測(cè)試

2009-07-06 10:41:38

flex與servle
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)