JSP中需要區(qū)別的幾個(gè)概念

備注

這里只是簡(jiǎn)單區(qū)別每組概念,不作具體代碼演示。

請(qǐng)求重定向和請(qǐng)求轉(zhuǎn)發(fā)

首先介紹下兩種行為:
請(qǐng)求重定向:客戶端行為,本質(zhì)上來(lái)說相當(dāng)于兩次請(qǐng)求,因此前一次的請(qǐng)求對(duì)象不會(huì)保存,并且URL地址會(huì)改變。代碼實(shí)現(xiàn):response.sendRedirect()
請(qǐng)求轉(zhuǎn)發(fā):服務(wù)器行為,本質(zhì)上是一次請(qǐng)求,因此前一次的請(qǐng)求對(duì)象會(huì)保存,并且URL地址不會(huì)改變。代碼實(shí)現(xiàn):request.getRequestDispatcher().forward(request,response)
那兩者到底有什么區(qū)別呢?舉個(gè)生活中的例子:
小明同學(xué)想向?qū)W校申請(qǐng)借教室,于是他填好了申請(qǐng)表,來(lái)到了招生辦申請(qǐng),但招生辦的老師說:“同學(xué),我們這里不負(fù)責(zé)借教室哦,你想借教室的話要去找教務(wù)處?!毙∶髦缓秒x開招生辦,去找教務(wù)處再填一次申請(qǐng)表,再申請(qǐng)一次,這就是請(qǐng)求重定向。
小強(qiáng)同學(xué)同樣想申請(qǐng)借教室,他也是填好了申請(qǐng)表來(lái)到了招生辦申請(qǐng),但這次招生辦的老師比較熱心:“同學(xué)你把申請(qǐng)表給我,在外面等一下吧,我?guī)湍阆蚪虅?wù)處申請(qǐng),你就不用再走一趟了。”這就是請(qǐng)求轉(zhuǎn)發(fā)。
這里小明和小強(qiáng)好比是客戶端,學(xué)校好比是服務(wù)器,而申請(qǐng)表中的申請(qǐng)資料則好比是請(qǐng)求對(duì)象。小明向招生辦申請(qǐng)借教室和向教務(wù)處申請(qǐng)是兩個(gè)不同的請(qǐng)求,要填兩次申請(qǐng)表,因此前一次的請(qǐng)求對(duì)象不會(huì)被保存,就像第一次的申請(qǐng)表已經(jīng)作廢了,小明又要再填一次申請(qǐng)表,而小明自己又跑了一趟,去到了教務(wù)處,所以請(qǐng)求重定向是客戶端行為,并且URL地址發(fā)生了改變。
小強(qiáng)則不同,招生辦的老師幫他完成了向教務(wù)處的申請(qǐng),申請(qǐng)資料也是直接挪用申請(qǐng)表上的,小強(qiáng)不需要在填寫一次申請(qǐng)表,因此這兩次實(shí)際上是一次請(qǐng)求,小強(qiáng)也沒有離開招生辦,因此請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)器行為,URL地址不會(huì)改變。

Session和Cookie

共同點(diǎn):

  • 都是用來(lái)保存用戶狀態(tài)和用戶信息的機(jī)制
  • 都有生存期限,即都會(huì)過期

區(qū)別:

  • 保存位置:session保存在服務(wù)器(的內(nèi)存),cookie以文本文件的形式保存在客戶端
  • 數(shù)據(jù)類型:session中保存的是Object類型(任意數(shù)據(jù)類型),cookie中保存的是String類型(字符串類型)
  • 銷毀時(shí)間:session會(huì)隨會(huì)話的結(jié)束而銷毀,cookie則會(huì)長(zhǎng)期保存在客戶端 (當(dāng)然cookie也是有生存期限的)
  • 作用:session保存重要的、安全性較高的信息,cookie保存相對(duì)不重要、安全性不高的信息(比如用戶的瀏覽記錄、搜索記錄等信息)

總的來(lái)說,session的安全性比cookie要高。

Iuclude指令和Include動(dòng)作

  • include指令代碼為:<%@ include file="..." %>,include動(dòng)作代碼為:<jsp:include page="...">
  • include指令作用在頁(yè)面轉(zhuǎn)換期間,include動(dòng)作作用在請(qǐng)求期間
  • include指令會(huì)將包含頁(yè)面的JSP代碼插入其中,而 include動(dòng)作只將包含頁(yè)面的輸出包含進(jìn)來(lái)
  • 使用include指令,主頁(yè)面和包含頁(yè)面會(huì)轉(zhuǎn)換為一個(gè)Servlet,而使用include動(dòng)作,主頁(yè)面和包含頁(yè)面會(huì)轉(zhuǎn)換為兩個(gè)獨(dú)立的Servlet

include指令的優(yōu)點(diǎn)在于其功能強(qiáng)大,所包含的代碼可以含有總體上影響主頁(yè)面的JSP構(gòu)造,比如屬性、方法的定義和文檔類型的設(shè)定。而由于只包含輸出,并非頁(yè)面的實(shí)際代碼,因此include動(dòng)作包含的頁(yè)面不能使用任何有可能在整體上影響主頁(yè)面的JSP構(gòu)造。
然而include指令的缺點(diǎn)是難以維護(hù),只要被包含的頁(yè)面發(fā)生更改,就必須更改主頁(yè)面,這是因?yàn)橹黜?yè)面不會(huì)自動(dòng)地查看被包含的頁(yè)面是否發(fā)生更改。而使用include動(dòng)作則無(wú)需對(duì)主頁(yè)面進(jìn)行更改,因此include動(dòng)作比include指令在維護(hù)上有著明顯優(yōu)勢(shì)。
include指令是將源文件與include添加的文件一起編譯成一個(gè)servlet,因此執(zhí)行速度相比起include動(dòng)作來(lái)說稍快一些。但如果頁(yè)面經(jīng)常變化的話,使用include動(dòng)作只需要單獨(dú)編譯主頁(yè)面或者包含頁(yè)面就行,這樣一來(lái)效率比起使用include指令會(huì)更高。

參考資料:

慕課網(wǎng)(IMOOC)

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評(píng)論 19 139
  • 一、jsp定義及作用 JSP技術(shù)使用Java編程語(yǔ)言編寫類XML的tags和scriptlets,來(lái)封裝產(chǎn)生動(dòng)態(tài)網(wǎng)...
    yzw12138閱讀 1,475評(píng)論 0 0
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,950評(píng)論 25 709
  • 從高中開始還是看了不少關(guān)于強(qiáng)奸、性虐待、還有關(guān)于同性戀的影片和文章,一直以來(lái)也沒有把自己的感想,寫下來(lái)。 我之所以...
    葉子的綠光閱讀 753評(píng)論 0 3
  • 今天的作業(yè)是古風(fēng)人物。需要上色的部分不多,主要練習(xí)的還是人物線條。感覺自己今天的人物輪廓還可以,線條比較流暢。 繪...
    金炭閱讀 173評(píng)論 1 3

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