一、說一說Servlet的生命周期?
(更多相關面試題推薦:java面試題及答案)
Servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init(),service()和destroy方法表達。
Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。
web容器加載servlet,生命周期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現(xiàn),根據(jù)請求的不同調用不同的do***()方法。結束服務,web容器調用servlet的destroy()方法。
二、Servlet API中forward()與redirect()的區(qū)別?
1、從地址欄顯示來說
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發(fā)給瀏覽器.瀏覽器根本不知道服務器發(fā)送的內容從哪里來的,所以它的地址欄還是原來的地址。
redirect是服務端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.所以redirect等于客戶端向服務器端發(fā)出兩次request,同時也接受兩次response。
2、從數(shù)據(jù)共享來說
forward:轉發(fā)頁面和轉發(fā)到的頁面可以共享request里面的數(shù)據(jù)
redirect:不能共享數(shù)據(jù)
redirect不僅可以重定向到當前應用程序的其他資源,還可以重定向到同一個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源
forward方法只能在同一個Web應用程序內的資源之間轉發(fā)請求.forward 是服務器內部的一種操作
redirect 是服務器通知客戶端,讓客戶端重新發(fā)起請求
所以,你可以說 redirect 是一種間接的請求, 但是你不能說"一個請求是屬于forward還是redirect "
3、從運用地方來說
forward:一般用于用戶登陸的時候,根據(jù)角色轉發(fā)到相應的模塊.
redirect:一般用于用戶注銷登陸時返回主頁面和跳轉到其它的網站等.
4、從效率來說
forward:高.
redirect:低.
三、request.getAttribute()和 request.getParameter()有何區(qū)別?
1、request.getParameter()取得是通過容器的實現(xiàn)來取得通過類似post,get等方式傳入的數(shù)據(jù)。
request.setAttribute()和getAttribute()只是在web容器內部流轉,僅僅是請求處理階段。
2、getAttribute是返回對象,getParameter返回字符串
3、getAttribute()一向是和setAttribute()一起使用的,只有先用setAttribute()設置之后,才能夠通過getAttribute()來獲得值,它們傳遞的是Object類型的數(shù)據(jù)。而且必須在同一個request對象中使用才有效。,而getParameter()是接收表單的get或者post提交過來的參數(shù)
(視頻教程推薦:java課程)
四、jsp靜態(tài)包含和動態(tài)包含的區(qū)別
1、<%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發(fā)生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發(fā)生在編譯時期,也就是將java文件編譯為class文件的時期
2、使用靜態(tài)包含只會產生一個class文件,而使用動態(tài)包含會產生多個class文件
3、使用靜態(tài)包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態(tài)包含只是將被包含的頁面的內容復制到包含的頁面中去;而動態(tài)包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數(shù)范圍要相對大些,不僅可以取到傳遞到包含頁面的參數(shù),同樣也能取得在包含頁面向下傳遞的參數(shù)
五、MVC的各個部分都有那些技術來實現(xiàn)?如何實現(xiàn)?
MVC是Model-View-Controller的簡寫。Model代表的是應用的業(yè)務邏輯(通過JavaBean,EJB組件實現(xiàn)),View是應用的表示面(由JSP頁面產生),Controller是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現(xiàn)。這些組件可以進行交互和重用。
六、jsp有哪些內置對象?作用分別是什么?
JSP共有以下9個內置的對象:
1、request 用戶端請求,此請求會包含來自GET/POST請求的參數(shù)
2、response 網頁傳回用戶端的回應
3、pageContext 網頁的屬性是在這里管理
4、session 與請求有關的會話期
5、application servlet 正在執(zhí)行的內容
6、out 用來傳送回應的輸出
7、config servlet的構架部件
8、page JSP網頁本身
9、exception 針對錯誤網頁,未捕捉的例外
七、Http中,get和post方法的區(qū)別
1、Get是向服務器發(fā)索取數(shù)據(jù)的一種請求,而Post是向服務器提交數(shù)據(jù)的一種請求
2、Get是獲取信息,而不是修改信息,類似數(shù)據(jù)庫查詢功能一樣,數(shù)據(jù)不會被修改
3、Get請求的參數(shù)會跟在url后進行傳遞,請求的數(shù)據(jù)會附在URL之后,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連,%XX中的XX為該符號以16進制表示的ASCII,如果數(shù)據(jù)是英文字母/數(shù)字,原樣發(fā)送,如果是空格,轉換為+,如果是中文/其他字符,則直接把字符串用BASE64加密。
4、Get傳輸?shù)臄?shù)據(jù)有大小限制,因為GET是通過URL提交數(shù)據(jù),那么GET可提交的數(shù)據(jù)量就跟URL的長度有直接關系了,不同的瀏覽器對URL的長度的限制是不同的。
5、GET請求的數(shù)據(jù)會被瀏覽器緩存起來,用戶名和密碼將明文出現(xiàn)在URL上,其他人可以查到歷史瀏覽記錄,數(shù)據(jù)不太安全。
在服務器端,用Request.QueryString來獲取Get方式提交來的數(shù)據(jù)。
Post請求則作為http消息的實際內容發(fā)送給web服務器,數(shù)據(jù)放置在HTML Header內提交,Post沒有限制提交的數(shù)據(jù)。Post比Get安全,當數(shù)據(jù)是中文或者不敏感的數(shù)據(jù),則用get,因為使用get,參數(shù)會顯示在地址,對于敏感數(shù)據(jù)和不是中文字符的數(shù)據(jù),則用post。
6、POST表示可能修改變服務器上的資源的請求,在服務器端,用Post方式提交的數(shù)據(jù)只能用Request.Form來獲取。
八、什么是cookie?Session和cookie有什么區(qū)別?
Cookie是會話技術,將用戶的信息保存到瀏覽器的對象.
(相關推薦:java入門)
區(qū)別:
1、cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務器上
2、cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙,如果主要考慮到安全應當使用session
3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,如果主要考慮到減輕服務器性能方面,應當使用COOKIE
4、單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K。
結論:
將登陸信息等重要信息存放為SESSION;其他信息如果需要保留,可以放在COOKIE中。
九、jsp和servlet的區(qū)別、共同點、各自應用的范圍?
JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。JSP編譯后是“類servlet”。
Servlet和JSP最主要的不同點在于:Servlet的應用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。
JSP側重于視圖,Servlet主要用于控制邏輯。在struts框架中,JSP位于MVC設計模式的視圖層,而Servlet位于控制層.
十、tomcat容器是如何創(chuàng)建servlet類實例?用到了什么原理?
當容器啟動時,會讀取在webapps目錄下所有的web應用中的web.xml文件,然后對xml文件進行解析,并讀取servlet注冊信息。然后,將每個應用中注冊的servlet類都進行加載,并通過反射的方式實例化。(有時候也是在第一次請求時實例化)
在servlet注冊時加上<load-on-startup>1</load-on-startup>如果為正數(shù),則在一開始就實例化,如果不寫或為負數(shù),則第一次請求實例化。
當前標題:java高頻率基礎面試題——(四)
分享鏈接:http://www.rwnh.cn/article30/cgpiso.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網站內鏈、品牌網站建設、網站營銷、外貿網站建設、響應式網站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)