JavaWeb(J2EE)面試題及答案

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

JavaWeb(J2EE)面試題及答案

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

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

< %@ page isErrorPage=”true” %>

這樣描述錯誤信息的Throwable對象就可以在頁面裏面訪問到。

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

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

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

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中帶有此服務的Driver

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文件中。