JSP - 面試問題



尊敬的讀者,這些JSP 面試問題專門設計用於幫助您熟悉在 JSP 相關面試中可能遇到的問題型別。根據我的經驗,優秀的訪談者在面試期間很少會計劃提出特定的問題,通常是從主題的一些基本概念開始,然後根據後續討論和您的回答繼續提問。

JavaServer Pages (JSP) 是一種用於開發支援動態內容的網頁的技術,它幫助開發人員透過使用特殊的 JSP 標籤將 Java 程式碼插入 HTML 頁面,大多數標籤以 <% 開頭,以 %> 結尾。

JSP 提供如下所示的幾個優點:

  • 效能顯著提高,因為 JSP 允許在 HTML 頁面本身中嵌入動態元素。

  • 與 CGI/Perl 不同,JSP 在伺服器處理之前始終會被編譯,CGI/Perl 每次請求頁面時都需要伺服器載入直譯器和目標指令碼。

  • JavaServer Pages 建立在 Java Servlet API 之上,因此與 Servlet 一樣,JSP 也能夠訪問所有強大的企業級 Java API,包括 JDBC、JNDI、EJB、JAXP 等。

  • JSP 頁面可以與處理業務邏輯的 Servlet 結合使用,這是 Java Servlet 模板引擎支援的模型。

JSP 的優勢有兩個方面。

首先,動態部分是用 Java 編寫的,而不是 Visual Basic 或其他特定於 MS 的語言,因此它功能更強大,也更容易使用。

其次,它可以移植到其他作業系統和非 Microsoft Web 伺服器。

編寫(和修改!)普通的 HTML 比使用大量 println 語句生成 HTML 更方便。其他優點包括:

  • 在 HTML 頁面中嵌入 Java 程式碼。

  • 平臺獨立性。

  • 建立資料庫驅動的 Web 應用程式。

  • 伺服器端程式設計功能。

SSI 實際上只適用於簡單的包含,不適用於使用表單資料、建立資料庫連線等“真實”程式。

JavaScript 可以在客戶端動態生成 HTML,但幾乎無法與 Web 伺服器互動以執行資料庫訪問和影像處理等複雜任務。

當然,普通的 HTML 無法包含動態資訊。

JSP 的生命週期包括以下步驟:

  • 編譯 - 當瀏覽器請求 JSP 時,JSP 引擎首先檢查是否需要編譯頁面。如果頁面從未被編譯過,或者自上次編譯以來 JSP 發生了修改,JSP 引擎就會編譯頁面。

    編譯過程包括三個步驟:

    • 解析 JSP。

    • 將 JSP 轉換為 Servlet。

    • 編譯 Servlet。

  • 初始化 - 當容器載入 JSP 時,它會在服務任何請求之前呼叫 jspInit() 方法。

  • 執行 - 每當瀏覽器請求 JSP 並且頁面已載入並初始化時,JSP 引擎就會呼叫 JSP 中的 _jspService() 方法。JSP 的 _jspService() 方法每次請求都會被呼叫一次,負責生成該請求的響應,並且該方法還負責生成對所有七種 HTTP 方法(即 GET、POST、DELETE 等)的響應。

  • 清理 - JSP 生命週期的銷燬階段表示容器正在將 JSP 從使用中移除。jspDestroy() 方法是 Servlet 的 destroy 方法在 JSP 中的等價物。

指令碼片段可以包含任意數量的 JAVA 語言語句、變數或方法宣告,或在頁面指令碼語言中有效的表示式。

以下是指令碼片段的語法:

<% code fragment %>

宣告宣告一個或多個變數或方法,您可以在 JSP 檔案中稍後的 Java 程式碼中使用它們。您必須在 JSP 檔案中使用變數或方法之前宣告它們。

<%! declaration; [ declaration; ]+ ... %>

JSP 表示式元素包含一個被求值的指令碼語言表示式,該表示式被轉換為字串,並插入到 JSP 檔案中表達式出現的位置。

表示式元素可以包含任何根據 Java 語言規範有效的表示式,但您不能使用分號來結束表示式。

其語法為:

<%= expression %>

JSP 註釋標記 JSP 容器應忽略的文字或語句。當您想要隱藏或“註釋掉”JSP 頁面的一部分時,JSP 註釋很有用。

以下是 JSP 註釋的語法:

<%-- This is JSP comment --%>

JSP 指令會影響 Servlet 類的整體結構。它通常具有以下形式:

