java web基礎(chǔ)二(JavaGuide-20181213)

  1. include指令include的行為的區(qū)別
  2. JSP九大內(nèi)置對(duì)象歇终,七大動(dòng)作踊东,三大指令
  3. 講解JSP中的四種作用域
  4. 如何實(shí)現(xiàn)JSP或Servlet的單線程模式
  5. 實(shí)現(xiàn)會(huì)話(huà)跟蹤的技術(shù)有哪些
  6. Cookie和Session的的區(qū)別

include指令include的行為的區(qū)別

include指令: JSP可以通過(guò)include指令來(lái)包含其他文件荔棉。被包含的文件可以是JSP文件濒募、HTML文件或文本文件坪郭。包含的文件就好像是該JSP文件的一部分吭产,會(huì)被同時(shí)編譯執(zhí)行侣监。 語(yǔ)法格式如下: <%@ include file="文件相對(duì) url 地址" %>

include動(dòng)作: jsp:include動(dòng)作元素用來(lái)包含靜態(tài)和動(dòng)態(tài)的文件。該動(dòng)作把指定文件插入正在生成的頁(yè)面臣淤。語(yǔ)法格式如下: <jsp:include page="相對(duì) URL 地址" flush="true" />

JSP九大內(nèi)置對(duì)象橄霉,七大動(dòng)作,三大指令

JSP九大內(nèi)置對(duì)象邑蒋,七大動(dòng)作酪劫,三大指令總結(jié)

講解JSP中的四種作用域

JSP中的四種作用域包括page、request寺董、session和application覆糟,具體來(lái)說(shuō):

  • page代表與一個(gè)頁(yè)面相關(guān)的對(duì)象和屬性。
  • request代表與Web客戶(hù)機(jī)發(fā)出的一個(gè)請(qǐng)求相關(guān)的對(duì)象和屬性遮咖。一個(gè)請(qǐng)求可能跨越多個(gè)頁(yè)面滩字,涉及多個(gè)Web組件;需要在頁(yè)面顯示的臨時(shí)數(shù)據(jù)可以置于此作用域御吞。
  • session代表與某個(gè)用戶(hù)與服務(wù)器建立的一次會(huì)話(huà)相關(guān)的對(duì)象和屬性麦箍。跟某個(gè)用戶(hù)相關(guān)的數(shù)據(jù)應(yīng)該放在用戶(hù)自己的session中。
  • application代表與整個(gè)Web應(yīng)用程序相關(guān)的對(duì)象和屬性陶珠,它實(shí)質(zhì)上是跨越整個(gè)Web應(yīng)用程序挟裂,包括多個(gè)頁(yè)面、請(qǐng)求和會(huì)話(huà)的一個(gè)全局作用域揍诽。

如何實(shí)現(xiàn)JSP或Servlet的單線程模式

對(duì)于JSP頁(yè)面诀蓉,可以通過(guò)page指令進(jìn)行設(shè)置栗竖。 <%@page isThreadSafe=”false”%>

對(duì)于Servlet,可以讓自定義的Servlet實(shí)現(xiàn)SingleThreadModel標(biāo)識(shí)接口渠啤。

說(shuō)明:如果將JSP或Servlet設(shè)置成單線程工作模式狐肢,會(huì)導(dǎo)致每個(gè)請(qǐng)求創(chuàng)建一個(gè)Servlet實(shí)例,這種實(shí)踐將導(dǎo)致嚴(yán)重的性能問(wèn)題(服務(wù)器的內(nèi)存壓力很大沥曹,還會(huì)導(dǎo)致頻繁的垃圾回收)份名,所以通常情況下并不會(huì)這么做。

實(shí)現(xiàn)會(huì)話(huà)跟蹤的技術(shù)有哪些

  1. 使用Cookie

向客戶(hù)端發(fā)送Cookie

Cookie c =new Cookie("name","value"); //創(chuàng)建Cookie 
c.setMaxAge(60*60*24); //設(shè)置最大時(shí)效妓美,此處設(shè)置的最大時(shí)效為一天
response.addCookie(c); //把Cookie放入到HTTP響應(yīng)中

從客戶(hù)端讀取Cookie

String name ="name"; 
Cookie[]cookies =request.getCookies(); 
if(cookies !=null){ 
   for(int i= 0;i<cookies.length;i++){ 
    Cookie cookie =cookies[i]; 
    if(name.equals(cookis.getName())) 
    //something is here. 
    //you can get the value 
    cookie.getValue(); 

   }
 }

