最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java Web項目啟動執(zhí)行順序

 更新時間:2018年06月13日 15:08:51   作者:蔡小白的博客  
這篇文章主要介紹了詳解Java Web項目啟動執(zhí)行順序,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、web.xml配置節(jié)點簡介

(1) context-param

格式定義

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:spring/spring-mybatis.xml</param-value>
</context-param>

作用:

  1. 該元素用來聲明應用范圍(整個WEB項目)內的上下文初始化參數。
  2. param-name 設定上下文的參數名稱。必須是唯一名稱
  3. param-value 設定的參數名稱的值,這里的例子是指定spring配置文件的位置

(2) listener

格式定義

//listen-class 指定監(jiān)聽類,該類繼承ServletContextListener 包含初始化方法contextInitialized(ServletContextEvent event) 和銷毀方法contextDestoryed(ServletContextEvent event)
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

作用:該元素用來注冊一個監(jiān)聽器類??梢允盏绞录裁磿r候發(fā)生以及用什么作為響應的通知。事件監(jiān)聽程序在建立、修改和刪除會話或servlet環(huán)境時得到通知。常與context-param聯合使用。

(3) filter

格式定義

<filter>
  <filter-name>CharacterEncodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CharacterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

作用:用于指定WEB容器的過濾器, filter能夠在一個請求到達servlet之前預處理用戶請求,也可以在離開servlet時處理http響應;在執(zhí)行servlet之前,首先執(zhí)行filter程序,并為之做一些預處理工作;根據程序需要修改請求和響應;在servlet被調用之后截獲servlet的執(zhí)行。

(4)servlet

- 格式定義

//配置Spring MVC,指定處理請求的Servlet,有兩種方式:
//1. 默認查找MVC配置文件的地址是:/WEB-INF/${servletName}-servlet.xml
//2. 可以通過配置修改MVC配置文件的位置,需要在配置DispatcherServlet時指定MVC配置文件的位置。
//這里使用的是第二種方式

<!-- Springmvc的核心控制器 -->
  <servlet>
    <servlet-name>dispatchServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatchServlet</servlet-name>
    <url-pattern>*.shtml</url-pattern>
  </servlet-mapping>

作用:

  1. 創(chuàng)建并返回一個包含基于客戶請求性質的動態(tài)內容的完整的html頁面;
  2. 創(chuàng)建可嵌入到現有的html頁面中的一部分html頁面(html片段);
  3. 讀取客戶端發(fā)來的隱藏數據;
  4. 讀取客戶端發(fā)來的顯示數據;
  5. 與其他服務器資源(包括數據庫和java的應用程序)進行通信;

二、 web.xml加載過程(步驟):

  1. 啟動web項目,容器(如Tomcat、Apache)會去讀取它的配置文件web.xml 中的兩個節(jié)點,context-param和listener。
  2. 緊接著,容器將創(chuàng)建一個ServletContext(又稱為:Servlet上下文),應用范圍內即整個WEB項目都能使用這個Servlet上下文。
  3. 容器將< context-param >轉化為鍵值對,并交給ServletContext。
  4. 容器創(chuàng)建< listener >中的類實例,即創(chuàng)建監(jiān)聽。(備注:listener定義的類可以是自定義的類但必須需要繼承ServletContextListener)。
  5. 在監(jiān)聽中會有contextInitialized(ServletContextEvent args)初始化方法,在這個方法中獲得:ServletContext = ServletContextEvent.getServletContext(); context-param的值 = ServletContext.getInitParameter(“context-param的鍵”); 在這個類中還必須有一個contextDestroyed(ServletContextEvent event) 銷毀方法。用于關閉應用前釋放資源,比如說數據庫連接的關閉。
  6. 得到這個context-param的值之后,你就可以做一些操作了。注意,這個時候你的WEB項目還沒有完全啟動完成。這個動作會比所有的Servlet都要早。換句話說,這個時候,你對 < context-param > 中的鍵值做的操作,將在你的WEB項目完全啟動之前被執(zhí)行。
  7. 舉例.你可能想在項目啟動之前就打開數據庫。那么這里就可以在< context-param >中設置數據庫的連接方式,在監(jiān)聽類中初始化數據庫的連接。

