當前位置:才華齋>IT認證>J2EE>

常見的JavaWeb(J2EE)面試試題及答案

J2EE 閱讀(1.07W)

1、JSP頁面是如何被執行的?JSP執行效率比Servlet低嗎?

常見的JavaWeb(J2EE)面試試題及答案

當客戶端向一個JSP頁面發出請求時,Web Container將JSP轉化成Servlet的原始碼(只在第一次請求時),然後編譯轉化後的Servlet並載入到記憶體中執行,執行的結果Response到客戶端。

JSP只在第一次執行的時候會轉化為Servlet,以後每次執行Web容器都是直接執行編譯後的Servlet,所以JSP和Servlet只是在第一次執行的時候不一樣,JSP慢一點,以後的執行都是相同的。

2、JSP如何處理執行時異常(run-time)exceptions?

可以使用頁面的errorPage屬性捕獲沒有處理的執行時異常,然後自動轉向到一個錯誤處理頁面,程式碼如下:

<%@ page errorPage=”” %>

如果在頁面請求時出現執行時異常是,以上程式碼會把頁面轉向到JSP頁面,在裡面,可以通過以下程式碼定義這個頁面是錯誤處理頁:

< %@ page isErrorPage=”true” %>

這樣描述錯誤資訊的Throwable物件就可以在頁面裡面訪問到。

3、如果jsp表單元素的值為空,如何避免null出現在頁面上?

可以寫一個簡單的函式對空值進行處理,判斷值是否為空,如果是空就返回空字串。例項程式碼如下:

< %! String blanknull(String s){ return (s == null) ? “” : s; } %>

在你的JSP裡面,可以使用以上函式輸出文字框或者其他頁面元素的值,例項程式碼如下:

4、如何避免JSP頁面自動生成session物件?為什麼要這麼做?

在預設情況下,在對一個JSP頁面發出請求時,如果session還沒有建立,JSP頁面會自動為請求建立一個session物件,但是session是比較消耗資源的,如果沒必要保持和使用session,就不應該建立session, 例如一些只是用來宣傳產品的網站,往往沒必要使用session來儲存資訊,可以使用jsp頁面指令session=”false”來避免JSP頁面為每個請求都自動建立session.例項程式碼如下:

< %@ page session=”false”>

5、在servlets和JSP之間能共享session物件嗎?

當然可以,

HttpSession session = ession(true);

alue(”variable”,”value”);

6、Servlet都有哪些方法?主要作用是什麼?

HttpServlet 類包含 init() 、 destroy() 、 service() 等方法。其中 init() 和 destroy() 方法是繼承的。

(1) init() 方法

在 Servlet 的生命期中,僅執行一次 init() 方法。它是在伺服器裝入 Servlet 時執行的。 可以配置伺服器,以在啟動伺服器或客戶機首次訪問 Servlet 時裝入 Servlet 。 無論有多少客戶機訪問 Servlet ,都不會重複執行 init() 。

預設的 init() 方法通常是符合要求的,但也可以用定製 init() 方法來覆蓋它,典型的是管理伺服器端資源。 例如,可能編寫一個定製 init() 來只用於一次裝入 GIF 影象,改進 Servlet 返回 GIF 影象和含有多個客戶機請求的效能。另一個示例是初始化資料庫連線。預設的 init() 方法設定了 Servlet 的初始化引數,並用它的 ServletConfig 物件引數來啟動配置, 因此所有覆蓋 init() 方法的Servlet 應呼叫 () 以確保仍然執行這些任務。在呼叫 service() 方法之前,應確保已完成了 init() 方法。

(2) service() 方法

service() 方法是 Servlet 的核心。每當一個客戶請求一個 HttpServlet 物件,該物件的 service() 方法就要被呼叫,而且傳遞給這個方法一個“請求”( ServletRequest )物件和一個“響應”( ServletResponse )物件作為引數。 在 HttpServlet 中已存在 service() 方法。預設的服務功能是呼叫與 HTTP 請求的方法相應的 do 功能。例如, 如果 HTTP 請求方法為 GET ,則預設情況下就呼叫doGet() 。 Servlet 應該為 Servlet 支援的 HTTP 方法覆蓋 do 功能。因為 ice() 方法會檢查請求方法是否呼叫了適當的處理方法,不必要覆蓋 service() 方法。只需覆蓋相應的 do 方法就可以了。

