1.session和cookie的區(qū)別?
session是存儲(chǔ)在服務(wù)器端,cookie是存儲(chǔ)在客戶端的,所以安全來(lái)講session的安全性要比cookie高,然后我們獲取session里的信息是通過(guò)存放在會(huì)話cookie里的sessionid獲取的。又由于session是存放在服務(wù)器的內(nèi)存中,所以session里的東西不斷增加會(huì)造成服務(wù)器的負(fù)擔(dān),所以會(huì)把很重要的信息存儲(chǔ)在session中,而把一些次要東西存儲(chǔ)在客戶端的cookie里,然后cookie確切的說(shuō)分為兩大類分為會(huì)話cookie和持久化cookie,會(huì)話cookie確切的說(shuō)是,存放在客戶端瀏覽器的內(nèi)存中,所以說(shuō)他的生命周期和瀏覽器是一致的,瀏覽器關(guān)了會(huì)話cookie也就消失了,然而持久化cookie是存放在客戶端硬盤中,而持久化cookie的生命周期就是我們?cè)谠O(shè)置cookie時(shí)候設(shè)置的那個(gè)保存時(shí)間,然后我們考慮一問(wèn)題當(dāng)瀏覽器關(guān)閉時(shí)session會(huì)不會(huì)丟失,從上面敘述分析session的信息是通過(guò)會(huì)話cookie的sessionid獲取的,當(dāng)瀏覽器關(guān)閉的時(shí)候會(huì)話cookie消失所以我們的sessionid也就消失了,但是session的信息還存在服務(wù)器端,這時(shí)我們只是查不到所謂的session但它并不是不存在。那么,session在什么情況下丟失,就是在服務(wù)器關(guān)閉的時(shí)候,或者是session過(guò)期(默認(rèn)時(shí)間是30分鐘),再或者調(diào)用了invalidate()的或者是我們想要session中的某一條數(shù)據(jù)消失調(diào)用session.removeAttribute()方法,然后session在什么時(shí)候被創(chuàng)建呢,確切的說(shuō)是通過(guò)調(diào)用getsession()來(lái)創(chuàng)建,這就是session與cookie的區(qū)別.
2、session和cookie聯(lián)系?
session是通過(guò)cookie來(lái)工作的session和cookie之間是通過(guò)$_cookie['PHPSESSID']來(lái)聯(lián)系的,通過(guò)$_cookie['PHPSESSID']可以知道session的id,從而獲取到其他的信息。
在購(gòu)物網(wǎng)站中通常將用戶加入購(gòu)物車的商品聯(lián)通session_id記錄到數(shù)據(jù)庫(kù)中,當(dāng)用戶再次訪問(wèn)是,通過(guò)sessionid就可以查找到用戶上次加入購(gòu)物車的商品。因?yàn)閟essionid是唯一的,記錄到數(shù)據(jù)庫(kù)中就可以根據(jù)這個(gè)查找了。
3.servlet的生命周期?
Servlet生命周期可以分成四個(gè)階段:加載和實(shí)例化、初始化、服務(wù)、銷毀。
當(dāng)客戶第一次請(qǐng)求時(shí),首先判斷是否存在Servlet對(duì)象,若不存在,則由Web容器創(chuàng)建對(duì)象,而后調(diào)用init()方法對(duì)其初始化,此初始化方法在整個(gè)Servlet生命周期中只調(diào)用一次。
完成Servlet對(duì)象的創(chuàng)建和實(shí)例化之后,Web容器會(huì)調(diào)用Servlet對(duì)象的service()方法來(lái)處理請(qǐng)求。
當(dāng)Web容器關(guān)閉或者Servlet對(duì)象要從容器中被刪除時(shí),會(huì)自動(dòng)調(diào)用destory()方法。
4.什么是webservice?
從表面上看,WebService就是一個(gè)應(yīng)用程序向外界暴露出一個(gè)能通過(guò)Web進(jìn)行調(diào)用的API,也就是說(shuō)能用編程的方法通過(guò)Web來(lái)調(diào)用這個(gè)應(yīng)用程序。我們把調(diào)用這個(gè)WebService的應(yīng)用程序叫做客戶端,而把提供這個(gè)WebService的應(yīng)用程序叫做服務(wù)端。從深層次看,WebService是建立可互操作的分布式應(yīng)用程序的新平臺(tái),是一個(gè)平臺(tái),是一套標(biāo)準(zhǔn)。它定義了應(yīng)用程序如何在Web上實(shí)現(xiàn)互操作性,你可以用任何你喜歡的語(yǔ)言,在任何你喜歡的平臺(tái)上寫(xiě)Webservice,只要我們可以通過(guò)Webservice標(biāo)準(zhǔn)對(duì)這些服務(wù)進(jìn)行查詢和訪問(wèn)。
5.jsp和servlet的區(qū)別、共同點(diǎn)、各自應(yīng)用的范圍?
JSP是Servlet技術(shù)的擴(kuò)展,本質(zhì)上就是Servlet的簡(jiǎn)易方式。JSP編譯后是“類servlet”。Servlet和JSP最主要的不同點(diǎn)在于,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開(kāi)來(lái)。而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為.jsp的文件。JSP側(cè)重于視圖,Servlet主要用于控制邏輯。在struts框架中,JSP位于MVC設(shè)計(jì)模式的視圖層,而Servlet位于控制層。
6.轉(zhuǎn)發(fā)(forward)和重定向(redirect)的區(qū)別?
1、從地址欄顯示來(lái)說(shuō)
forward是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問(wèn)目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過(guò)來(lái),然后把這些內(nèi)容再發(fā)給瀏覽器。瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容從哪里來(lái)的,所以它的地址欄還是原來(lái)的地址。
redirect是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址。所以地址欄顯示的是新的URL。
2、從數(shù)據(jù)共享來(lái)說(shuō)
forward:轉(zhuǎn)發(fā)頁(yè)面和轉(zhuǎn)發(fā)到的頁(yè)面可以共享request里面的數(shù)據(jù)。
redirect:不能共享數(shù)據(jù)。
3、從運(yùn)用地方來(lái)說(shuō)
forward:一般用于用戶登陸的時(shí)候,根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊。
redirect:一般用于用戶注銷登陸時(shí)返回主頁(yè)面和跳轉(zhuǎn)到其它的網(wǎng)站等
4、從效率來(lái)說(shuō)
forward:高。
redirect:低。
7.request.getAttribute()和request.getParameter()有何區(qū)別?
1、request.getParameter()取得是通過(guò)容器的實(shí)現(xiàn)來(lái)取得通過(guò)類似post,get等方式傳入的數(shù)據(jù)。
2、request.setAttribute()和getAttribute()只是在web容器內(nèi)部流轉(zhuǎn),僅僅是請(qǐng)求處理階段。
3、getAttribute是返回對(duì)象,getParameter返回字符串
4、getAttribute()一向是和setAttribute()一起使用的,只有先用setAttribute()設(shè)置之后,才能夠通過(guò)getAttribute()來(lái)獲得值,它們傳遞的是Object類型的數(shù)據(jù)。而且必須在同一個(gè)request對(duì)象中使用才有效。,而getParameter()是接收表單的get或者post提交過(guò)來(lái)的參數(shù)
8.jsp靜態(tài)包含和動(dòng)態(tài)包含的區(qū)別?
1、兩者格式不同,靜態(tài)包含:,而動(dòng)態(tài)包含:。
2、包含時(shí)間不同,靜態(tài)包含是先將幾個(gè)文件合并,然后再被編譯,缺點(diǎn)就是如果含有相同的標(biāo)簽,會(huì)出錯(cuò)。動(dòng)態(tài)包含是頁(yè)面被請(qǐng)求時(shí)編譯,將結(jié)果放在一個(gè)頁(yè)面。
3、生成的文件不同,靜態(tài)包含會(huì)生成一個(gè)包含頁(yè)面名字的servlet和class文件;而動(dòng)態(tài)包含會(huì)各自生成對(duì)應(yīng)的servlet和class文件
4、.傳遞參數(shù)不同,動(dòng)態(tài)包含能夠傳遞參數(shù),而靜態(tài)包含不能
以上就是北大青鳥(niǎo)長(zhǎng)沙麓谷校區(qū)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“2020年最新Javaweb開(kāi)發(fā)面試寶典”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
Java面試題