Java--Servlet基礎(chǔ)

web容器啟動(dòng)

在 WEB 容器啟動(dòng)后,會(huì)讀取 Servlet 設(shè)置信息,將 Servlet 類加載并實(shí)例化,并為每個(gè) Servlet 設(shè)置信息產(chǎn)生一個(gè)
ServletConfig 對(duì)象,而后調(diào)用 Servlet 接口的 init() 方法,并將產(chǎn)生的 ServletConfig 對(duì)象當(dāng)作參數(shù)傳入。

Servlet接口

  • init(),在第一次請(qǐng)求servlet時(shí)會(huì)被調(diào)用,且整個(gè)生命周期只會(huì)被調(diào)用一次。一般來(lái)說(shuō),初始化時(shí)servlet容器會(huì)通過(guò)init()方法將一個(gè)ServletConfig對(duì)象傳遞給相應(yīng)的內(nèi)部成員變量,以供后續(xù)getXXX調(diào)用。
  • service(),每當(dāng)有請(qǐng)求到來(lái),就調(diào)用這個(gè)方法。
    • HttpServlet中繼承了抽象類GenericServlet,而GenericServlet實(shí)現(xiàn)了接口Servlet, ServletConfig,所以HttpServlet中需要繼承并重寫(xiě)servlet方法,里面封裝了GET、POST、PUT等多個(gè)HTTP方法,所以當(dāng)編寫(xiě)自己的httpservlet時(shí),只需要重寫(xiě)相應(yīng)的http方法。Servlet容器會(huì)通過(guò)調(diào)用service()方法,從而調(diào)用到自己重寫(xiě)的http方法。
  • destory(),關(guān)閉Servlet容器或者卸載應(yīng)用程序時(shí)調(diào)用,一般在這個(gè)方法中編寫(xiě)清除代碼。
  • getServletConfig(),返回一個(gè)ServletConfig對(duì)象
  • getServletInfo(),返回一個(gè)字符串對(duì)象,可以自己定義。

ServletConfig

  • getServletContext(),ServletContext是一個(gè)接口,表示Servlet應(yīng)用程序,每個(gè)Web應(yīng)用程序只有一個(gè)上下文,在將一個(gè)應(yīng)用程序不熟到多個(gè)容器的分布式環(huán)境中,每臺(tái)Java虛擬機(jī)只有一個(gè)ServletContext對(duì)象。
  • getInitParameter(),可以取得@WebServlet或者 部署描述符 中的配置信息。(@WebServlet還需要配合@WebInitParam來(lái)使用)
  • getInitParameterNames(); 取得所有配置信息的名稱
  • getServletName(),取得servlet的名稱。

GenericServlet

  • 同時(shí)implements Servlet, ServletConfig
  • 主要作用:實(shí)現(xiàn)了ServletConfig中的所有方法
  • 實(shí)現(xiàn)了Servlet中除service外的所有方法。
  • 最重要的是,實(shí)現(xiàn)了Servlet中的init方法中要求的“將ServletConfig對(duì)象賦予類中的成員變量,以便getXXX調(diào)用,但是又沒(méi)有占據(jù)原本的無(wú)參init()方法,所以后面如果有需要,還是可以自己重現(xiàn)init()方法來(lái)實(shí)現(xiàn)自己的初始化,這個(gè)無(wú)參方法 會(huì)在public void init(ServletConfig config)中被調(diào)用。

HttpServlet

  • 繼承自GenericServlet,實(shí)現(xiàn)了GenericServlet唯一的抽象方法service();
  • 所有繼承HttpServlet的類,已經(jīng)可以分別調(diào)用http.getServletConfig()和http.getServletContext();,一般來(lái)說(shuō)我們也不需要重寫(xiě)這兩個(gè)方法。

部署描述符web.xml

  • 放在WEB-INF目錄下
  • 優(yōu)點(diǎn):如果需要修改配置值,如Servlet路徑,則不需要重現(xiàn)編譯Servlet類。
  • 優(yōu)點(diǎn)2:可以將初始參數(shù)傳給一個(gè)Servlet,不需要重新編譯Servlet類,就可以對(duì)它們進(jìn)行編輯。
  • 如果同時(shí)在@WebServlet和部署描述符上定義值,則部署描述符的優(yōu)先級(jí)更高。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目標(biāo) servlet的生命周期 servletConfig與ServletContext定義,及其二者的區(qū)別 監(jiān)聽(tīng)...
    arkulo閱讀 1,069評(píng)論 0 5
  • 什么是Servlet Servlet的作用是為Java程序提供一個(gè)統(tǒng)一的web應(yīng)用的規(guī)范,方便程序員統(tǒng)一的使用這種...
    Rick617閱讀 11,212評(píng)論 2 48
  • 這部分主要是與Java Web和Web Service相關(guān)的面試題。 96、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,507評(píng)論 0 10
  • 追憶 心中有個(gè)地方一直藏著一個(gè)少年,也許時(shí)間流逝,記憶碎片化,也許有著少年的回憶已經(jīng)變成追憶。盡管我已經(jīng)忘記少年的...
    陳大均閱讀 279評(píng)論 0 1
  • 11/06/2016 周六故事: 你只有試過(guò)不同人的人生,才知道真正想要什么樣的生活。 七點(diǎn)醒了刷手機(jī)到七點(diǎn)半滾床...
    春風(fēng)十里難如你閱讀 410評(píng)論 0 0

友情鏈接更多精彩內(nèi)容