jsp和servlet有什么區(qū)別?
jsp經(jīng)編譯后就變成了Servlet.(JSP的本質(zhì)就是Servlet,JVM只能識別java的類,不能識別JSP的代碼,Web容器將JSP的代碼編譯成JVM能夠識別的java類)
jsp更擅長表現(xiàn)于頁面顯示,servlet更擅長于邏輯控制。
Servlet中沒有內(nèi)置對象,Jsp中的內(nèi)置對象都是必須通過HttpServletRequest對象,HttpServletResponse對象以及HttpServlet對象得到。
Jsp是Servlet的一種簡化,使用Jsp只需要完成程序員需要輸出到客戶端的內(nèi)容,Jsp中的Java腳本如何鑲嵌到一個類中,由Jsp容器完成。而Servlet則是個完整的Java類,這個類的Service方法用于生成對客戶端的響應(yīng)。
jsp有哪些內(nèi)置對象?作用分別是什么?
JSP有9個內(nèi)置對象:
request:封裝客戶端的請求,其中包含來自GET或POST請求的參數(shù);
response:封裝服務(wù)器對客戶端的響應(yīng);
pageContext:通過該對象可以獲取其他對象;
session:封裝用戶會話的對象;
application:封裝服務(wù)器運行環(huán)境的對象;
out:輸出服務(wù)器響應(yīng)的輸出流對象;
config:Web應(yīng)用的配置對象;
page:JSP頁面本身(相當(dāng)于Java程序中的this);
exception:封裝頁面拋出異常的對象。
說一下jsp的4種作用域?
JSP中的四種作用域包括page、request、session和application,具體來說:
page代表與一個頁面相關(guān)的對象和屬性。
request代表與Web客戶機(jī)發(fā)出的一個請求相關(guān)的對象和屬性。一個請求可能跨越多個頁面,涉及多個Web組件;需要在頁面顯示的臨時數(shù)據(jù)可以置于此作用域。
session代表與某個用戶與服務(wù)器建立的一次會話相關(guān)的對象和屬性。跟某個用戶相關(guān)的數(shù)據(jù)應(yīng)該放在用戶自己的session中。
application代表與整個Web應(yīng)用程序相關(guān)的對象和屬性,它實質(zhì)上是跨越整個Web應(yīng)用程序,包括多個頁面、請求和會話的一個全局作用域。
session和cookie有什么區(qū)別?
由于HTTP協(xié)議是無狀態(tài)的協(xié)議,所以服務(wù)端需要記錄用戶的狀態(tài)時,就需要用某種機(jī)制來識具體的用戶,這個機(jī)制就是Session.典型的場景比如購物車,當(dāng)你點擊下單按鈕時,由于HTTP協(xié)議無狀態(tài),所以并不知道是哪個用戶操作的,所以服務(wù)端要為特定的用戶創(chuàng)建了特定的Session,用用于標(biāo)識這個用戶,并且跟蹤用戶,這樣才知道購物車?yán)锩嬗袔妆緯?/p>
這個Session是保存在服務(wù)端的,有一個唯一標(biāo)識。在服務(wù)端保存Session的方法很多,內(nèi)存、數(shù)據(jù)庫、文件都有。
集群的時候也要考慮Session的轉(zhuǎn)移,在大型的網(wǎng)站,一般會有專門的Session服務(wù)器集群,用來保存用戶會話,這個時候Session信息都是放在內(nèi)存的,使用一些緩存服務(wù)比如Memcached之類的來放Session。
思考一下服務(wù)端如何識別特定的客戶?
這個時候cookie就登場了。每次HTTP請求的時候,客戶端都會發(fā)送相應(yīng)的cookie信息到服務(wù)端。實際上大多數(shù)的應(yīng)用都是用cookie來實現(xiàn)Session跟蹤的,第一次創(chuàng)建Session的時候,服務(wù)端會在HTTP協(xié)議中告訴客戶端,需要在cookie里面記錄一個SessionID,以后每次請求把這個會話ID發(fā)送到服務(wù)器,我就知道你是誰了。
有人問,如果客戶端的瀏覽器禁用了cookie怎么辦?
一般這種情況下,會使用一種叫做URL重寫的技術(shù)來進(jìn)行會話跟蹤,即每次HTTP交互,URL后面都會被附加上一個諸如sid=xxxxx這樣的參數(shù),服務(wù)端據(jù)此來識別用戶。
cookie其實還可以用在一些方便用戶的場景下,設(shè)想你某次登陸過一個網(wǎng)站,下次登錄的時候不想再次輸入賬號了,怎么辦?
這個信息可以寫到cookie里面,訪問網(wǎng)站的時候,網(wǎng)站頁面的腳本可以讀取這個信息,就自動幫你把用戶名給填了,能夠方便一下用戶。這也是cookie名稱的由來,給用戶的一點甜頭。
所以,總結(jié)一下:
Session是在服務(wù)端保存的一個數(shù)據(jù)結(jié)構(gòu),用來跟蹤用戶的狀態(tài),這個數(shù)據(jù)可以保存在集群、數(shù)據(jù)庫、文件中;
cookie是客戶端保存用戶信息的一種機(jī)制,用來記錄用戶的一些信息,也是實現(xiàn)Session的一種方式。
說一下session的工作原理?
其實session是一個存在服務(wù)器上的類似于一個散列表格的文件。里面存有我們需要的信息,在我們需要用的時候可以從里面取出來。
類似于一個大號的map吧,里面的鍵存儲的是用戶的sessionid,用戶向服務(wù)器發(fā)送請求的時候會帶上這個sessionid。這時就可以從中取出對應(yīng)的值了。
如果客戶端禁止cookie能實現(xiàn)session還能用嗎?
cookie與Session,一般認(rèn)為是兩個獨立的東西,Session采用的是在服務(wù)器端保持狀態(tài)的方案,而cookie采用的是在客戶端保持狀態(tài)的方案。
但為什么禁用cookie就不能得到Session呢?
因為Session是用SessionID來確定當(dāng)前對話所對應(yīng)的服務(wù)器Session,而SessionID是通過cookie來傳遞的,禁用cookie相當(dāng)于失去了SessionID,也就得不到Session了。
假定用戶關(guān)閉cookie的情況下使用Session,其實現(xiàn)途徑有以下幾種:
設(shè)置php.ini配置文件中的“session.use_trans_sid=1”,或者編譯時打開打開了“--enable-trans-sid”選項,讓PHP自動跨頁傳遞SessionID。
手動通過URL傳值、隱藏表單傳遞SessionID。
用文件、數(shù)據(jù)庫等形式保存SessionID,在跨頁過程中手動調(diào)用。
以上就是長沙一度軟件培訓(xùn)java培訓(xùn)機(jī)構(gòu)的小編針對“2020年java web基礎(chǔ)面試題”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。