<%@ directive attribute = "value" %>

指令標籤的型別如下:

  • <%@ page ... %> - 定義頁面相關的屬性,例如指令碼語言、錯誤頁面和緩衝要求。

  • <%@ include ... %> - 在翻譯階段包含一個檔案。

  • <%@ taglib ... %> - 宣告一個標籤庫,其中包含頁面中使用的自定義操作。

JSP 動作使用 XML 語法中的構造來控制 Servlet 引擎的行為。您可以動態插入檔案、重用 JavaBean 元件、將使用者轉發到另一個頁面或為 Java 外掛生成 HTML。

其語法如下:

<jsp:action_name attribute = "value" />

jsp:include、jsp:useBean、jsp:setProperty、jsp:getProperty、jsp:forward、jsp:plugin、jsp:element、jsp:attribute、jsp:body、jsp:text

字面量是作為程式程式碼的一部分按字面寫出的值,例如數字或文字字串。JSP 表示式語言定義了以下字面量:

  • 布林值 - true 和 false

  • 整數 - 與 Java 中相同

  • 浮點數 - 與 Java 中相同

  • 字串 - 使用單引號和雙引號;" 被轉義為 \", ' 被轉義為 \', \ 被轉義為 \\。

  • 空值 - null

page 指令用於向容器提供與當前 JSP 頁面相關的指令。您可以在 JSP 頁面的任何位置編寫頁面指令。

頁面指令包含以下 13 個屬性。

  1. language

  2. extends

  3. import

  4. session

  5. isThreadSafe

  6. info

  7. errorPage

  8. isErrorpage

  9. contentType

  10. isELIgnored

  11. buffer

  12. autoFlush

  13. isScriptingEnabled

buffer 屬性指定伺服器輸出響應物件的緩衝特性。

當 buffer 設定為 “none” 時,Servlet 輸出會立即定向到響應輸出物件。

autoFlush 屬性指定當緩衝區已滿時是否應自動重新整理緩衝輸出,或者是否應引發異常以指示緩衝區溢位。

true(預設值)表示自動緩衝重新整理,false 會引發異常。

contentType 屬性設定 JSP 頁面的字元編碼和生成的響應頁面的字元編碼。預設內容型別為 text/html,這是 HTML 頁面的標準內容型別。

errorPage 屬性告訴 JSP 引擎如果當前頁面執行時發生錯誤,要顯示哪個頁面。errorPage 屬性的值是相對 URL。

isErrorPage 屬性指示當前 JSP 是否可以作為另一個 JSP 的錯誤頁面。

isErrorPage 的值可以是 true 或 false。isErrorPage 屬性的預設值為 false。

extends 屬性指定生成的 Servlet 必須擴充套件的超類。

import 屬性的作用與 Java import 語句相同,行為也類似。import 選項的值是要匯入的包的名稱。

info 屬性允許您提供 JSP 的描述。

isThreadSafe 選項將頁面標記為執行緒安全的。預設情況下,所有 JSP 都被認為是執行緒安全的。如果將 isThreadSafe 選項設定為 false,JSP 引擎將確保一次只有一個執行緒正在執行您的 JSP。

language 屬性指示在 JSP 頁面指令碼編寫中使用的程式語言。

session 屬性指示 JSP 頁面是否使用 HTTP 會話。true 表示 JSP 頁面可以訪問內建會話物件,false 表示 JSP 頁面無法訪問內建會話物件。

isELIgnored 選項使您能夠停用表示式語言 (EL) 表示式的求值。

屬性的預設值為 true,這意味著表示式 ${...} 將根據 JSP 規範進行求值。如果屬性設定為 false,則表示式不會被求值,而是被視為靜態文字。

isScriptingEnabled 屬性確定是否允許使用指令碼元素。

預設值 (true) 啟用指令碼片段、表示式和宣告。如果屬性的值設定為 false,則如果 JSP 使用任何指令碼片段、表示式(非 EL)或宣告,則會引發翻譯時錯誤。

include 指令用於在翻譯階段包含檔案。此指令告訴容器在翻譯階段將其他外部檔案的內容與當前 JSP 合併。您可以在 JSP 頁面的任何位置編寫 include 指令。

此指令的一般用法形式如下:

<%@ include file = "relative url" >

taglib 指令遵循以下語法:

<%@ taglib uri = "uri" prefix = "prefixOfTag">

uri 屬性值解析為容器理解的位置

