多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > spring容器啟動之我見(一)

spring容器啟動之我見(一)

來源:程序員人生   發布時間:2015-04-29 08:17:21 閱讀次數:3493次
spring容器啟動之我見。
本人也是自己看看源碼,然后方便以后自己記憶和理解,故寫此文章,如果有甚么錯的地方還請大家提出。

針對tomcat做服務器的項目,我們首先看的就是web.xml文件,spring容器啟動去加載監聽器
看以下代碼:其監聽器使用spring api中的類ContextLoaderListener
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value> classpath*:/spring-*.xml</param-value>
</context-param>
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>production</param-value>
</context-param>
<listener>
<listener-class>org.szgzw.frame.web.CGYContextLoaderListener</listener-class>
                 <!-- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> -->

</listener>
視察上面發現 這里我們自己寫了1個監聽類CGYContextLoaderListener
我們先來了解 spring api 中的ContextLoaderListener 類
ContextLoaderListener監聽器的作用就是啟動Web容器時,自動裝配ApplicationContext的配置信息。由于它實現了ServletContextListener這個接口,在web.xml配置這個監聽器,啟動容器時,就會默許履行它實現的方法。至于ApplicationContext.xml這個配置文件部署在哪,如何配置多個xml文件,書上都沒怎樣詳細說明。現在的方法就是查看它的API文檔。在ContextLoaderListener中關聯了ContextLoader這個類,所以全部加載配置進程由ContextLoader來完成。看看它的API說明。


第1段說明ContextLoader可以由 ContextLoaderListener和ContextLoaderServlet生成。如果查看ContextLoaderServlet的API,可以看到它也關聯了ContextLoader這個類而且它實現了HttpServlet這個接口。
第2段,ContextLoader創建的是 XmlWebApplicationContext這樣1個類,它實現的接口是WebApplicationContext->ConfigurableWebApplicationContex>ApplicationContext->BeanFactory這樣1來spring中的所有bean都由這個類來創建


第3段,講如何部署applicationContext的xml文件。
如果在web.xml中不寫任何參數配置信息,默許的路徑是/WEB-INF/applicationContext.xml,在WEB-INF目錄下創建的xml文件的名稱必須是applicationContext.xml;
如果是要自定義文件名可以在web.xml里加入contextConfigLocation這個context參數:
<context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>  
            /WEB-INF/classes/applicationContext-*.xml   
        </param-value>  
    </context-param>  
在<param-value> </param-value>里指定相應的xml文件名,如果有多個xml文件,可以寫在1起并1“,”號分隔。上面的applicationContext-*.xml采取通配符,比如這那個目錄下有applicationContext-ibatis-base.xml,applicationContext-action.xml,applicationContext-ibatis-dao.xml等文件,都會1同被載入。

因而可知applicationContext.xml的文件位置就能夠有兩種默許實現:

第1種:直接將之放到/WEB-INF下,之在web.xml中聲明1個listener;

第2種:將之放到classpath下,但是此時要在web.xml中加入<context-param>,用它來指明你的applicationContext.xml的位置以供web容器來加載。依照Struts2 整合spring的官方給出的檔案,寫成:
<context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value> 
</context-param>

這樣我們看到CGYContextLoaderListener 這個類,我們就知道他肯定也實現了接口servlet api ServletContextListener, 或我們知道它繼承了類spring api ContextLoaderListener

接著往底層看,接口servlet api ServletContextListener 繼承了接口 java.util.EventListener EventListener所有事件偵聽器接口必須擴大的標記接口、


ServletContext : 每個web利用都有1個 ServletContext與之相干聯。 ServletContext對象在利用啟動的被創建,在利用關閉的時候被燒毀。 ServletContext在全局范圍內有效,類似于利用中的1個全局變量。

 ServletContextListener: 使用listener接口,開發者能夠在為客戶端要求提供服務之前向ServletContext中添加任意的對象。這個對象在ServletContext啟動的時候被初始化,然后在ServletContext全部運行期間都是可見的。該接口具有兩個方法以下所示:

