Servlet中請(qǐng)求轉(zhuǎn)發(fā)時(shí)forward()和include()的區(qū)別

1 定義

  • forward():表示在服務(wù)器端從一個(gè)Servlet中將請(qǐng)求轉(zhuǎn)發(fā)到另一個(gè)資源(Servlet、Jsp或Html等)纸型,本意是讓第一個(gè)組件對(duì)請(qǐng)求做些預(yù)處理(或者什么都不做)绑青,而讓另一組件處理并返回響應(yīng)履因。
  • include():表示在響應(yīng)中包含另一個(gè)資源(Servlet概龄、Jsp或Html等)的響應(yīng)內(nèi)容丐谋,最終被包含的頁(yè)面產(chǎn)生的任何響應(yīng)都將并入原來(lái)的response對(duì)象芍碧,然后一起輸出到客戶端。

2 關(guān)于狀態(tài)碼和響應(yīng)頭

  • forward():調(diào)用者和被調(diào)用者設(shè)置的狀態(tài)碼和響應(yīng)頭都不會(huì)被忽略号俐。
  • include():被調(diào)用者(如被包含的Servlet)不能改變響應(yīng)消息的狀態(tài)碼和響應(yīng)頭泌豆,即會(huì)忽略被調(diào)用者設(shè)置的狀態(tài)碼和響應(yīng)頭。

3 誰(shuí)負(fù)責(zé)發(fā)回響應(yīng)

  • forward():表示轉(zhuǎn)發(fā)吏饿,則控制權(quán)也同時(shí)交給了另一個(gè)組件踪危,所以最終由另一組件返回響應(yīng)。
  • include():表示包含猪落,則控制權(quán)還在自己身上贞远,所以最終還是由自己返回響應(yīng)。

4 請(qǐng)求轉(zhuǎn)發(fā)后的代碼是否執(zhí)行许布?

  • forward():轉(zhuǎn)發(fā)后還會(huì)返回主頁(yè)面繼續(xù)執(zhí)行兴革,但不可以繼續(xù)輸出響應(yīng)信息绎晃。
  • include():轉(zhuǎn)發(fā)后還會(huì)返回主頁(yè)面繼續(xù)執(zhí)行蜜唾,仍然可以繼續(xù)輸出響應(yīng)信息。

5 關(guān)于forward()庶艾,引用JavaEE文檔中的說(shuō)明:

  • 必須在響應(yīng)被提交到客戶端(刷新響應(yīng)正文輸出到流中)前調(diào)用forward(即在調(diào)用forward之前必須清空響應(yīng)緩沖區(qū))袁余,否則會(huì)拋出IllegalStateException異常。
  • 在forward之前咱揍,響應(yīng)緩沖區(qū)中未提交的數(shù)據(jù)會(huì)被自動(dòng)清除颖榜。所以容器將忽略原Servlet所有其他輸出。