prefix 屬性通知容器哪些標記位是自定義操作。

taglib 指令遵循以下語法:

<%@ taglib uri = "uri" prefix = "prefixOfTag" >
  • Id 屬性 - id 屬性唯一標識 Action 元素,並允許在 JSP 頁面中引用該操作。如果 Action 建立了一個物件例項,則可以使用 id 值透過隱式物件 PageContext 來引用它。

  • Scope 屬性 - 此屬性標識 Action 元素的生命週期。id 屬性和 scope 屬性直接相關,因為 scope 屬性決定了與 id 關聯的物件的生命週期。scope 屬性有四個可能的值:(a) page,(b) request,(c) session 和 (d) application。

此操作允許您將檔案插入到正在生成的頁面中。語法如下所示:

<jsp:include page = "relative URL" flush = "true" />

其中page 是要包含的頁面的相對 URL。

Flush 是一個布林屬性,它決定了在包含之前是否重新整理包含資源的緩衝區。

include 指令(在將 JSP 頁面轉換為 servlet 時插入檔案)不同,include 操作在請求頁面時插入檔案。

useBean 操作非常通用。它首先利用 id 和 scope 變數搜尋現有的物件。如果找不到物件,則嘗試建立指定的物件。

載入 bean 的最簡單方法如下所示:

<jsp:useBean id = "name" class = "package.class" />

setProperty 操作設定 Bean 的屬性。在此操作之前必須已定義 Bean。

getProperty 操作用於檢索給定屬性的值並將其轉換為字串,最後將其插入輸出。

forward 操作終止當前頁面的操作並將請求轉發到另一個資源,例如靜態頁面、另一個 JSP 頁面或 Java Servlet。

此操作的簡單語法如下所示:

<jsp:forward page = "Relative URL" />

plugin 操作用於將 Java 元件插入 JSP 頁面。它確定瀏覽器的型別並根據需要插入<object> 或<embed> 標記。

如果所需的外掛不存在,它將下載外掛,然後執行 Java 元件。Java 元件可以是 Applet 或 JavaBean。

scope 屬性標識 Action 元素的生命週期。它有四個可能的值:(a) page,(b) request,(c) session 和 (d) application。

JSP 隱式物件是在每個頁面中 JSP 容器提供給開發人員的 Java 物件,開發人員可以直接呼叫它們,而無需顯式宣告。JSP 隱式物件也稱為預定義變數。

request、response、out、session、application、config、pageContext、page、Exception

request 物件是 javax.servlet.http.HttpServletRequest 物件的一個例項。每次客戶端請求頁面時,JSP 引擎都會建立一個新的物件來表示該請求。

request 物件提供方法來獲取 HTTP 標頭資訊,包括表單資料、cookie、HTTP 方法等。

使用 HttpServletRequest 的 getHeaderNames() 方法讀取 HTTP 標頭資訊。此方法返回一個包含與當前 HTTP 請求關聯的標頭資訊的 Enumeration。

response 物件是 javax.servlet.http.HttpServletRequest 物件的一個例項。就像伺服器建立 request 物件一樣,它也會建立一個物件來表示對客戶端的響應。

response 物件還定義了處理建立新 HTTP 標頭的介面。透過此物件,JSP 程式設計師可以新增新的 cookie 或日期戳、HTTP 狀態程式碼等。

out 隱式物件是 javax.servlet.jsp.JspWriter 物件的一個例項,用於在響應中傳送內容。

JspWriter 物件包含與 java.io.PrintWriter 類的大多數相同方法。但是,JspWriter 有一些額外的方法用於處理緩衝。與PrintWriter 物件不同,JspWriter 會丟擲 IOException。

session 物件是 javax.servlet.http.HttpSession 的一個例項,用於在客戶端請求之間跟蹤客戶端會話。

application 物件是生成的 Servlet 的 ServletContext 物件的直接包裝器,實際上是 javax.servlet.ServletContext 物件的一個例項。

此物件在其整個生命週期中表示 JSP 頁面。在 JSP 頁面初始化時建立此物件,並在 jspDestroy() 方法刪除 JSP 頁面時將其刪除。

config 物件是 javax.servlet.ServletConfig 的一個例項,並且是生成的 servlet 的 ServletConfig 物件的直接包裝器。

此物件允許 JSP 程式設計師訪問 Servlet 或 JSP 引擎初始化引數,例如路徑或檔案位置等。

