1. 程式人生 > >Spring學習八

Spring學習八

spring nta 工程 source art align inf start mysq

1: Tomcat容器四個等級?

技術分享

Container, Engine, Servlet容器, Context

真正管理Servlet的容器是Context容器:一個context對應一個web工程。

<Context path="/projectOne " docBase="D:\projects\projectOne" source=“XXX” reloadable="true" />

2:Servet是如何被加載的?

Context 容器才是真正運行 Servlet 的 Servlet 容器

  A: 創建 Servlet 對象:

    DispatcherServlet需要被實例化才能讓Spring MVC 工作。

    如果 Servlet 的 load-on-startup 配置項大於 0,那麽在 Context 容器啟動的時候就會被實例化.

  B: 初始化 Servlet: Servlet 的 init

    這樣 Servlet 對象就初始化完成了。

3: Servlet體系結構:

  Servlet 主動關聯的是三個類,分別是 ServletConfig、ServletRequest 和 ServletResponse。

  ServletConfig 是在 Servlet 初始化時就傳給 Servlet 了,而後兩個是在請求達到時調用 Servlet 時傳遞過來的。 

ServletConfig 接口中聲明的方法發現,這些方法都是為了獲取這個 Servlet 的一些配置屬性,而這些配置屬性可能在 Servlet 運行時被用到。

  而 ServletContext 又是幹什麽的呢? Servlet 的運行模式是一個典型的“握手型的交互式”運行模式。所謂“握手型的交互式”就是兩個模塊為了交換數據通常都會準備一個交易場景,這個場景一直跟隨個這個交易過程直到這個交易完成為止。這個交易場景的初始化是根據這次交易對象指定的參數來定制的,這些指定參數通常就會是一個配置類。所以對號入座,交易場景就由 ServletContext 來描述,而定制的參數集合就由 ServletConfig 來描述。而 ServletRequest 和 ServletResponse 就是要交互的具體對象了,它們通常都是作為運輸工具來傳遞交互結果。

Servlet 類時通常使用的都是 HttpServletRequest 和 HttpServletResponse,它們繼承了 ServletRequest 和 ServletResponse

4: DispatcherServlet ContextLoaderListener 關系?

技術分享

ContextLoaderListener初始化的上下文加載的Bean是對於整個應用程序共享的,不管是使用什麽表現層技術,一般如DAO層、Service層Bean;

DispatcherServlet初始化的上下文加載的Bean是只對Spring Web MVC有效的Bean,如Controller、HandlerMapping、HandlerAdapter等等,該初始化上下文應該只加載Web相關組件。

對於contextConfigLocation參數,有2個地方可以配置: 1)context-param 是全局性配置 2)servlet下的init-param 是局部性配置 若以上兩處都設置了一個相同的bean配置文件路徑,那麽該文件內配置的bean會被初始化2次,所以一個配置文件只能選擇一種配置位置; 項目中使用spring框架有2種方式: 1)listener下的ContextLoaderListener 是一種引入方式,默認讀取/WEB-INF/applicationContext.xml 2)若是spring-web項目,DispatcherServlet 也是一種引入方式,默認讀取/WEB-INF/${servlet-name}-servlet.xml

ContextLoaderListener中創建ApplicationContext主要用於整個Web應用程序需要共享的一些組件,比如DAO,數據庫的ConnectionFactory等。而由DispatcherServlet創建的ApplicationContext主要用於和該Servlet相關的一些組件,比如Controller、ViewResovler等。

對於作用範圍而言,在DispatcherServlet中可以引用由ContextLoaderListener所創建的ApplicationContext,而反過來不行。

5: Session與 Cookie 關系

6: Servlet中的listener:

  整個 Tomcat 服務器中 Listener 使用的非常廣泛,它是基於觀察者模式設計的,Listener 的設計對開發 Servlet 應用程序提供了一種快捷的手段,能夠方便的從另一個縱向維度控制程序和數據。目前 Servlet 中提供了 5 種兩類事件的觀察者接口,它們分別是:4 個 EventListeners 類型的,ServletContextAttributeListener、ServletRequestAttributeListener、ServletRequestListener、HttpSessionAttributeListener 和 2 個 LifecycleListeners 類型的,  

ServletContextListener、HttpSessionListener

它們基本上涵蓋了整個 Servlet 生命周期中,你感興趣的每種事件。這些 Listener 的實現類可以配置在 web.xml 中的 <listener> 標簽中。當然也可以在應用程序中動態添加 Listener,需要註意的是 ServletContextListener 在容器啟動之後就不能再添加新的,因為它所監聽的事件已經不會再出現。掌握這些 Listener 的使用,能夠讓我們的程序設計的更加靈活。

Spring學習八