= 當一個客戶通過 HTML 表單發出一個 HTTP POST 請求時, doPost ()方法被呼叫。 與 POST 請求相關的引數作為一個單獨的 HTTP請求從瀏覽器傳送到伺服器。當需要修改伺服器端的資料時,應該使用 doPost() 方法。

= 當一個客戶通過 HTML 表單發出一個 HTTP GET 請求或直接請求一個 URL 時, doGet() 方法被呼叫。 與 GET 請求相關的引數新增到 URL 的後面,並與這個請求一起傳送。當不會修改伺服器端的資料時,應該使用 doGet() 方法。

Servlet 的響應可以是下列幾種型別:

一個輸出流,瀏覽器根據它的內容型別(如 text/HTML )進行解釋。

一個 HTTP 錯誤響應 , 重定向到另一個 URL 、 servlet 、 JSP 。

(3) destroy() 方法

destroy() 方法僅執行一次,即在伺服器停止且卸裝 Servlet 時執行該方法。典型的,將 Servlet 作為伺服器程序的一部分來關閉。預設的 destroy() 方法通常是符合要求的,但也可以覆蓋它,典型的是管理伺服器端資源。例如,如果 Servlet 在執行時會累計統計資料,則可以編寫一個 destroy() 方法,該方法用於在未裝入 Servlet 時將統計數字儲存在檔案中。另一個示例是關閉資料庫連線。

當伺服器卸裝 Servlet 時,將在所有 service() 方法呼叫完成後,或在指定的時間間隔過後呼叫 destroy() 方法。一個 Servlet 在執行 service() 方法時可能會產生其它的執行緒,因此請確認在呼叫 destroy() 方法時,這些執行緒已終止或完成。

(4) GetServletConfig()方法

GetServletConfig ()方法返回一個 ServletConfig 物件,該物件用來返回初始化引數和 ServletContext 。 ServletContext 介面提供有關 servlet 的環境資訊。

(5) GetServletInfo()方法

GetServletInfo ()方法是一個可選的方法,它提供有關 servlet 的資訊,如作者、版本、版權。

當伺服器呼叫 sevlet 的 Service ()、 doGet ()和 doPost ()這三個方法時,均需要 “請求”和“響應”物件作為引數。“請求”物件提供有關請求的資訊,而“響應”物件提供了一個將響應資訊返回給瀏覽器的一個通訊途徑。 let 軟體包中的相關類為 ServletResponse 和 ServletRequest ,而 軟體包中的相關類為 HttpServletRequest 和 HttpServletResponse 。 Servlet 通過這些物件與伺服器通訊並最終與客戶機通訊。 Servlet 能通過呼叫“請求”物件的方法獲知客戶機環境,伺服器環境的資訊和所有由客戶機提供的資訊。 Servlet 可以呼叫“響應”物件的方法傳送響應,該響應是準備發回客戶機的。

7、Java Servlet的主要功能和作用是什麼?

Servlet 通過建立一個框架來擴充套件伺服器的能力,以提供在 Web 上進行請求和響應服務。當客戶機發送請求至伺服器時,伺服器可以將請求資訊傳送給 Servlet ,並讓 Servlet 建立起伺服器返回給客戶機的響應。 當啟動 Web 伺服器或客戶機第一次請求服務時,可以自動裝入 Servlet 。裝入後, Servlet 繼續執行直到其它客戶機發出請求。 Servlet 的功能涉及範圍很廣。例如, Servlet 可完成如下功能:

(1) 建立並返回一個包含基於客戶請求性質的動態內容的完整的 HTML 頁面。

(2) 建立可嵌入到現有 HTML 頁面中的一部分 HTML 頁面( HTML 片段)。