pageContext 物件是 javax.servlet.jsp.PageContext 物件的一個例項。pageContext 物件用於表示整個 JSP 頁面。

此物件儲存對每個請求的 request 和 response 物件的引用。application、config、session 和 out 物件是透過訪問此物件的屬性派生的。

pageContext 物件還包含有關發出到 JSP 頁面的指令的資訊,包括緩衝資訊、errorPageURL 和頁面範圍。

此物件是頁面的例項的實際引用。可以將其視為表示整個 JSP 頁面的物件。

page 物件實際上是 this 物件的直接同義詞。

exception 物件是一個包裝器,包含從前一頁丟擲的異常。它通常用於生成對錯誤條件的適當響應。

GET 方法傳送編碼的使用者資訊,附加到頁面請求中。頁面和編碼資訊由 ? 字元分隔。

POST 方法以與 GET 方法完全相同的方式打包資訊,但它不是在 URL 中 ? 後面傳送為文字字串,而是將其傳送為單獨的訊息。此訊息以標準輸入的形式到達後端程式,您可以對其進行解析並用於處理。

JSP 使用以下方法根據情況自動處理表單資料解析:

  • getParameter() - 呼叫 request.getParameter() 方法獲取表單引數的值。

  • getParameterValues() - 如果引數出現多次並返回多個值(例如複選框),則呼叫此方法。

  • getParameterNames() - 如果您想要當前請求中所有引數的完整列表,則呼叫此方法。

  • getInputStream() - 呼叫此方法讀取來自客戶端的二進位制資料流。

JSP 過濾器是在 JSP 程式設計中可用於以下目的的 Java 類:

  • 在客戶端訪問後端資源之前攔截來自客戶端的請求。

  • 在將伺服器的響應傳送回客戶端之前對其進行操作。

過濾器在部署描述符檔案 web.xml 中定義,然後對映到應用程式的部署描述符中的 servlet 或 JSP 名稱或 URL 模式。

當 JSP 容器啟動您的 Web 應用程式時,它會建立您在部署描述符中宣告的每個過濾器的例項。過濾器按其在部署描述符中宣告的順序執行。

Cookie 是儲存在客戶端計算機上的文字檔案,它們用於各種資訊跟蹤目的。

Cookie 通常設定在 HTTP 標頭中(儘管 JavaScript 也可以直接在瀏覽器上設定 cookie)。如果瀏覽器配置為儲存 cookie,它將保留此資訊,直到過期日期。如果使用者將瀏覽器指向與 cookie 的路徑和域匹配的任何頁面,它將重新將 cookie 傳送到伺服器。

使用 JSP 設定 cookie 包括三個步驟:

  • 建立 Cookie 物件 - 使用 cookie 名稱和 cookie 值(均為字串)呼叫 Cookie 建構函式。

  • 設定最大年齡 - 使用 setMaxAge 指定 cookie 有效期(以秒為單位)。

  • 將 Cookie 傳送到 HTTP 響應標頭 - 使用 response.addCookie 將 cookie 新增到 HTTP 響應標頭中。

要讀取 cookie,您需要透過呼叫 HttpServletRequest 的 getCookies() 方法建立一個 javax.servlet.http.Cookie 物件陣列。然後迴圈遍歷陣列,並使用 getName() 和 getValue() 方法訪問每個 cookie 和關聯的值。

刪除 cookie 非常簡單。如果要刪除 cookie,則只需執行以下三個步驟:

  • 讀取已存在的 cookie 並將其儲存在 Cookie 物件中。

  • 使用setMaxAge() 方法將 cookie 年齡設定為零以刪除現有 cookie。

  • 將此 cookie 添加回響應標頭。

會話管理可以透過使用以下方法實現:

  • Cookie - Web 伺服器可以為每個 Web 客戶端分配一個唯一的會話 ID 作為 cookie,並且對於客戶端的後續請求,可以使用接收到的 cookie 來識別它們。

  • 隱藏表單欄位 - Web 伺服器可以傳送一個隱藏的 HTML 表單欄位以及一個唯一的會話 ID,如下所示:

<input type = "hidden" name = "sessionid" value = "12345">

    這意味著當提交表單時,指定的名稱和值將包含在 GET 或 POST 方法中。

  • URL 重寫 - 在 URL 重寫中,會在每個 URL 的末尾新增一些額外資訊以標識會話。當停用 cookie 時,此 URL 重寫非常有用。

  • 會話物件 (The session Object) − JSP 利用 Servlet 提供的 HttpSession 介面,該介面提供了一種方法來識別跨多個頁面請求或訪問網站的使用者,並存儲有關該使用者的資訊。

