1、jsp 和 servlet 有什么區(qū)別?
jsp經(jīng)編譯后就變成了Servlet.(JSP的本質(zhì)就是Servlet,JVM只能識(shí)別java的類,不能識(shí)別JSP的代碼,Web容器將JSP的代碼編譯成JVM能夠識(shí)別的java類)
jsp更擅長(zhǎng)表現(xiàn)于頁(yè)面顯示,servlet更擅長(zhǎng)于邏輯控制。
Servlet中沒(méi)有內(nèi)置對(duì)象,Jsp中的內(nèi)置對(duì)象都是必須通過(guò)HttpServletRequest對(duì)象,HttpServletResponse對(duì)象以及HttpServlet對(duì)象得到。
Jsp是Servlet的一種簡(jiǎn)化,使用Jsp只需要完成程序員需要輸出到客戶端的內(nèi)容,Jsp中的Java腳本如何鑲嵌到一個(gè)類中,由Jsp容器完成。而Servlet則是個(gè)完整的Java類,這個(gè)類的Service方法用于生成對(duì)客戶端的響應(yīng)。
立即學(xué)習(xí)“Java免費(fèi)學(xué)習(xí)筆記(深入)”;
(相關(guān)教程推薦:java入門程序)
2、jsp 有哪些內(nèi)置對(duì)象?作用分別是什么?
JSP有9個(gè)內(nèi)置對(duì)象:
request:封裝客戶端的請(qǐng)求,其中包含來(lái)自GET或POST請(qǐng)求的參數(shù);
response:封裝服務(wù)器對(duì)客戶端的響應(yīng);
pageContext:通過(guò)該對(duì)象可以獲取其他對(duì)象;
session:封裝用戶會(huì)話的對(duì)象;
application:封裝服務(wù)器運(yùn)行環(huán)境的對(duì)象;
out:輸出服務(wù)器響應(yīng)的輸出流對(duì)象;
config:Web應(yīng)用的配置對(duì)象;
page:JSP頁(yè)面本身(相當(dāng)于Java程序中的this);
exception:封裝頁(yè)面拋出異常的對(duì)象。
(相關(guān)視頻教程推薦:java視頻教程)
3、說(shuō)一下 jsp 的 4 種作用域?
JSP中的四種作用域包括page、request、session和application,具體來(lái)說(shuō):
page代表與一個(gè)頁(yè)面相關(guān)的對(duì)象和屬性。
request代表與Web客戶機(jī)發(fā)出的一個(gè)請(qǐng)求相關(guān)的對(duì)象和屬性。一個(gè)請(qǐng)求可能跨越多個(gè)頁(yè)面,涉及多個(gè)Web組件;需要在頁(yè)面顯示的臨時(shí)數(shù)據(jù)可以置于此作用域。
session代表與某個(gè)用戶與服務(wù)器建立的一次會(huì)話相關(guān)的對(duì)象和屬性。跟某個(gè)用戶相關(guān)的數(shù)據(jù)應(yīng)該放在用戶自己的session中。
application代表與整個(gè)Web應(yīng)用程序相關(guān)的對(duì)象和屬性,它實(shí)質(zhì)上是跨越整個(gè)Web應(yīng)用程序,包括多個(gè)頁(yè)面、請(qǐng)求和會(huì)話的一個(gè)全局作用域。
4、session 和 cookie 有什么區(qū)別?
由于HTTP協(xié)議是無(wú)狀態(tài)的協(xié)議,所以服務(wù)端需要記錄用戶的狀態(tài)時(shí),就需要用某種機(jī)制來(lái)識(shí)具體的用戶,這個(gè)機(jī)制就是Session.典型的場(chǎng)景比如購(gòu)物車,當(dāng)你點(diǎn)擊下單按鈕時(shí),由于HTTP協(xié)議無(wú)狀態(tài),所以并不知道是哪個(gè)用戶操作的,所以服務(wù)端要為特定的用戶創(chuàng)建了特定的Session,用用于標(biāo)識(shí)這個(gè)用戶,并且跟蹤用戶,這樣才知道購(gòu)物車?yán)锩嬗袔妆緯?shū)。這個(gè)Session是保存在服務(wù)端的,有一個(gè)唯一標(biāo)識(shí)。在服務(wù)端保存Session的方法很多,內(nèi)存、數(shù)據(jù)庫(kù)、文件都有。集群的時(shí)候也要考慮Session的轉(zhuǎn)移,在大型的網(wǎng)站,一般會(huì)有專門的Session服務(wù)器集群,用來(lái)保存用戶會(huì)話,這個(gè)時(shí)候 Session 信息都是放在內(nèi)存的,使用一些緩存服務(wù)比如Memcached之類的來(lái)放 Session。
思考一下服務(wù)端如何識(shí)別特定的客戶?這個(gè)時(shí)候Cookie就登場(chǎng)了。每次HTTP請(qǐng)求的時(shí)候,客戶端都會(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é)議中告訴客戶端,需要在 Cookie 里面記錄一個(gè)Session ID,以后每次請(qǐng)求把這個(gè)會(huì)話ID發(fā)送到服務(wù)器,我就知道你是誰(shuí)了。有人問(wèn),如果客戶端的瀏覽器禁用了 Cookie 怎么辦?一般這種情況下,會(huì)使用一種叫做URL重寫(xiě)的技術(shù)來(lái)進(jìn)行會(huì)話跟蹤,即每次HTTP交互,URL后面都會(huì)被附加上一個(gè)諸如 sid=xxxxx 這樣的參數(shù),服務(wù)端據(jù)此來(lái)識(shí)別用戶。
Cookie其實(shí)還可以用在一些方便用戶的場(chǎng)景下,設(shè)想你某次登陸過(guò)一個(gè)網(wǎng)站,下次登錄的時(shí)候不想再次輸入賬號(hào)了,怎么辦?這個(gè)信息可以寫(xiě)到Cookie里面,訪問(wèn)網(wǎng)站的時(shí)候,網(wǎng)站頁(yè)面的腳本可以讀取這個(gè)信息,就自動(dòng)幫你把用戶名給填了,能夠方便一下用戶。這也是Cookie名稱的由來(lái),給用戶的一點(diǎn)甜頭。所以,總結(jié)一下:Session是在服務(wù)端保存的一個(gè)數(shù)據(jù)結(jié)構(gòu),用來(lái)跟蹤用戶的狀態(tài),這個(gè)數(shù)據(jù)可以保存在集群、數(shù)據(jù)庫(kù)、文件中;Cookie是客戶端保存用戶信息的一種機(jī)制,用來(lái)記錄用戶的一些信息,也是實(shí)現(xiàn)Session的一種方式。
5、說(shuō)一下 session 的工作原理?
其實(shí)session是一個(gè)存在服務(wù)器上的類似于一個(gè)散列表格的文件。里面存有我們需要的信息,在我們需要用的時(shí)候可以從里面取出來(lái)。類似于一個(gè)大號(hào)的map吧,里面的鍵存儲(chǔ)的是用戶的sessionid,用戶向服務(wù)器發(fā)送請(qǐng)求的時(shí)候會(huì)帶上這個(gè)sessionid。這時(shí)就可以從中取出對(duì)應(yīng)的值了。
推薦教程:java面試題
以上就是2020全新Java面試題——Java Web(一)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
java怎么學(xué)習(xí)?java怎么入門?java在哪學(xué)?java怎么學(xué)才快?不用擔(dān)心,這里為大家提供了java速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)