Servlet面试题整理
生活随笔
收集整理的這篇文章主要介紹了
Servlet面试题整理
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Servlet和JSP面試題整理
1. forward和redirect的區(qū)別?
- 地址欄顯示不同,forward地址欄顯示的是原來(lái)的地址,因?yàn)槠涫怯煞?wù)器請(qǐng)求資源,直接訪問(wèn)目標(biāo)地址的URL,并讀取響應(yīng)內(nèi)容,然后將內(nèi)容發(fā)送至瀏覽器,瀏覽器并不知道目標(biāo)地址。redirect顯示的是新的URL,因?yàn)槠涫莻€(gè)是服務(wù)器根據(jù)邏輯發(fā)送狀態(tài)碼至瀏覽器,讓瀏覽器重新請(qǐng)求目標(biāo)地址,所以瀏覽器是知道目標(biāo)地址的。
- 數(shù)據(jù)共享方式不同,forward轉(zhuǎn)發(fā)頁(yè)面和目標(biāo)頁(yè)面均可共享request的數(shù)據(jù)。redirect則是不可以共享數(shù)據(jù)。
- 通常應(yīng)用的場(chǎng)景不同,forward一般用于用戶登陸的時(shí)候,根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊。redirect一般用于用戶注銷(xiāo)登陸時(shí)返回主頁(yè)面和跳轉(zhuǎn)到其它的網(wǎng)站等
- 效率不同,通常認(rèn)為forward的效率要更高
2. session和cookie有什么區(qū)別?
- cookie可以被客戶端禁用,但是客戶端無(wú)法禁用服務(wù)端的session。
- 存儲(chǔ)的對(duì)象不同,session能夠存儲(chǔ)任意的Java對(duì)象,cookie只能存儲(chǔ)String類(lèi)型的對(duì)象。
- 數(shù)據(jù)存儲(chǔ)的地址不同,cookie數(shù)據(jù)保存在客戶端,session數(shù)據(jù)保存在服務(wù)器端
3. Servlet有什么優(yōu)點(diǎn)?
- 可移植性好
Servlet是用Java語(yǔ)言編寫(xiě)的,因此它可以移植到不同的操作系統(tǒng)和服務(wù)器上。 - 安全性好
Servlet也具有類(lèi)型檢查特征,并利用Java的垃圾收集和沒(méi)有指針的設(shè)計(jì),使得Servlet避免了內(nèi)存管理等問(wèn)題。 - 高效性
Servlet加載執(zhí)行后會(huì)常駐服務(wù)器內(nèi)存中,當(dāng)再次受到客戶端的請(qǐng)求時(shí),服務(wù)器會(huì)產(chǎn)生新的線程而不是進(jìn)程為客戶端服務(wù),這樣就提高了響應(yīng)速度。
4. 對(duì)Servlet線程安全的理解
- 客戶端第一次請(qǐng)求Servlet的時(shí),tomcat會(huì)根據(jù)web.xml配置文件實(shí)例化servlet,當(dāng)又有一個(gè)客戶端訪問(wèn)該servlet的時(shí)候,不會(huì)再實(shí)例化該servlet,這就是JSP/Servlet容器默認(rèn)采用的單實(shí)例多線程(這是造成線程安全的主因)處理多個(gè)請(qǐng)求的方式。
- Servlet本身是無(wú)狀態(tài)的,一個(gè)無(wú)狀態(tài)的Servlet是絕對(duì)線程安全的,所以servlet是否線程安全是由它的實(shí)現(xiàn)來(lái)決定的,如果它內(nèi)部的屬性或方法會(huì)被多個(gè)線程改變,它就是線程不安全的,反之,就是線程安全的。
- 避免使用實(shí)例變量 ,避免使用非線程安全的集合,在多個(gè)Servlet中對(duì)某個(gè)外部對(duì)象(例如文件)的修改是務(wù)必加鎖,互斥訪問(wèn),都能夠提高線程安全性。
5. Servlet的生命周期
- 當(dāng)客戶端第一次請(qǐng)求Servlet時(shí),Servlet被加載到內(nèi)存中,容器會(huì)創(chuàng)建Servlet實(shí)例,并調(diào)用其init()方法進(jìn)行初始化工作。
- 容器創(chuàng)建請(qǐng)求對(duì)象和響應(yīng)對(duì)象,然后調(diào)用Servlet的service()方法為客戶端提供服務(wù)。
- 當(dāng)Servlet不再被需要時(shí),容器調(diào)用Servlet的destory()方法將Servlet實(shí)例銷(xiāo)毀。
- 注: 當(dāng)客戶端請(qǐng)求的Servlet已經(jīng)存在于服務(wù)器內(nèi)存時(shí),容器會(huì)創(chuàng)建新的線程調(diào)用service()方法響應(yīng)客戶端請(qǐng)求。在Servlet的整個(gè)生命周期中,init()方法和destory()方法只會(huì)被調(diào)用一次。
6. JSP中動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?
- 動(dòng)態(tài)INCLUDE 用jsp:include動(dòng)作實(shí)現(xiàn)它總是會(huì)檢查所含文件中的變化,并且可以帶參數(shù),適合用于包含動(dòng)態(tài)頁(yè)面。
- 靜態(tài)INCLUDE 用include偽碼實(shí)現(xiàn),不會(huì)檢查所含文件的變化,適用于包含靜態(tài)頁(yè)面。
7. get和post有何區(qū)別?
- get參數(shù)傳遞通過(guò)url,post放在resquest body中
- get請(qǐng)求參數(shù)有長(zhǎng)度限制,post沒(méi)有
- get不安全,因?yàn)閰?shù)暴露在url中。post安全,參數(shù)是隱藏的
- get請(qǐng)求只能進(jìn)行url編碼。post支持多種編碼
- get請(qǐng)求參數(shù)會(huì)被完整保留在瀏覽歷史記錄,而post不會(huì)被保留。
- get產(chǎn)生一個(gè)tcp數(shù)據(jù)包;post產(chǎn)生兩個(gè)tcp數(shù)據(jù)包。
- get和post本質(zhì)就是tcp鏈接,并無(wú)差別。但是由于HTTP的規(guī)定和瀏覽器/服務(wù)器的限制,導(dǎo)致他們?cè)趹?yīng)用過(guò)程中體現(xiàn)出一些不同。
總結(jié)
以上是生活随笔為你收集整理的Servlet面试题整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 推荐Linux内核书籍
- 下一篇: 致驱动工程师的一封信