日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php框架 > 框架設(shè)計(jì) > spring容器啟動(dòng)之我見(一)

spring容器啟動(dòng)之我見(一)

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-04-29 08:17:21 閱讀次數(shù):3506次
spring容器啟動(dòng)之我見。
本人也是自己看看源碼,然后方便以后自己記憶和理解,故寫此文章,如果有甚么錯(cuò)的地方還請(qǐng)大家提出。

針對(duì)tomcat做服務(wù)器的項(xiàng)目,我們首先看的就是web.xml文件,spring容器啟動(dòng)去加載監(jiān)聽器
看以下代碼:其監(jiān)聽器使用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>
視察上面發(fā)現(xiàn) 這里我們自己寫了1個(gè)監(jiān)聽類CGYContextLoaderListener,
我們先來(lái)了解 spring api 中的ContextLoaderListener 類
ContextLoaderListener監(jiān)聽器的作用就是啟動(dòng)Web容器時(shí),自動(dòng)裝配ApplicationContext的配置信息。由于它實(shí)現(xiàn)了ServletContextListener這個(gè)接口,在web.xml配置這個(gè)監(jiān)聽器,啟動(dòng)容器時(shí),就會(huì)默許履行它實(shí)現(xiàn)的方法。至于ApplicationContext.xml這個(gè)配置文件部署在哪,如何配置多個(gè)xml文件,書上都沒怎樣詳細(xì)說(shuō)明。現(xiàn)在的方法就是查看它的API文檔。在ContextLoaderListener中關(guān)聯(lián)了ContextLoader這個(gè)類,所以全部加載配置進(jìn)程由ContextLoader來(lái)完成??纯此腁PI說(shuō)明。


第1段說(shuō)明ContextLoader可以由 ContextLoaderListener和ContextLoaderServlet生成。如果查看ContextLoaderServlet的API,可以看到它也關(guān)聯(lián)了ContextLoader這個(gè)類而且它實(shí)現(xiàn)了HttpServlet這個(gè)接口。
第2段,ContextLoader創(chuàng)建的是 XmlWebApplicationContext這樣1個(gè)類,它實(shí)現(xiàn)的接口是WebApplicationContext->ConfigurableWebApplicationContex>ApplicationContext->BeanFactory這樣1來(lái)spring中的所有bean都由這個(gè)類來(lái)創(chuàng)建


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

因而可知applicationContext.xml的文件位置就能夠有兩種默許實(shí)現(xiàn):

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

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

這樣我們看到CGYContextLoaderListener 這個(gè)類,我們就知道他肯定也實(shí)現(xiàn)了接口servlet api ServletContextListener, 或我們知道它繼承了類spring api ContextLoaderListener

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


ServletContext : 每個(gè)web利用都有1個(gè) ServletContext與之相干聯(lián)。 ServletContext對(duì)象在利用啟動(dòng)的被創(chuàng)建,在利用關(guān)閉的時(shí)候被燒毀。 ServletContext在全局范圍內(nèi)有效,類似于利用中的1個(gè)全局變量。

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

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

 用戶需要?jiǎng)?chuàng)建1個(gè)java類實(shí)現(xiàn)  javax.servlet.ServletContextListener接口并提供上面兩個(gè)方法的實(shí)現(xiàn)。

示例: 當(dāng)你需要在處理任何客戶端要求之前創(chuàng)建1個(gè)數(shù)據(jù)庫(kù)連接,并且希望在全部利用進(jìn)程中該連接都是可用的,這個(gè)時(shí)候ServletContextListener接口就會(huì)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啟動(dòng)以后被調(diào)用,并準(zhǔn)備好處理客戶端要求  
  18.   public void contextInitialized(ServletContextEvent event)  {  
  19.     this.context = event.getServletContext();  
  20.     conn = DbConnection.getConnection;  
  21.     // 這里DbConnection是1個(gè)定制好的類用以創(chuàng)建1個(gè)數(shù)據(jù)庫(kù)連接  
  22.     context = setAttribute(”dbConn”,conn);  
  23.   }  
  24.   
  25.   //這個(gè)方法在ServletContext 將要關(guān)閉的時(shí)候調(diào)用  
  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利用啟動(dòng)的時(shí)候,我們就可以在任意的servlet或jsp中通過(guò)下面的方式獲得數(shù)據(jù)庫(kù)連接:

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



生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 日韩免费网站 | 日本一区二区在线 | 亚洲国产精品成人 | 久久九九久精品国产 | 97se婷婷 | 亚洲电影自拍 | 欧美日韩精品二区 | 日本欧美国产 | 国产成人精品久久久 | 国产99久久精品一区二区永久免费 | 天天爽夜夜爽夜夜爽精品视频 | 亚洲精品国产一区 | 超碰伊人网 | 国产精品美女久久久网av | av成人免费 | 日韩欧美精品在线观看 | 波多野结衣精品在线 | 三级久久| 亚洲一区二区成人 | 精品美女一区 | 热久热久| 国产精品免费在线 | 国产精品欧美一区二区三区不卡 | 五月婷婷综合色拍 | 中文字幕综合在线 | 国产男女视频 | 国产黄色在线播放 | 宅男天堂 | 97视频在线播放 | 三级网址在线播放 | 中文在线а√天堂官网 | 91精品国产一区二区 | 中文字字幕一区二区三区四区五区 | 99国产精品久久 | 玖玖玖国产精品 | 日韩成人精品视频 | 久久久久9999亚洲精品 | 视频一区在线播放 | 国产二区三区 | 成人在线观| 国产精品高清在线 |