當你完成使用者會話資料後,你有幾個選擇 −

  • 刪除特定屬性 − 你可以呼叫 public void removeAttribute(String name) 方法來刪除與特定鍵關聯的值。

  • 刪除整個會話 − 你可以呼叫 public void invalidate() 方法來丟棄整個會話。

  • 設定會話超時 − 你可以呼叫 public void setMaxInactiveInterval(int interval) 方法來單獨設定會話的超時時間。

  • 登出使用者 − 支援 Servlet 2.4 的伺服器,你可以呼叫 logout 方法將客戶端登出 Web 伺服器並使屬於所有使用者的會話失效。

  • web.xml 配置 − 如果你使用 Tomcat,除了上述方法外,你還可以按照以下方式在 web.xml 檔案中配置會話超時。

要上傳單個檔案,你應該使用單個 <input .../> 標籤,其屬性 type = "file"。要允許上傳多個檔案,請包含多個 input 標籤,併為 name 屬性提供不同的值。

你可以在程式中硬編碼此路徑,或者也可以使用外部配置(例如 web.xml 中的 context-param 元素)來新增此目錄名稱。

頁面重定向通常用於文件移動到新位置時,我們需要將客戶端傳送到此新位置,或者可能是由於負載均衡或簡單的隨機化。

<jsp:forward> 元素將包含客戶端請求資訊的請求物件從一個 JSP 檔案轉發到另一個檔案。目標檔案可以是 HTML 檔案、另一個 JSP 檔案或 Servlet,只要它與轉發 JSP 檔案位於同一個應用程式上下文中。

sendRedirect 向瀏覽器傳送 HTTP 臨時重定向響應,瀏覽器建立新的請求以轉到重定向頁面。

點選計數器會告訴你網站特定頁面上的訪問次數。

要實現點選計數器,你可以使用 Application 隱式物件以及關聯的方法 getAttribute() 和 setAttribute()。

此物件在其整個生命週期中表示 JSP 頁面。在 JSP 頁面初始化時建立此物件,並在 jspDestroy() 方法刪除 JSP 頁面時將其刪除。

你可以按照以下步驟 −

  • 定義一個包含單個計數的資料庫表,例如 hitcount。為其分配零值。

  • 每次點選時,讀取表以獲取 hitcount 的值。

  • 將 hitcount 的值增加 1,並使用新值更新表。

  • 顯示 hitcount 的新值作為頁面總點選次數。

  • 如果你想計算所有頁面的點選次數,請為所有頁面實現上述邏輯。

考慮一個網頁,它顯示即時遊戲得分或股市狀態或貨幣匯率。對於所有此類頁面,你都需要使用瀏覽器的重新整理或重新載入按鈕定期重新整理網頁。

JSP 透過提供一種機制使這項工作變得容易,你可以在其中以這樣一種方式建立網頁,使其在給定間隔後自動重新整理。

重新整理網頁最簡單的方法是使用 response 物件的 setIntHeader() 方法。以下是此方法的簽名 −

public void setIntHeader(String header, int headerValue)

此方法將標頭“Refresh”與一個整數值一起傳送回瀏覽器,該整數值指示時間間隔(以秒為單位)。

JavaServer Pages 標準標籤庫 (JSTL) 是一個有用的 JSP 標籤集合,它封裝了許多 JSP 應用程式共有的核心功能。

JSTL 支援常見的結構化任務,例如迭代和條件,用於操作 XML 文件的標籤,國際化標籤和 SQL 標籤。它還提供了一個框架,用於將現有的自定義標籤與 JSTL 標籤整合。

JSTL 標籤的型別如下 −

  • 核心標籤 (Core Tags)

  • 格式化標籤 (Formatting tags)

  • SQL 標籤 (SQL tags)

  • XML 標籤 (XML tags)

  • JSTL 函式 (JSTL Functions)

<c:set > 標籤是 setProperty 操作的 JSTL 友好版本。該標籤很有用,因為它會評估表示式並使用結果來設定 JavaBean 或 java.util.Map 物件的值。

<c:remove > 標籤會從指定的範圍或找到變數的第一個範圍(如果未指定範圍)中刪除變數。