優(yōu)點(diǎn): 數(shù)據(jù)可以持久保存僵腺,不需要服務(wù)器資源,簡(jiǎn)單壶栋,基于文本的Key-Value

缺點(diǎn): 大小受到限制辰如,用戶(hù)可以禁用Cookie功能,由于保存在本地委刘,有一定的安全風(fēng)險(xiǎn)丧没。

  1. URL 重寫(xiě)

在URL中添加用戶(hù)會(huì)話(huà)的信息作為請(qǐng)求的參數(shù)鹰椒,或者將唯一的會(huì)話(huà)ID添加到URL結(jié)尾以標(biāo)識(shí)一個(gè)會(huì)話(huà)锡移。

優(yōu)點(diǎn): 在Cookie被禁用的時(shí)候依然可以使用

缺點(diǎn): 必須對(duì)網(wǎng)站的URL進(jìn)行編碼,所有頁(yè)面必須動(dòng)態(tài)生成漆际,不能用預(yù)先記錄下來(lái)的URL進(jìn)行訪問(wèn)淆珊。

3.隱藏的表單域

<input type="hidden" name ="session" value="..."/>

優(yōu)點(diǎn): Cookie被禁時(shí)可以使用

缺點(diǎn): 所有頁(yè)面必須是表單提交之后的結(jié)果。

  1. HttpSession

在所有會(huì)話(huà)跟蹤技術(shù)中奸汇,HttpSession對(duì)象是最強(qiáng)大也是功能最多的施符。當(dāng)一個(gè)用戶(hù)第一次訪問(wèn)某個(gè)網(wǎng)站時(shí)會(huì)自動(dòng)創(chuàng)建 HttpSession,每個(gè)用戶(hù)可以訪問(wèn)他自己的HttpSession擂找〈亮撸可以通過(guò)HttpServletRequest對(duì)象的getSession方 法獲得HttpSession,通過(guò)HttpSession的setAttribute方法可以將一個(gè)值放在HttpSession中贯涎,通過(guò)調(diào)用 HttpSession對(duì)象的getAttribute方法听哭,同時(shí)傳入屬性名就可以獲取保存在HttpSession中的對(duì)象。與上面三種方式不同的 是塘雳,HttpSession放在服務(wù)器的內(nèi)存中陆盘,因此不要將過(guò)大的對(duì)象放在里面,即使目前的Servlet容器可以在內(nèi)存將滿(mǎn)時(shí)將HttpSession 中的對(duì)象移到其他存儲(chǔ)設(shè)備中败明,但是這樣勢(shì)必影響性能隘马。添加到HttpSession中的值可以是任意Java對(duì)象,這個(gè)對(duì)象最好實(shí)現(xiàn)了 Serializable接口妻顶,這樣Servlet容器在必要的時(shí)候可以將其序列化到文件中酸员,否則在序列化時(shí)就會(huì)出現(xiàn)異常蜒车。

