1.中間件、容器、Web服務器
1.1中間件
中間件是提供系統軟件和應用軟件之間連接的軟件,以便於軟件各部件之間的溝通。中間件處於操作系統和更高一級應用程序之間。
J2EE提出的背景:
1)企業級應用框架的需求:在許多企業級應用中,例如數據庫連接、郵件服務、事務處理等都是一些通用企業需求模塊,這些模塊每次再開發如果都由開發人員來完成的話,將會造成開發周期長和代碼可靠性差等問題。於是許多大公司開發了自己的通用模塊服務,這些服務型的軟件系列被稱為中間件。
2)通用的規范:因為這些中間件與用戶的溝通都各有不同,從而導致用戶無法將其組裝在一起為自己服務,於是提出標准的概念,J2EE就是基於JAVA技術的一系列標准。
中間件的功能:將應用程序運行環境與操作系統隔離,從而實現應用程序開發者不必為更多系統問題憂慮,而直接關注該應用程序在解決問題上的能力。
商用中間件主要陣營:微軟陣營、Java陣營、開源陣營。
常見的中間件:Apache-Tomcat、IBM-WebSphere、BEA-WebLogic、Kingdee-Apusic
1.2 容器
容器就是中間件的一種,充當中間件的角色。
容器的分類:
1)Web容器
給處於其中的應用程序組件(JSP,Servlet)提供一個環境(Jsp容器和Servlet),是組件(JSP,Servlet)直接跟容器中的環境變量接口交互。容器提供的接口嚴格遵守J2EE規范中的WEB APPLICATION標准,我們把以上標准的WEB服務器就叫做J2EE的WEB容器。
2)EJB容器
Enterprise java bean 容器。它提供給運行在其中的組件EHB各種管理功能。只要滿足J2EE規范的EJB放入容器,馬上就會被容器進行高效管理,並通過線程的接口獲得系統級別的服務,如郵件服務、事務管理等。
3)Web容器與EJB容器的區別
WEB容器和EJB容器在原理上大體相同,它們都是把外界的交互從而減輕應用程序的負擔。
主要區別是被隔離的外界環境。WEB容器主要與基於HTTP請求交互,EJB容器主要是跟數據庫、其他服務交互。如Servlet不同關心HTTP的細節,直接引用環境變量session,request,response;EJB不用關心數據庫連接速度、各種事務控制,直接由EJB容器完成。
1.3 WEB服務器(程序/軟件)
提供Web信息浏覽服務,向客戶浏覽器提供服務的程序
1)目前常見web服務器:
大型:Microsoft IIS、IBM WebSphere、BEA WebLogic、Apache、Tomcat
小型:nginx、 micro_httpd、mini_httpd、thttpd、 lighttpd、Shttpd
2)支持J2EE的應用服務器:
WEBSPHERE、WEBLOGIC、JBOSS、ORACLE APPLICATION SERVER、SUN ONE APPLICATION SERVER 等。
2.ServletContext功能作用
2.1 ServletContext
1)是一個全局的儲存信息的空間,服務器開始,其就存在,服務器關閉,其才釋放,所有用戶共用一個servletContext。
2)一個ServletContext對象表示了一個Web應用程序的上下文,是Web服務器中的一個已知路徑的根,為了節省空間,提高效率,ServletContext中,要放必須的、重要的、所有用戶需要共享的線程又是安全的一些信息。
2.2 Servlet上下文
1) 提供對應用程序中所有Servlet所共有的各種資源和功能的訪問。Servlet上下文API用於設置應用程序中所有Servlet共有的信息。Servlet可能需要共享他們之間的共有信息。運行於同一服務器的Servlet有時會共享資源,如JSP頁面、文件和其他Servlet。
如,做一個購物類的網站,要從數據庫中提取物品信息,如果用session保存這些物品信息,每個用戶都訪問一便數據庫,效率就太低了;所以要用來Servlet上下文來保存,在服務器開始時,就訪問數據庫,將物品信息存入Servlet上下文中,這樣,每個用戶只用從上下文中讀入物品信息就行了。
2) servlet可以通過名稱將對象屬性綁定到上下文。任何綁定到上下文的屬性可以被同一個web應用的其他servlet使用。ServletContext接口的下列方法允許訪問這種功能:
setAttribute
getAttribute
getAttributeNames
removeAttribute
上下文屬性對於創建它們的VM來說是本地的。這防止ServletContext屬性存儲於分布式容器的共享內存中。當信息需要在運行於分布式環境中的servlet之間共享時,信息被放入會話中(參見第7章“會話”),存儲於數據庫中,或者存儲於EJB組件中。
3)ServletContext接口
ServletContext接口定義了運行servlet的web應用的servlet視圖。使用ServletContext對象,servlet可以記錄事件日志,獲取資源的URL地址,並且設置和保存上下文內可以訪問的其他servlet的屬性。
容器中部署的每一個web應用都有一個ServletContext接口的實例對象與之關聯。如果容器被分布在多個虛擬機上,一個web應用將在每一個VM中有一個ServletContext實例。
4)初始化參數
ServletContext接口的初始化參數允許servlet訪問與web應用相關的上下文初始化參數,這些由應用開發人員在部署描述符中指定:
getInitParameter
getInitParameterNames
應用開發人員利用初始化參數傳送配置信息。典型的例子是web管理員的e-mail地址或者一個持有關鍵數據的系統名稱。
3.HTTP會話
在HTTP連接間維護用戶與統一用戶發出的不同請求之間關聯的情況稱為維護一個會話(session)。
3.1 會話的特征
1)不同用戶的會話應當是相互獨立的
2)會話一旦建立就應當一直存在,直到用戶空閒時間超過了某一個時間界限,容器才應當釋放該會話資源
3)在會話的存活期間,用戶可能給服務器發送了很多請求,該用戶的這些請求信息都可以存儲在會話中
3.2 建立過程
1)建立tcp連接
2)發出請求文檔
3)發出響應文檔
4)釋放tcp連接
4.GET與POST請求方式的區別
4.1 GET方法
使用GET請求方式,查詢字符串以鍵值對方式連接在URL後面被被一起傳送至服務器。
GET方法特點:
1)GET請求能被緩存;
2)GET請求主要用於獲取數據;
3)GET請求的長度有限制;
4)GET請求保存在浏覽器的歷史記錄中;
5)GET請求的URL能保存為書簽。
6)請求的數據會附加在URL之後,以?分割URL和傳輸數據,多個參數用&連接。URL的編碼格式采用的是ASCII編碼,而不是uniclde,即是說所有的非ASCII字符都要編碼之後再傳輸
4.2 POST方法
視同POST請求方式,查詢字符串在POST請求中單獨存在,和HTTP請求一起發送至服務器。
POST方法特點:
1) POST請求不能被緩存下來