Jetty的工作原理解析
1.Jetty的基本架構
2.Jetty也是一個Servlet引擎,也可以基於AJP(定向包協議)工作,一般基於AJP
3.Jetty的基本的數據模型是Handler,所有被拓展的組件都可以被作爲一個Handler添加到Server中,Jetty將幫你管理這些Handler
4.Container是管理Mbean(可管理的java資源)的容器。Jetty的Server的擴展主要是實現了一個個的Handler,並將Handler加到Server中,在Server中提供了調用這些Handler的訪問規則
5.Handler兩種類型
- HandlerWrapper:將一個Handler委託給另一個類去執行,如我們要將一個Handler加到Jetty中,那麼久必須將這個Handler委託給Server去調用
- HandlerCollection:將多個Handler組裝在一起,構成一個Handler鏈,方便我們做擴展
- 通常一個Web服務站點的後端服務器不是講Java的應用服務直接暴露給服務訪問者,而是在應用服務者(如Jboss)的前面再加一個Web服務器(如Apache和Nginx),原因是方便做日誌分析、負載均衡、權限控制、訪問惡意請求以及靜態資源預加載等
- 在這種架構下Servlet引擎就不需要解析和封裝返回的HTTP,因爲HTTP的解析工作已經在Apache或Nginx服務器上完成了,JBoss只要基於更簡單的AJP工作就行了,這樣可以加快請求的響應速度。相對比HTTP唯一的不同就是在讀取到Socket數據包時如何來轉換這個數據包,按照HTTP的包格式來解析就是HttpParser,按照AJP來解析就是Ajp13Parserer
7.與Tomcat的比較
- 架構:Jetty是面向Handler的架構,就想Spring是面向Bean的架構,iBatis是面向Statement的一樣,而Tomcat是以多級容器構建的
- 拓展性:Jetty更易被拓展
- 性能:Tomcat在處理少數非常繁忙的連接上更有優勢,也就是說鏈接的生命週期如果短,Tomcat的總體性能更高;而Jetty恰恰相反,Jetty可以同時處理大量連接而且可以長時間保持這些連接,如一些web連天應用
- Context給數據提供生存環境,發現每個Bean之間的關係,爲他們建立這種關係並且維護好這種關係,所以Context就是一個Bean關係的集合,這個關係集合就是Ioc容器。
- Core就是發現、建立和維護每個Bean之間的關係所需要的一系列工具,定義了資源的訪問方式
- 標識一個應用環境
- 利用BeanFactory創建Bean對象
- 保存對象關係表
- 能夠捕獲各種事件
- AOP基於動態代理實現的
- Spring的AOP實現遵守了AOP聯盟的約定,同事Spring又擴展了它,增加了Pointcut、Advisor等一些接口使其更加靈活
- 代理模式:給某一個對象創建一個代理對象,由這個代理對象控制對源對象的引用,而創建這個代理對象後可以在調用原對象時增加一些額外的操作
- 策略模式:顧名思義就是做某事的策略,這在變成上通常就是指完成某個操作可能有多種方法,這些方法各有千秋,可能有不同的適合場合,然而這個這些操作方法都有可能被用到,把各個操作方法都當做一個實現策略,使用者可根據需要選擇適合的策略
- 模板模式:核心是,大的邏輯已經定義,你要做的就是實現一些具體的步驟,不同的人實現這些具體步驟的方法也會有所不同,從而模板的行爲也會表現出具體的區別。如HandlerMapping的設計
- 根據JDBC規範建立與數據庫連接
- 通過反射打通Java對象與數據庫參數交互之間相互轉化的關係
- 簡單工廠模式:根據客戶指定的一些屬性就可以通過調用工廠類來生產產品。如com.iBatis.sqlmap.engine.type.TypeHandlerFactory類,使用簡單工廠創建不用的TypeHandler對象
- 工廠模式:簡單工廠模式中通過指定特定產品屬性來生產不同的具體的產品,但是有時我們並不知道要生產的產品有哪些特定的產品屬性,但是可能知道哪些工廠生產的產品具有我們需要的產品屬性,也就是根據不同的工廠來決定不同的產品,與簡單工廠類似,只是增加了一個抽象工廠角色。如iBatis中的資源加載,對應的類時DataSourceFactory