Servletcontextlistener代碼  
  1. void contextDestoryd(ServletContextEvent sce);  
  2.  
  3. void contextInitialized(ServletContextEvent sce);   

 用戶需要創建1個java類實現  javax.servlet.ServletContextListener接口并提供上面兩個方法的實現。

示例: 當你需要在處理任何客戶端要求之前創建1個數據庫連接,并且希望在全部利用進程中該連接都是可用的,這個時候ServletContextListener接口就會10分有用了。

Java代碼  
  1. package com.database;  
  2. import javax.servlet.ServletContext;  
  3. import javax.servlet.ServletContextAttributeEvent;  
  4. import javax.servlet.ServletContextAttributesListener;  
  5. import javax.servlet.ServletContextEvent;  
  6. import javax.servlet.ServletContextListener;  
  7. import com.database.DbConnection;  
  8.   
  9. public class DatabaseContextListener implements ServletContextListener {  
  10.   
  11.   private ServletContext context = null;  
  12.   private Connection conn = null;  
  13.   
  14.   public DatabaseContextListener() {  
  15.   
  16.   }  
  17.   //該方法在ServletContext啟動以后被調用,并準備好處理客戶端要求  
  18.   public void contextInitialized(ServletContextEvent event)  {  
  19.     this.context = event.getServletContext();  
  20.     conn = DbConnection.getConnection;  
  21.     // 這里DbConnection是1個定制好的類用以創建1個數據庫連接  
  22.     context = setAttribute(”dbConn”,conn);  
  23.   }  
  24.   
  25.   //這個方法在ServletContext 將要關閉的時候調用  
  26.   public void contextDestroyed(ServletContextEvent event){  
  27.     this.context = null;  
  28.     this.conn = null;   
  29.   }  
  30. }   

然后部署該類,并在web.xml文件中添加

Xml代碼  
  1. <listener>  
  2. com.database.DatabaseContextListener  
  3. </listener>  

 1旦web利用啟動的時候,我們就可以在任意的servlet或jsp中通過下面的方式獲得數據庫連接:

Java代碼  
  1. Connection conn = (Connection) getServletContext().getAttribute(”dbConn”);  
這里我們就會想到這兩個鬼servletcontext 和 servletcontextlistener 有啥區分 
通過上面代碼,我發現似乎好像我們在啟動的時候去初始化接口servletcontextlistener,同時實現servletcontextlistener的兩個方法,在該兩個方法里面我們可以獲得到 servletcontext 
既然我們獲得到了servletcontext 。因此WEB容器在啟動時,它會為每一個WEB利用程序都創建1個對應的ServletContext對象它代表當前web利用。是1個全局的貯存信息的空間servletContext,所有用戶共用1個。所以,為了節省空間,提高效力,ServletContext中,要放必須的、重要的、所有用戶需要同享的線程又是安全的1些信息。



生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 手机看片福利国产 | 91精品日韩 | 91伊人久久大香线蕉 | 亚洲一区成人 | 亚洲精品亚洲九十七页 | 亚洲最大色视频 | 欧美性猛交xxxxx按摩欧美 | 欧美高清成人videosex | 亚洲一区二区在线成人 | 欧美亚洲国产精品久久第一页 | 亚洲久久影院 | 英国一级毛片 | 天堂 在线最新版在线 | 国产精品乱码免费一区二区 | 精品久久香蕉国产线看观看亚洲 | 你操综合 | 91福利国产在线观看香蕉 | 国产亚洲福利精品一区 | 日本叼嘿| 九一精品| chinesehd国产刺激对白 | 亚洲成网站 | 日本1区| 精品久久久久久中文字幕一区 | 精品视频在线观看一区二区三区 | 亚洲视频精品在线 | www视频免费在线观看 | 日韩高清一区二区三区五区七区 | 伊人久久大香线蕉精品哪里 | 国产福利视频一区二区三区四区 | 91欧美精品综合在线观看 | 欧美精品在线免费观看 | 国产精品福利片 | 国产一区日韩二区欧美三 | 99国产国人青青视频在线观看 | 1024在线视频国产在线播放 | 午夜dj在线观看免费高清在线 | 亚洲精品在线播放视频 | 欧美xxxxx九色视频免费观看 | 国产亚洲一区二区在线观看 | 最近最新中文字幕免费1 |