Servlet

Servlet

Servlet(Server Applet)是Java Servlet的簡稱某残,稱為小服務(wù)程序或服務(wù)連接器给涕,用于交互式地瀏覽和生成數(shù)據(jù)怖糊,生成動(dòng)態(tài)Web內(nèi)容纱扭。

進(jìn)化史

  1. 實(shí)現(xiàn)Servlet接口必須實(shí)現(xiàn)所有方法

  2. GenericServlet抽象類:只需重寫需要的方法

  3. HttpServlet繼承自GenericServlet類衡怀,將ServletRequst和ServletResponse對象分別轉(zhuǎn)換程HttpServletRequest和HttpServletResponse

  4. JSP 不需要編譯的Servlet

    • EL表達(dá)式輕松訪問應(yīng)用程序?qū)ο?/li>
    • JSTL標(biāo)簽庫在EL的基礎(chǔ)上進(jìn)一步解決了遍歷Map棍矛,集合,條件測試抛杨,XML處理够委,數(shù)據(jù)庫操作訪問等操作的問題
    • Filter攔截Request請求
  5. Spring MVC
    Servlet動(dòng)態(tài)加載可以在不重啟web應(yīng)用前提下添加新的web對象
    實(shí)現(xiàn)依賴注入方法

    ? Module模型:JavaBeans

    ? View視圖:JSP頁面

    ? Controller控制器:Servlet

請求響應(yīng)流程

HTTP請求響應(yīng)流程
  1. Web服務(wù)器將Http請求傳給Servlet容器
  2. Servlet容器
    1. 根據(jù)請求鏈接創(chuàng)建Servlet(init()))
    2. 創(chuàng)建ServletRequest封裝請求,同時(shí)創(chuàng)建ServletResponse封裝響應(yīng)
      1. 調(diào)用Web應(yīng)用定 義的過濾器鏈(遞歸調(diào)用),鏈尾會(huì)調(diào)用Servlet
    3. 調(diào)用Servlet處理請求(service(ServletRequest,ServletResponse))
  3. Servlet處理請求蝶桶,結(jié)束Web過濾器鏈的遞歸調(diào)用
  4. Servlet容器根據(jù)ServletResponse中生成HTTP響應(yīng),并傳給Web服務(wù)器

web服務(wù)器

即HTTP服務(wù)器,僅能響應(yīng)靜態(tài)html頁面請求,單向連接于Servlet容器以響應(yīng)動(dòng)態(tài)資源

Apache

  • 當(dāng)今(2019.6.20)世界上最流行的Web服務(wù)器慨绳,可以處理瀏覽器的HTTP請求,默認(rèn)端口為80
  • Apache只支持HTML等靜態(tài)普通網(wǎng)頁真竖,可以單向連通Tomcat(Apache可以訪問Tomcat的資源脐雪,反之不然)

Servlet容器

Servlet容器是Web服務(wù)器的一部分

  • 為Servlet提供運(yùn)行環(huán)境,通過XML文件配置Servlet恢共,加載战秋、實(shí)例化、調(diào)用和回收Servlet

  • 單個(gè)Web項(xiàng)目會(huì)被Servlet容器封裝成ServletContext

Web應(yīng)用ServletContext

  • 獲取
    getServletContext

  • 提供全局域
    get/set/removeAttribute 全局屬性鍵值對

  • 獲取全局配置
    getInitParameter 讀取全局參數(shù)(需在web.xml中配置<context-param>)

  • 獲取工程目錄下的資源文件
    getRealPath 目錄絕對路徑
    getResourceAsStream 獲取資源的輸入流

  • 監(jiān)聽Web啟動(dòng)和終止

    ? Servlet容器啟動(dòng)或終止Web應(yīng)用(Context)時(shí)讨韭,觸發(fā)事件ServletContextEvent,調(diào)用ServletContextListener接口

    contextInitialized 此方法在Filter初始化前調(diào)用
    contextDestoryed 此方法在所有Servlet和Filter銷毀后調(diào)用

    1. 重寫ServletContextListener接口
    2. 在web.xml配置 <listener><listener-class>重寫類/>/>

Servlet過濾器Filter

? Web服務(wù)器不會(huì)直接調(diào)用指定web資源(Servlet)的service方法前后脂信,而是通過調(diào)用FilterChain的doFilter方法調(diào)用對應(yīng)Servlet的service方法

FilterChain.doFilter(ServletRequest req,ServletResponse resp,FilterChain chain):

  • 如果鏈中有下一個(gè)Filter,調(diào)用其doFilter(req,resp,chain)方法
  • 否則透硝,調(diào)用指定Servlet的service(req,resp)方法

自定義Filter.doFilter(ServletRequest req,ServletResponse resp,FilterChain chain):

  • 通過調(diào)用chain.doFilter(req,resp,chain)實(shí)現(xiàn)遞歸調(diào)用整個(gè)鏈中所有Filter的過濾方法并最終調(diào)用Servlet的service(req,resp)方法

常用過濾器

詳情參考博客園文章《Tomcat常用的過濾器》

作用 過濾器
控制跨域請求的訪問權(quán)限 CorsFilter
防止跨站請求偽造(Cross-site request forgery) CsrfPreventionFilter
防止參數(shù)丟失 FailedRequestFilter
獲取客戶端IP RemoteAddrFilter
獲取客戶端主機(jī) RemoteHostFilter
獲取原始客戶端IP RemoteIpFilter
設(shè)置字符編碼 SetCharacterEncodingFilter
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狰闪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子濒生,更是在濱河造成了極大的恐慌埋泵,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異丽声,居然都是意外死亡礁蔗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門雁社,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浴井,“玉大人,你說我怎么就攤上這事霉撵』钦悖” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵喊巍,是天一觀的道長屠缭。 經(jīng)常有香客問我箍鼓,道長崭参,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任款咖,我火速辦了婚禮何暮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘铐殃。我一直安慰自己海洼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布富腊。 她就那樣靜靜地躺著坏逢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赘被。 梳的紋絲不亂的頭發(fā)上是整,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機(jī)與錄音民假,去河邊找鬼浮入。 笑死,一個(gè)胖子當(dāng)著我的面吹牛羊异,可吹牛的內(nèi)容都是我干的事秀。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼野舶,長吁一口氣:“原來是場噩夢啊……” “哼易迹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起平道,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤睹欲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后巢掺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體句伶,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劲蜻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了考余。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片先嬉。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖楚堤,靈堂內(nèi)的尸體忽然破棺而出疫蔓,到底是詐尸還是另有隱情,我是刑警寧澤身冬,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布衅胀,位于F島的核電站,受9級特大地震影響酥筝,放射性物質(zhì)發(fā)生泄漏滚躯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一嘿歌、第九天 我趴在偏房一處隱蔽的房頂上張望掸掏。 院中可真熱鬧,春花似錦宙帝、人聲如沸丧凤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愿待。三九已至,卻和暖如春靴患,著一層夾襖步出監(jiān)牢的瞬間仍侥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工蚁廓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留访圃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓相嵌,卻偏偏與公主長得像腿时,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子饭宾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容