<c:catch> 標籤捕獲其主體中發生的任何 Throwable,並可選地公開它。簡單來說,它用於錯誤處理並更優雅地處理問題。

<c:if> 標籤評估表示式,並且僅當表示式計算結果為 true 時才顯示其主體內容。

<c:choose> 的工作方式類似於 Java 的 switch 語句,因為它允許你在多個選項之間進行選擇。在 switch 語句具有 case 語句的地方,<c:choose> 標籤具有 <c:when> 標籤。switch 語句有一個 default 子句來指定預設操作,類似地,<c:choose> 有 <otherwise> 作為 default 子句。

<c:forEach >、<c:forTokens> 標籤作為嵌入 Java for、while 或 do-while 迴圈(透過指令碼程式)的良好替代方案而存在。

<c:param> 標籤允許使用 URL 指定正確的 URL 請求引數,並且它會執行所需的任何 URL 編碼。

<c:redirect > 標籤透過自動提供 URL 重寫將瀏覽器重定向到備用 URL,它支援上下文相關的 URL,並且支援 <c:param> 標籤。

<c:url> 標籤將 URL 格式化為字串並將其儲存到變數中。此標籤在必要時會自動執行 URL 重寫。

JSTL 格式化標籤用於格式化和顯示文字、日期、時間和國際化網站的數字。以下是將 Formatting 庫包含在 JSP 中的語法 −

<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>

JSTL SQL 標籤庫提供用於與關係資料庫 (RDBMS)(例如 Oracle、mySQL 或 Microsoft SQL Server)互動的標籤。

以下是將 JSTL SQL 庫包含在 JSP 中的語法 −

<%@ taglib prefix = "sql" uri = "http://java.sun.com/jsp/jstl/sql" %>

JSTL XML 標籤提供了一種以 JSP 為中心的建立和操作 XML 文件的方法。以下是將 JSTL XML 庫包含在 JSP 中的語法。

<%@ taglib prefix = "x" uri = "http://java.sun.com/jsp/jstl/xml" %>

自定義標籤是使用者定義的 JSP 語言元素。當包含自定義標籤的 JSP 頁面轉換為 Servlet 時,該標籤將轉換為對稱為標籤處理器的物件的運算。然後,當執行 JSP 頁面的 Servlet 時,Web 容器將呼叫這些運算。

JSP 表示式語言 (EL) 使你能夠輕鬆訪問儲存在 JavaBeans 元件中的應用程式資料。JSP EL 允許你建立算術和邏輯表示式。JSP EL 的簡單語法如下 −

 
${expr}

此處 expr 指定表示式本身。

JSP 表示式語言支援以下隱式物件 −

  • pageScope − 頁面範圍內的作用域變數

  • requestScope − 請求範圍內的作用域變數

  • sessionScope − 會話範圍內的作用域變數

  • applicationScope − 應用程式範圍內的作用域變數

  • param − 作為字串的請求引數

  • paramValues − 作為字串集合的請求引數

  • headerHTTP − 作為字串的請求標頭

  • headerValues − 作為字串集合的 HTTP 請求標頭

  • initParam − 上下文初始化引數

  • cookie − Cookie 值

  • pageContext − 當前頁面的 JSP PageContext 物件

我們可以使用 page 指令的 isELIgnored 屬性停用它 −

<%@ page isELIgnored = "true|false" %>

如果為 true,則在靜態文字或標籤屬性中出現 EL 表示式時將忽略它們。如果為 false,則容器將評估 EL 表示式。

  • 受檢異常 (Checked exceptions) − 受檢異常通常是使用者錯誤或程式設計師無法預見的錯誤。例如,如果要開啟檔案但找不到該檔案,則會發生異常。在編譯時不能簡單地忽略這些異常。

  • 執行時異常 (Runtime exceptions) − 執行時異常是在可能已被程式設計師避免的情況下發生的異常。與受檢異常相反,執行時異常在編譯時會被忽略。

  • 錯誤 (Errors) − 這些根本不是異常,而是超出使用者或程式設計師控制範圍的問題。在程式碼中通常會忽略錯誤,因為你很少能對錯誤做些什麼。例如,如果發生堆疊溢位,則會發生錯誤。它們在編譯時也會被忽略。

我們可以使用 page 指令的 errorPage 屬性,以便將未捕獲的執行時異常自動轉發到錯誤處理頁面。

示例:<%@ page errorPage = "error.jsp" %>

