天天看點

基礎面試題20-2017年11月25日

70、說一下Servlet的體系結構。

所有的Servlet都必須要實作的核心的接口是javax.servlet.Servlet。每一個Servlet都必須要直接或者是間接實作這個接口,或者是繼承javax.servlet.GenericServlet或者javax.servlet.http.HTTPServlet。最後,Servlet使用多線程可以并行的為多個請求服務。

71、GenericServlet和HttpServlet有什麼差別?

GenericServlet是一個通用的協定無關的Servlet,它實作了Servlet和ServletConfig接口。繼承自GenericServlet的Servlet應該要覆寫service()方法。最後,為了開發一個能用在網頁上服務于使用HTTP協定請求的Servlet,你的Servlet必須要繼承自HttpServlet。

72.解釋下Servlet的生命周期。

對每一個用戶端的請求,Servlet引擎載入Servlet,調用它的init()方法,完成Servlet的初始化。然後,Servlet對象通過為每一個請求單獨調用service()方法來處理所有随後來自用戶端的請求,最後,調用Servlet(譯者注:這裡應該是Servlet而不是server)的destroy()方法把Servlet删除掉。

73.doGet()方法和doPost()方法有什麼差別?

doGet:GET方法會把名值對追加在請求的URL後面。因為URL對字元數目有限制,進而限制了用在用戶端請求的參數值的數目。并且請求中的參數值是可見的,是以,敏感資訊不能用這種方式傳遞。

doPOST:POST方法通過把請求參數值放在請求體中來克服GET方法的限制,是以,可以發送的參數的數目是沒有限制的。最後,通過POST請求傳遞的敏感資訊對外部用戶端是不可見的。

74.Class.forName()方法有什麼作用?

這個方法用來載入跟資料庫建立連接配接的驅動。

75.PreparedStatement比Statement有什麼優勢?

PreparedStatements是預編譯的,是以,性能會更好。同時,不同的查詢參數值,PreparedStatement可以重用。

76.什麼時候使用CallableStatement?用來準備CallableStatement的方法是什麼?

CallableStatement用來執行存儲過程。存儲過程是由資料庫存儲和提供的。存儲過程可以接受輸入參數,也可以有傳回結果。非常鼓勵使用存儲過程,因為它提供了安全性和子產品化。準備一個CallableStatement的方法是:

1

CallableStament.prepareCall();

77.資料庫連接配接池是什麼意思?

像打開關閉資料庫連接配接這種和資料庫的互動可能是很費時的,尤其是當用戶端數量增加的時候,會消耗大量的資源,成本是非常高的。可以在應用伺服器啟動的時候建立很多個資料庫連接配接并維護在一個池中。連接配接請求由池中的連接配接提供。在連接配接使用完畢以後,把連接配接歸還到池中,以用于滿足将來更多的請求。

78.如何知道是哪一個用戶端的機器正在請求你的Servlet?

ServletRequest類可以找出用戶端機器的IP位址或者是主機名。getRemoteAddr()方法擷取用戶端主機的IP位址,getRemoteHost()可以擷取主機名

79.HTTP響應的結構是怎麼樣的?

HTTP響應由三個部分組成:

狀态碼(Status Code):描述了響應的狀态。可以用來檢查是否成功的完成了請求。請求失敗的情況下,狀态碼可用來找出失敗的原因。如果Servlet沒有傳回狀态碼,預設會傳回成功的狀态碼HttpServletResponse.SC_OK。

HTTP頭部(HTTP Header):它們包含了更多關于響應的資訊。比如:頭部可以指定認為響應過期的過期日期,或者是指定用來給使用者安全的傳輸實體内容的編碼格式。如何在Serlet中檢索HTTP的頭部看這裡。

主體(Body):它包含了響應的内容。它可以包含HTML代碼,圖檔,等等。主體是由傳輸在HTTP消息中緊跟在頭部後面的資料位元組組成的。

80.什麼是cookie?session和cookie有什麼差別?

cookie是Web伺服器發送給浏覽器的一塊資訊。浏覽器會在本地檔案中給每一個Web伺服器存儲cookie。以後浏覽器在給特定的Web伺服器發請求的時候,同時會發送所有為該伺服器存儲的cookie。下面列出了session和cookie的差別:

無論用戶端浏覽器做怎麼樣的設定,session都應該能正常工作。用戶端可以選擇禁用cookie,但是,session仍然是能夠工作的,因為用戶端無法禁用服務端的session。