6 補(bǔ)充說(shuō)明:關(guān)于Servlet中的輸出緩沖區(qū)

  • 在Servlet中使用ServletOutputStream和PrintWriter輸出響應(yīng)正文時(shí),數(shù)據(jù)首先被寫入到Servlet引擎提供的一個(gè)輸出緩沖區(qū)中掩完。直到滿足以下條件之一時(shí)噪漾,Servlet引擎才會(huì)吧緩沖區(qū)中的內(nèi)容真正發(fā)送到客戶端。
    • 輸出緩沖區(qū)被填滿且蓬。
    • Servlet已經(jīng)寫入了所有的響應(yīng)內(nèi)容欣硼。
    • Servlet調(diào)用響應(yīng)對(duì)象的flushBuffer()方法,強(qiáng)制地將緩沖區(qū)內(nèi)的響應(yīng)正文數(shù)據(jù)發(fā)送到客戶端恶阴。
    • Servlet調(diào)用ServletOutputStream或PrintWriter對(duì)象的flush()方法或close()方法诈胜。
  • 為了確保ServletOutputStream或PrintWriter輸出的所有數(shù)據(jù)都能被提交給客戶端,建議在所有數(shù)據(jù)都輸出完畢后冯事,調(diào)用ServletOutputStream或PrintWriter的close()方法焦匈。
  • 使用輸出緩沖區(qū)后,Servlet引擎就可以將響應(yīng)狀態(tài)行昵仅、各響應(yīng)頭和響應(yīng)正文嚴(yán)格按照HTTP消息的位置順序進(jìn)行調(diào)整后再輸出到客戶端缓熟。
  • 如果在提交響應(yīng)到客戶端時(shí),輸出緩沖區(qū)中已經(jīng)裝入了所有的響應(yīng)內(nèi)容摔笤,Servlet引擎將計(jì)算響應(yīng)正文部分的大小并自動(dòng)設(shè)置Content-Length頭字段荚虚。
  • 緩沖區(qū)自動(dòng)刷新(清出)功能。(注意是刷新(flush)籍茧,而不是清除(flushBuffer))
    • 如果設(shè)置為自動(dòng)刷新版述,則在緩沖區(qū)滿或者使用flush()方法顯式清出時(shí),都會(huì)向客戶端輸出信息寞冯。
    • 如果設(shè)置為不自動(dòng)刷新渴析,則必須明確使用flush()方法清出數(shù)據(jù),否則如果緩沖區(qū)滿了的話吮龄,將會(huì)產(chǎn)生IOException異常俭茧。
  • 使用緩沖區(qū)能夠減少數(shù)據(jù)傳輸?shù)拇螖?shù),提高程序的運(yùn)行效率漓帚。但也有可能產(chǎn)生響應(yīng)延遲的問(wèn)題母债,因?yàn)樵诰彌_區(qū)滿或使用flush()顯示清出之前,數(shù)據(jù)并不會(huì)真正發(fā)送到客戶端尝抖。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毡们,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子昧辽,更是在濱河造成了極大的恐慌衙熔,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搅荞,死亡現(xiàn)場(chǎng)離奇詭異红氯,居然都是意外死亡框咙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門痢甘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)喇嘱,“玉大人,你說(shuō)我怎么就攤上這事塞栅⊥癯疲” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵构蹬,是天一觀的道長(zhǎng)王暗。 經(jīng)常有香客問(wèn)我,道長(zhǎng)庄敛,這世上最難降的妖魔是什么俗壹? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮藻烤,結(jié)果婚禮上绷雏,老公的妹妹穿的比我還像新娘。我一直安慰自己怖亭,他們只是感情好涎显,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著兴猩,像睡著了一般期吓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倾芝,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天讨勤,我揣著相機(jī)與錄音,去河邊找鬼晨另。 笑死潭千,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的借尿。 我是一名探鬼主播刨晴,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼路翻!你這毒婦竟也來(lái)了狈癞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤帚桩,失蹤者是張志新(化名)和其女友劉穎亿驾,沒想到半個(gè)月后嘹黔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體账嚎,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡莫瞬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了郭蕉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疼邀。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖召锈,靈堂內(nèi)的尸體忽然破棺而出旁振,到底是詐尸還是另有隱情,我是刑警寧澤涨岁,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布拐袜,位于F島的核電站,受9級(jí)特大地震影響梢薪,放射性物質(zhì)發(fā)生泄漏蹬铺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一秉撇、第九天 我趴在偏房一處隱蔽的房頂上張望甜攀。 院中可真熱鬧,春花似錦琐馆、人聲如沸规阀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谁撼。三九已至,卻和暖如春滋饲,著一層夾襖步出監(jiān)牢的瞬間彤敛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工了赌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留墨榄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓勿她,卻偏偏與公主長(zhǎng)得像袄秩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逢并,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理之剧,服務(wù)發(fā)現(xiàn),斷路器砍聊,智...
    卡卡羅2017閱讀 134,716評(píng)論 18 139
  • 簡(jiǎn)書 賈小強(qiáng)轉(zhuǎn)載請(qǐng)注明原創(chuàng)出處背稼,謝謝! Servlet是一種允許響應(yīng)請(qǐng)求的Java類玻蝌。雖然Servlet可以響應(yīng)任...
    賈小強(qiáng)閱讀 10,635評(píng)論 1 44
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法蟹肘,類相關(guān)的語(yǔ)法词疼,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法帘腹,異常的語(yǔ)法贰盗,線程的語(yǔ)...
    子非魚_t_閱讀 31,665評(píng)論 18 399
  • 目標(biāo) servlet的生命周期 servletConfig與ServletContext定義,及其二者的區(qū)別 監(jiān)聽...
    arkulo閱讀 972評(píng)論 0 5
  • 牛集啟夢(mèng)教育阳欲,因校區(qū)擴(kuò)大招生舵盈。 現(xiàn)面向社會(huì)招聘,初中數(shù)學(xué)老師兩名球化,初中英語(yǔ)老師兩名秽晚,物理,化學(xué)老師各一名筒愚。 薪酬待...
    藍(lán)天幼兒園閱讀 377評(píng)論 0 0