如果在請求處理過程中遇到未捕獲的異常,它將把瀏覽器重定向到JSP頁面error.jsp。在error.jsp中,必須使用以下指令指示它是一個錯誤處理頁面:<%@ page isErrorPage="true" %>

國際化是指使網站能夠提供不同版本的翻譯成訪問者語言或國籍的內容。

本地化是指向網站新增資源以使其適應特定的地理或文化區域,例如將網站翻譯成印地語。

這是一個特定的文化或地理區域。它通常被稱為語言符號後跟國家/地區符號,這兩個符號之間用下劃線分隔。例如,“en_US”表示美國的英語區域設定。

<%-- comment --%>是JSP註釋,JSP引擎會忽略它。

<!-- comment -->是HTML註釋,瀏覽器會忽略它。

是的。JSP技術可以透過開發自定義操作或標籤(封裝在標籤庫中)來擴充套件。

靜態資源應始終使用JSP的include指令包含。這樣,包含操作只在翻譯階段執行一次。請注意,您應該始終為file屬性提供相對URL。儘管您也可以使用action包含靜態資源,但這並不建議,因為包含操作會在每次請求時都執行。

是的。但是,與Servlet不同,您不需要在JSP頁面中實現像doGet()或doPost()這樣的特定於HTTP協議的方法。您可以透過請求隱式物件在指令碼或表示式中獲取表單輸入元素的資料。

使用以下方法將請求的控制權從一個servlet傳遞到另一個servlet或從一個jsp傳遞到另一個jsp:

  • RequestDispatcher物件的forward方法傳遞控制。

  • 使用response.sendRedirect方法。

不可以。您應該只使用JSPWriter物件(以隱式物件out的形式提供給您)來回復客戶端。

JSPWriter可以被視為response.getWriter()返回的流物件的緩衝版本,儘管從實現的角度來看,它並非如此。

<%@ page session = "false">

使用<%jsp:param>標籤。

可以重寫jspinit()和jspDestroy()方法,但不能重寫_jspService()方法。

_jspService()方法將由容器編寫,因此任何不希望終端使用者重寫的方法通常都以'_'開頭。這就是為什麼我們不在任何JSP頁面中重寫_jspService()方法的原因。

會導致編譯錯誤,因為不能宣告兩個同名的變數。這是因為,當一個頁面被靜態包含時,包含頁面的整個程式碼成為新頁面的一部分。此時有兩個變數'a'的宣告。因此導致編譯錯誤。

透過將部署描述符的scripting-invalid元素設定為true來停用指令碼。它是jsp-property-group的子元素。其有效值為true和false。停用指令碼的語法如下:

<jsp-property-group>
   <url-pattern>*.jsp</url-pattern>
   <scripting-invalid>true</scripting-invalid>
</jsp-property-group>

如果我們想讓我們的資料對整個應用程式可用,那麼我們必須使用應用程式範圍。

在JSP中,我們可以透過以下方式執行包含:

  • 使用include指令 - 例如:

<%@ include file = ”header.jsp” %>
  • 使用include動作 - 例如:

<%@ include file = ”header.jsp” %>
  • 使用pageContext隱式物件 - 例如:

<% pageContext.include(“/header.jsp”); %>
  • 使用RequestDispatcher物件 - 例如:

<%
 RequestDispatcher rd = request.getRequestDispatcher(“/header.jsp”);
 Rd.include(request,response);
%>

JSP引擎在每次在JSP頁面中遇到標籤時都會例項化一個新的標籤處理程式例項。會維護一個標籤例項池並在可能的情況下重用它們。當遇到標籤時,JSP引擎會嘗試找到一個未使用的Tag例項並使用它,然後釋放它。

JavaBean和taglib基礎知識是為了重用而引入的。但以下是在它們之間的一些主要區別:

  • Taglib用於生成表示元素,而JavaBean適合於儲存資訊和狀態。

  • 使用自定義標籤來實現操作,使用JavaBean來呈現資訊。

下一步是什麼?

接下來,您可以回顧一下您之前完成的與該主題相關的作業,並確保您可以自信地談論它們。如果您是應屆畢業生,面試官並不期望您能回答非常複雜的問題,而是您必須使自己的基礎概念非常牢固。

其次,如果您無法回答一些問題,實際上並不重要,重要的是您回答的任何問題,都必須自信地回答。所以在面試時要充滿自信。我們在tutorialspoint祝您面試順利,並祝您未來一切順利。乾杯:-)

jsp_questions_answers.htm
廣告