在存儲的資料量方面session和cookies也是不一樣的。session能夠存儲任意的Java對象,cookie隻能存儲String類型的對象。

81.浏覽器和Servlet通信使用的是什麼協定?

浏覽器和Servlet通信使用的是HTTP協定。

82.sendRedirect()和forward()方法有什麼差別?

sendRedirect()方法會建立一個新的請求,而forward()方法隻是把請求轉發到一個新的目标上。重定向(redirect)以後,之前請求作用域範圍以内的對象就失效了,因為會産生一個新的請求,而轉發(forwarding)以後,之前請求作用域範圍以内的對象還是能通路的。一般認為sendRedirect()比forward()要慢。

83.什麼是URL編碼和URL解碼?

URL編碼是負責把URL裡面的空格和其他的特殊字元替換成對應的十六進制表示,反之就是解碼。

84.JSP請求是如何被處理的?

浏覽器首先要請求一個以.jsp擴充名結尾的頁面,發起JSP請求,然後,Web伺服器讀取這個請求,使用JSP編譯器把JSP頁面轉化成一個Servlet類。需要注意的是,隻有當第一次請求頁面或者是JSP檔案發生改變的時候JSP檔案才會被編譯,然後伺服器調用servlet類,處理浏覽器的請求。一旦請求執行結束,servlet會把響應發送給用戶端。

85.JSP有什麼優點?

下面列出了使用JSP的優點:

JSP頁面是被動态編譯成Servlet的,是以,開發者可以很容易的更新展現代碼。

JSP頁面可以被預編譯。

JSP頁面可以很容易的和靜态模闆結合,包括:HTML或者XML,也可以很容易的和産生動态内容的代碼結合起來。

開發者可以提供讓頁面設計者以類XML格式來通路的自定義的JSP标簽庫。

開發者可以在元件層做邏輯上的改變,而不需要編輯單獨使用了應用層邏輯的頁面。

86.什麼是JSP指令(Directive)?JSP中有哪些不同類型的指令?

Directive是當JSP頁面被編譯成Servlet的時候,JSP引擎要處理的指令。Directive用來設定頁面級别的指令,從外部檔案插入資料,指定自定義的标簽庫。Directive是定義在<%@ 和 %>之間的。下面列出了不同類型的Directive:

包含指令(Include directive):用來包含檔案和合并檔案内容到目前的頁面。

頁面指令(Page directive):用來定義JSP頁面中特定的屬性,比如錯誤頁面和緩沖區。

Taglib指令: 用來聲明頁面中使用的自定義的标簽庫。

87.什麼是JSP動作(JSP action)?

JSP動作以XML文法的結構來控制Servlet引擎的行為。當JSP頁面被請求的時候,JSP動作會被執行。它們可以被動态的插入到檔案中,重用JavaBean元件,轉發使用者到其他的頁面,或者是給Java插件産生HTML代碼。下面列出了可用的動作:

jsp:include-當JSP頁面被請求的時候包含一個檔案。

jsp:useBean-找出或者是初始化Javabean。

jsp:setProperty-設定JavaBean的屬性。

jsp:getProperty-擷取JavaBean的屬性。

jsp:forward-把請求轉發到新的頁面。

jsp:plugin-産生特定浏覽器的代碼。

88.隐含對象是什麼意思?有哪些隐含對象?

JSP隐含對象是頁面中的一些Java對象,JSP容器讓這些Java對象可以為開發者所使用。開發者不用明确的聲明就可以直接使用他們。JSP隐含對象也叫做預定義變量。下面列出了JSP頁面中的隐含對象:

application

page

request

response

session

exception

out

config

pageContext

89.說出你常用的五個異常類.

90.解釋下Serialization和Deserialization。

Java提供了一種叫做對象序列化的機制,他把對象表示成一連串的位元組,裡面包含了對象的資料,對象的類型資訊,對象内部的資料的類型資訊等等。是以,序列化可以看成是為了把對象存儲在磁盤上或者是從磁盤上讀出來并重建對象而把對象扁平化的一種方式。反序列化是把對象從扁平狀态轉化成活動對象的相反的步驟。

91.什麼是Servlet?

Servlet是用來處理用戶端請求并産生動态網頁内容的Java類。Servlet主要是用來處理或者是存儲HTML表單送出的資料,産生動态内容,在無狀态的HTTP協定下管理狀态資訊。