Cookie和Session的的區(qū)別

  1. 由于HTTP協(xié)議是無(wú)狀態(tài)的協(xié)議,所以服務(wù)端需要記錄用戶(hù)的狀態(tài)時(shí)沸呐,就需要用某種機(jī)制來(lái)識(shí)具體的用戶(hù)醇王,這個(gè)機(jī)制就是Session.典型的場(chǎng)景比如購(gòu)物車(chē),當(dāng)你點(diǎn)擊下單按鈕時(shí)崭添,由于HTTP協(xié)議無(wú)狀態(tài)寓娩,所以并不知道是哪個(gè)用戶(hù)操作的,所以服務(wù)端要為特定的用戶(hù)創(chuàng)建了特定的Session呼渣,用用于標(biāo)識(shí)這個(gè)用戶(hù)棘伴,并且跟蹤用戶(hù),這樣才知道購(gòu)物車(chē)?yán)锩嬗袔妆緯?shū)屁置。這個(gè)Session是保存在服務(wù)端的焊夸,有一個(gè)唯一標(biāo)識(shí)。在服務(wù)端保存Session的方法很多蓝角,內(nèi)存阱穗、數(shù)據(jù)庫(kù)、文件都有使鹅。集群的時(shí)候也要考慮Session的轉(zhuǎn)移揪阶,在大型的網(wǎng)站,一般會(huì)有專(zhuān)門(mén)的Session服務(wù)器集群患朱,用來(lái)保存用戶(hù)會(huì)話(huà)鲁僚,這個(gè)時(shí)候 Session 信息都是放在內(nèi)存的,使用一些緩存服務(wù)比如Memcached之類(lèi)的來(lái)放 Session裁厅。
  2. 思考一下服務(wù)端如何識(shí)別特定的客戶(hù)冰沙?這個(gè)時(shí)候Cookie就登場(chǎng)了。每次HTTP請(qǐng)求的時(shí)候执虹,客戶(hù)端都會(huì)發(fā)送相應(yīng)的Cookie信息到服務(wù)端拓挥。實(shí)際上大多數(shù)的應(yīng)用都是用 Cookie 來(lái)實(shí)現(xiàn)Session跟蹤的,第一次創(chuàng)建Session的時(shí)候袋励,服務(wù)端會(huì)在HTTP協(xié)議中告訴客戶(hù)端侥啤,需要在 Cookie 里面記錄一個(gè)Session ID,以后每次請(qǐng)求把這個(gè)會(huì)話(huà)ID發(fā)送到服務(wù)器插龄,我就知道你是誰(shuí)了愿棋。有人問(wèn),如果客戶(hù)端的瀏覽器禁用了 Cookie 怎么辦均牢?一般這種情況下糠雨,會(huì)使用一種叫做URL重寫(xiě)的技術(shù)來(lái)進(jìn)行會(huì)話(huà)跟蹤,即每次HTTP交互徘跪,URL后面都會(huì)被附加上一個(gè)諸如 sid=xxxxx 這樣的參數(shù)甘邀,服務(wù)端據(jù)此來(lái)識(shí)別用戶(hù)琅攘。
  3. Cookie其實(shí)還可以用在一些方便用戶(hù)的場(chǎng)景下,設(shè)想你某次登陸過(guò)一個(gè)網(wǎng)站松邪,下次登錄的時(shí)候不想再次輸入賬號(hào)了坞琴,怎么辦?這個(gè)信息可以寫(xiě)到Cookie里面逗抑,訪問(wèn)網(wǎng)站的時(shí)候剧辐,網(wǎng)站頁(yè)面的腳本可以讀取這個(gè)信息,就自動(dòng)幫你把用戶(hù)名給填了邮府,能夠方便一下用戶(hù)荧关。這也是Cookie名稱(chēng)的由來(lái),給用戶(hù)的一點(diǎn)甜頭褂傀。所以忍啤,總結(jié)一下:Session是在服務(wù)端保存的一個(gè)數(shù)據(jù)結(jié)構(gòu),用來(lái)跟蹤用戶(hù)的狀態(tài)仙辟,這個(gè)數(shù)據(jù)可以保存在集群同波、數(shù)據(jù)庫(kù)、文件中叠国;Cookie是客戶(hù)端保存用戶(hù)信息的一種機(jī)制未檩,用來(lái)記錄用戶(hù)的一些信息,也是實(shí)現(xiàn)Session的一種方式煎饼。

參考:

https://www.zhihu.com/question/19786827/answer/28752144

《javaweb整合開(kāi)發(fā)王者歸來(lái)》P158 Cookie和Session的比較

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末讹挎,一起剝皮案震驚了整個(gè)濱河市校赤,隨后出現(xiàn)的幾起案子吆玖,更是在濱河造成了極大的恐慌,老刑警劉巖马篮,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沾乘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡浑测,警方通過(guò)查閱死者的電腦和手機(jī)翅阵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)迁央,“玉大人掷匠,你說(shuō)我怎么就攤上這事♂Γ” “怎么了讹语?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蜂科。 經(jīng)常有香客問(wèn)我顽决,道長(zhǎng)短条,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任才菠,我火速辦了婚禮茸时,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赋访。我一直安慰自己可都,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布蚓耽。 她就那樣靜靜地躺著汹粤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪田晚。 梳的紋絲不亂的頭發(fā)上嘱兼,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音贤徒,去河邊找鬼芹壕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛接奈,可吹牛的內(nèi)容都是我干的踢涌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼序宦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼睁壁!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起互捌,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤潘明,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后秕噪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體钳降,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年腌巾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遂填。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡澈蝙,死狀恐怖吓坚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灯荧,我是刑警寧澤礁击,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響客税,放射性物質(zhì)發(fā)生泄漏况褪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一更耻、第九天 我趴在偏房一處隱蔽的房頂上張望测垛。 院中可真熱鬧,春花似錦秧均、人聲如沸食侮。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锯七。三九已至,卻和暖如春誉己,著一層夾襖步出監(jiān)牢的瞬間眉尸,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工巨双, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留噪猾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓筑累,卻偏偏與公主長(zhǎng)得像袱蜡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慢宗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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