補充知識:ServletContext,是一個全局的儲存信息的空間,服務器開始,其就存在,服務器關閉,其才釋放。request,一個用戶可有多個;session,一個用戶一個;而servletContext,所有用戶共用一個。所以,為了節(jié)省空間,提高效率,ServletContext中,要放必須的、重要的、所有用戶需要共享的線程又是安全的一些信息。例如,一個購物網站,用戶要訪問商品的詳細信息,如果放在session域,每個用戶都要訪問一遍數據庫,這樣效率太低;而放在ServletContext中,服務器一啟動,就訪問數據庫將商品信息放入數據庫,這樣所有用戶只需要通過上下文就能訪問到商品的信息。

三、web.xml節(jié)點加載順序:

  • web.xml節(jié)點的加載順序與它們在web.xml中位置的先后無關,即不會因為< filter >寫在< context-param >前面就先加載< filter >。
  • 上文也提到到了,< context-param >用于對ServletContext提供鍵值對,即應用程序的上下文信息。而listener、servlet等節(jié)點在初始化的過程中會使用到這些上下文信息,所以最后我們得出web.xml節(jié)點的加載順序應該為:context-param->listener->filter->servlet。
  • 對于某類配置節(jié)點而言,位置的先后是有要求的。以servlet舉例,與servlet相關的配置節(jié)點是servlet-mapping,對于擁有相同配置節(jié)servlet-name的servlet和servlet-mapping來說,servlet-mapping必須在servlet后定義,否則當解析到servlet-mapping時,它的servlet-name還沒有定義。web 容器啟動時初始化每個 servlet時,是按照 servlet配置節(jié)出現的順序來初始化的。
  • 最終結論: web.xml 的加載順序是:[context-param -> listener -> filter -> servlet -> spring] ,而同類型節(jié)點之間的實際程序調用的時候的順序是根據對應的 mapping 的順序進行調用的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • java實現mp3合并的方法

    java實現mp3合并的方法

    這篇文章主要介紹了java實現mp3合并的方法,是Java操作多媒體文件的一個典型應用,非常具有參考借鑒價值,需要的朋友可以參考下
    2014-10-10
  • Maven中央倉庫地址配置大全

    Maven中央倉庫地址配置大全

    這篇文章主要介紹了Maven中央倉庫地址配置大全,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Java根據url生成圖片、截圖效果

    Java根據url生成圖片、截圖效果

    文章詳細介紹了如何使用Java和Node.js結合Puppeteer庫根據URL截圖,并將圖片轉換為標準輸出流返回給Java程序,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • JDBC獲取數據庫連接的5種方式實例

    JDBC獲取數據庫連接的5種方式實例

    JDBC是一種用于執(zhí)行SQL語句的JavaAPI,為多種關系數據庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成,提供了諸如查詢和更新數據庫中數據的方法,這篇文章主要給大家介紹了關于JDBC獲取數據庫連接的5種方式,需要的朋友可以參考下
    2022-06-06
  • MyBatis如何使用(一)

    MyBatis如何使用(一)

    這篇文章主要介紹了MyBatis如何使用(一)的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • Kotlin 與 Java基本語法對比

    Kotlin 與 Java基本語法對比

    這篇文章主要介紹了Kotlin 與 Java基本語法對比的相關資料,需要的朋友可以參考下
    2017-05-05
  • Spring集成Struts與Hibernate入門詳解

    Spring集成Struts與Hibernate入門詳解

    這篇文章主要給大家介紹了關于Spring集成Struts與Hibernate的相關資料,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • 淺談springboot項目中定時任務如何優(yōu)雅退出

    淺談springboot項目中定時任務如何優(yōu)雅退出

    這篇文章主要介紹了淺談springboot項目中定時任務如何優(yōu)雅退出?具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • java實現單詞小游戲

    java實現單詞小游戲

    這篇文章主要為大家詳細介紹了java實現單詞小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • Mybatis如何實現InsertOrUpdate功能

    Mybatis如何實現InsertOrUpdate功能

    這篇文章主要介紹了Mybatis如何實現InsertOrUpdate功能,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評論

孝昌县| 普洱| 邛崃市| 海门市| 呼伦贝尔市| 花莲县| 桦川县| 饶平县| 凤翔县| 长岭县| 高要市| 永德县| 隆化县| 无锡市| 进贤县| 赤壁市| 甘南县| 富裕县| 个旧市| 长泰县| 余干县| 丽水市| 金溪县| 黑龙江省| 宁乡县| 永城市| 长乐市| 分宜县| 友谊县| 那曲县| 宣恩县| 墨竹工卡县| 淮北市| 紫金县| 浙江省| 迁西县| 曲靖市| 青田县| 洛宁县| 松原市| 合肥市|