(3) 與其它伺服器資源(包括資料庫和基於 Java 的應用程式)進行通訊。

(4) 用多個客戶機處理連線,接收多個客戶機的輸入,並將結果廣播到多個客戶機上。例如, Servlet 可

以是多參與者的遊戲伺服器。

(5) 當允許在單連線方式下傳送資料的情況下,在瀏覽器上開啟伺服器至 applet 的新連線,並將該連

接保持在開啟狀態。當允許客戶機和伺服器簡單、高效地執行會話的情況下, applet 也可以啟動客戶瀏覽器和伺服器之間的連線。可以通過定製協議或標準(如 IIOP )進行通訊。

(6) 對特殊的處理採用 MIME 型別過濾資料,例如影象轉換和伺服器端包括( SSI )。

(7) 將定製的處理提供給所有伺服器的標準例行程式。例如, Servlet 可以修改如何認證使用者。

8、Request物件的主要方法有哪些?

setAttribute(String name,Object):設定名字為name的request的引數值

getAttribute(String name):返回由name指定的屬性值

getAttributeNames():返回request物件所有屬性的名字集合,結果是一個列舉的例項

getCookies():返回客戶端的所有Cookie物件,結果是一個Cookie陣列

getCharacterEncoding():返回請求中的字元編碼方式

getContentLength():返回請求的Body的長度

例項

getInputStream():返回請求的輸入流,用於獲得請求中的資料

getMethod():獲得客戶端向伺服器端傳送資料的方法

getParameter(String name):獲得客戶端傳送給伺服器端的有name指定的引數值

getParameterNames():獲得客戶端傳送給伺服器端的所有引數的名字,結果是一個列舉的例項

getParameterValues(String name):獲得有name指定的引數的所有值

getProtocol():獲取客戶端向伺服器端傳送資料所依據的協議名稱

getQueryString():獲得查詢字串

getRequestURI():獲取發出請求字串的客戶端地址

getRemoteAddr():獲取客戶端的IP地址

getRemoteHost():獲取客戶端的名字

getSession([Boolean create]):返回和請求相關Session

getServerName():獲取伺服器的名字

getServletPath():獲取客戶端所請求的指令碼檔案的路徑

getServerPort():獲取伺服器的埠號

removeAttribute(String name):刪除請求中的一個屬性

9、使用JSP連線到資料庫連線緩衝池的最好方法是什麼?

1.使用JDBC2。0中帶有此服務的er

2.使用提供有此服務的Application server

3.自己寫

10、在JSP中如何寫文字檔案?

使用PrintWriter物件,如:

< %@ page import=”.*” %>

< % String str = “print me”; String nameOfTextFile = “/usr/anil/”; try { PrintWriter pw = new PrintWriter(new FileOutputStream(nameOfTextFile)); tln(str); e(); } catch(IOException e) { tln(essage()); } %>

11、JSP的缺點?

1.對JAVA程式進行除錯沒有好東東

2.因大多數的servlet引擎不支援connection pooling

let引擎沒有標準

與其它指令碼語言的互動

12、在JSP中如何刪除一個COOKIE?

< % Cookie killMyCookie = new Cookie(”mycookie”, null); axAge(0); ath(”/”); ookie(killMyCookie); %>

13、如何現實servlet的單執行緒模式?

< %@ page isThreadSafe=”false”%>

14、說出Servlet和CGI的區別?

與cgi的區別在於servlet處於伺服器程序中,它通過多執行緒方式執行其service方法,一個例項可以服務於多個請求,並且其例項一般不會銷燬,而CGI對每個請求都產生新的程序,服務完成後就銷燬,所以效率上低於servlet。

15、Servlet的生命週期?

Servlet是一種可以 在Servlet容器中執行的元件,那麼理所當然就應該有一個從建立到銷燬的過程,這個過程我們可以稱之為Servlet生命週期。Servlet的生命 週期可以分為載入、例項化、初始化、處理客戶請求和解除安裝五個階段,體現在方法上主要是init()、service()和destroy()三個方法。生 命週期的具體說明如下:

Servlet容器完成載入Servlet類和例項化一個Servlet物件

init()方法完成初始化工作,該方法由Servlet容器呼叫完成

service()方法處理客戶端請求,並返回響應結果

destroy()方法在Servlet容器解除安裝Servlet之前被呼叫,釋放一些資源

16、介紹一下let介面及其主要方法?

Servlet介面的主要作用是提供Servlet生命週期的init()、service()和destroy()方法。

servlet介面中的主要方法有:

void init(ServletConfit config)throws ServletException

在servlet被載入後和實施服務前由servlet引擎進行一次性呼叫。如果init()產生溢位UnavailableException,則 servle退出服務。

ServletConfig getServletConfig()

返回傳遞到servlet的init()方法的ServletConfig物件

void service(ServletRequest request, ServletResponse response)throws ServletException,IOException

處理request物件中描述的請求,使用response物件返回請求結果

String getServletInfo()

返回描述servlet的一個字串

void destory()

當servlet將要解除安裝時由servlet引擎呼叫,銷燬Servlet例項。

17、HttpServlet類中的主要方法都有哪些?各自的作用是什麼?

HttpServlet的主要方法有 doGet, doPost, doPut, doDelete, doTrace等等

Void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException

由servlet引擎呼叫用處理一個HTTP GET請求。輸入引數、HTTP頭標和輸入流可從request物件、response頭標和response物件的輸出流中獲得。

Void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException

由servlet引擎呼叫用處理一個HTTP POST請求。輸入引數、HTTP頭標和輸入流可從request物件、response頭標和response物件的輸出流中獲得。

Void doPut(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException

由servlet引擎呼叫用處理一個HTTP PUT請求。本方法中請求URI指出被載入的檔案位置。

Void doDelete(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException

由servlet引擎呼叫用處理一個HTTP DELETE請求。請求URI指出資源被刪除。

Void doOptions(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException

由servlet引擎呼叫用處理一個HTTP OPTIONS請求。返回一個Allow響應頭標表明此servlet支援的HTTP方法。一個servlet不需要覆蓋此方法,因為 HttpServlet方法已經實現規範所需的功能。

Void doTrace(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException

由servlet引擎呼叫用處理一個HTTP TRACE請求。使得請求頭標被反饋成響應關標。一個servlet不需要覆蓋此方法,因為HttpServlet方法已經實現HTTP規範所需的功能。

Void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException

Service(Request request,Response response)呼叫的一個立即方法,帶有指定HTTP請求和響應。此方法實際上將請求導向doGet()、doPost()等等。不應該覆蓋此方法。

Void service(Request request,Response response)throws ServletException,IOException

將請求和響應物件置入其指定的HTTP子類,並呼叫指定HTTP的service()方法。

18、XML文件定義有幾種形式?它們之間有何本質區別?解析XML文件有哪幾種方式?

a: 兩種形式 dtd schema,

b: 本質區別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發展schema的根本目的)。

c:有DOM,SAX,STAX等

DOM:處理大型檔案時其效能下降的非常厲害。這個問題是由DOM的樹結構所造成的,這種結構佔用的記憶體較多,而且DOM必須在解析檔案之前把整個文件裝入記憶體,適合對XML的隨機訪問;SAX:不現於DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML檔案,不需要一次全部裝載整個檔案。當遇到像檔案開頭,文件結束,或者標

籤開頭與標籤結束時,它會觸發一個事件,使用者通過在其回撥事件中寫入處理程式碼來處理XML檔案,適合對XML的順序訪問

STAX:Streaming API for XML (StAX)

19、你在專案中用到了xml技術的哪些方面?如何實現的?

用到了資料儲存,資訊配置兩方面。在做資料交換平臺時,將不能資料來源的資料組裝成XML檔案,然後將XML檔案壓縮打包加密後通過網路傳送給接收者,接收解密與解壓縮後再同XML檔案中還原相關資訊進行處理。在做軟體配置時,利用XML可以很方便的進行,軟體的各種配置引數都儲存在XML檔案中。