- Servlet 教程
- Servlet - 首頁
- Servlet - 概述
- Servlet - 環境搭建
- Servlet - 生命週期
- Servlet - 示例
- Servlet - 表單資料
- Servlet - 客戶端請求
- Servlet - 伺服器響應
- Servlet - HTTP 狀態碼
- Servlet - 編寫過濾器
- Servlet - 異常處理
- Servlet - Cookie 處理
- Servlet - 會話跟蹤
- Servlet - 資料庫訪問
- Servlet - 檔案上傳
- Servlet - 日期處理
- Servlet - 頁面重定向
- Servlet - 點選計數器
- Servlet - 自動重新整理
- Servlet - 傳送郵件
- Servlet - 打包
- Servlet - 除錯
- Servlet - 國際化
- Servlet - 註解
- Servlet 有用資源
- Servlet - 問答
- Servlet - 快速指南
- Servlet - 有用資源
- Servlet - 討論
Servlet 面試問題
尊敬的讀者們,這些 **Servlet 面試問題** 特別設計用於讓您熟悉在 **Servlet 程式設計** 面試中可能遇到的問題型別。根據我的經驗,優秀的面試官很少會提前計劃好要問哪些特定問題,通常問題會從該主題的一些基本概念開始,然後根據後續討論和您的回答繼續下去。
Java Servlet 是執行在 Web 或應用伺服器上的程式,充當來自 Web 瀏覽器或其他 HTTP 客戶端的請求與 HTTP 伺服器上的資料庫或應用程式之間的中間層。
與 CGI 相比,Servlet 提供了幾項優勢。
效能顯著提升。
Servlet 在 Web 伺服器的地址空間內執行。無需為每個客戶端請求建立單獨的程序。
Servlet 因為是用 Java 編寫的,所以是平臺無關的。
伺服器上的 Java 安全管理器強制執行一組限制以保護伺服器機器上的資源。因此 Servlet 是受信任的。
Servlet 可以使用 Java 類庫的全部功能。它可以透過您已經瞭解的套接字和 RMI 機制與 applet、資料庫或其他軟體進行通訊。
Servlet 執行以下主要任務:
讀取客戶端(瀏覽器)傳送的顯式資料。這包括 Web 頁面上的 HTML 表單,也可能來自 applet 或自定義 HTTP 客戶端程式。
讀取客戶端(瀏覽器)傳送的隱式 HTTP 請求資料。這包括 cookie、瀏覽器理解的媒體型別和壓縮方案等等。
處理資料並生成結果。此過程可能需要與資料庫對話、執行 RMI 或 CORBA 呼叫、呼叫 Web 服務或直接計算響應。
將顯式資料(即文件)傳送到客戶端(瀏覽器)。此文件可以用多種格式傳送,包括文字(HTML 或 XML)、二進位制(GIF 影像)、Excel 等。
將隱式 HTTP 響應傳送到客戶端(瀏覽器)。這包括告訴瀏覽器或其他客戶端返回什麼型別的文件(例如 HTML),設定 cookie 和快取引數以及其他此類任務。
Servlet 生命週期可以定義為從其建立到銷燬的整個過程。以下是 Servlet 遵循的路徑。
透過呼叫 init() 方法初始化 Servlet。
Servlet 呼叫 service() 方法來處理客戶端的請求。
透過呼叫 destroy() 方法終止 Servlet。
最後,Servlet 由 JVM 的垃圾收集器進行垃圾回收。
init 方法設計為僅呼叫一次。它在 Servlet 首次建立時被呼叫,並且不會為每個使用者請求再次呼叫。因此,它用於一次性初始化,就像 applet 的 init 方法一樣。
每次伺服器接收到對 Servlet 的請求時,伺服器都會生成一個新執行緒並呼叫 service。service() 方法檢查 HTTP 請求型別(GET、POST、PUT、DELETE 等)並根據需要呼叫 doGet、doPost、doPut、doDelete 等方法。
GET 請求來自對 URL 的正常請求或來自沒有指定 METHOD 的 HTML 表單,它應該由 doGet() 方法處理。
POST 請求來自明確列出 POST 作為 METHOD 的 HTML 表單,它應該由 doPost() 方法處理。
destroy() 方法僅在 Servlet 生命週期結束時呼叫一次。
init() 方法只是建立或載入一些將在 Servlet 的整個生命週期中使用的數。
此方法使您的 Servlet 有機會關閉資料庫連線、停止後臺執行緒、將 cookie 列表或點選計數寫入磁碟以及執行其他此類清理活動。
此方法應該用於從伺服器獲取資料。
此方法應該用於處理伺服器上的資料。
service() 方法是執行實際任務的主要方法。Servlet 容器(即 Web 伺服器)呼叫 service() 方法來處理來自客戶端(瀏覽器)的請求並將格式化的響應寫回客戶端。
每次伺服器接收到對 Servlet 的請求時,伺服器都會生成一個新執行緒並呼叫 service。service() 方法檢查 HTTP 請求型別(GET、POST、PUT、DELETE 等)並根據需要呼叫 doGet、doPost、doPut、doDelete 等方法。
此方法的簽名如下:
public void service(ServletRequest request,
ServletResponse response)
throws ServletException, IOException{
}
service() 方法由容器呼叫,service 方法根據需要呼叫 doGet、doPost、doPut、doDelete 等方法。因此您無需處理 service() 方法,但您可以根據從客戶端接收到的請求型別覆蓋 doGet() 或 doPost()。
Servlet 根據情況使用以下方法自動處理表單資料解析:
**getParameter():**您呼叫 request.getParameter() 方法來獲取表單引數的值。
**getParameterValues():**如果引數出現多次並返回多個值(例如複選框),則呼叫此方法。
**getParameterNames():**如果您想要當前請求中所有引數的完整列表,則呼叫此方法。
HttpServletRequest 的 getParameterNames() 方法返回當前請求中所有引數的完整列表。此方法返回一個 Enumeration,其中包含引數名稱,順序未指定。
獲得 Enumeration 後,我們可以使用標準方式迴圈遍歷 Enumeration,使用 hasMoreElements() 方法確定何時停止,並使用 nextElement() 方法獲取每個引數名稱。
我們可以使用 HttpServletRequest 的 getHeaderNames() 方法讀取 HTTP 頭資訊。此方法返回一個 Enumeration,其中包含與當前 HTTP 請求關聯的頭資訊。
獲得 Enumeration 後,我們可以使用標準方式迴圈遍歷 Enumeration,使用 hasMoreElements() 方法確定何時停止,並使用 nextElement() 方法獲取每個引數名稱。
當瀏覽器請求網頁時,它會向 Web 伺服器傳送大量資訊,這些資訊無法直接讀取,因為這些資訊作為 HTTP 請求頭的部分進行傳輸。HttpServletRequest 表示此 HTTP 請求。
當 Web 伺服器響應瀏覽器對 HTTP 的請求時,響應通常由狀態行、一些響應頭、空行和文件組成。HttpServletResponse 表示此 HTTP 響應。
使用 request 獲取 PrintWriter 物件。
PrintWriter out = response.getWriter();
現在列印 HTML。
out.println("Hello World");
我們可以使用 HttpServletResponse 的 setStatus(statuscode) 方法傳送身份驗證錯誤。
// Set error code and reason. response.sendError(407, "Need authentication!!!" );
頁面重定向通常在文件移動到新位置時使用,我們需要將客戶端傳送到這個新位置,或者可能是由於負載均衡,或者是為了簡單的隨機化。將請求重定向到另一個頁面的最簡單方法是使用 response 物件的 sendRedirect() 方法。
此方法生成 302 響應以及包含新文件 URL 的 Location 頭。
此方法傳送狀態碼(通常為 404)以及一條短訊息,該訊息會自動在 HTML 文件內格式化併發送到客戶端。
Servlet 過濾器是可以用於 Servlet 程式設計的 Java 類,用於以下目的:
在客戶端訪問後端資源之前攔截客戶端的請求。
在伺服器響應傳送回客戶端之前操作伺服器響應。
規範建議有各種型別的過濾器:
身份驗證過濾器。
資料壓縮過濾器。
加密過濾器。
觸發資源訪問事件的過濾器。
影像轉換過濾器。
日誌記錄和稽核過濾器。
MIME 型別鏈過濾器。
標記過濾器。
轉換 XML 內容的 XSLT 過濾器。
過濾器部署在部署描述符檔案 web.xml 中,然後對映到應用程式部署描述符中的 Servlet 名稱或 URL 模式。
此方法由 Web 容器呼叫,以指示過濾器正在被投入服務。
由於客戶端請求鏈末端的資源,每次請求/響應對透過鏈傳遞時,容器都會呼叫此方法。
此方法由 Web 容器呼叫,以指示過濾器正在被停止服務。
可以。
可以。web.xml 中 filter-mapping 元素的順序決定了 Web 容器將過濾器應用於 Servlet 的順序。要反轉過濾器的順序,只需反轉 web.xml 檔案中的 filter-mapping 元素即可。
使用 web.xml 中的 error-page 元素指定響應某些異常或 HTTP 狀態碼時 Servlet 的呼叫。
如果您想要為所有異常擁有一個通用的錯誤處理程式,那麼您應該定義以下 error-page,而不是為每個異常定義單獨的 error-page 元素。
<error-page> <exception-type>java.lang.Throwable</exception-type > <location>/ErrorHandler</location> </error-page>
Cookie 是儲存在客戶端計算機上的文字檔案,它們用於各種資訊跟蹤目的。Java Servlet 透明地支援 HTTP Cookie。
使用 Servlet 設定 Cookie 包括三個步驟:
(1) 建立 Cookie 物件:您使用 Cookie 建構函式呼叫 Cookie 名稱和 Cookie 值,兩者都是字串。
Cookie cookie = new Cookie("key","value");
請記住,名稱和值都不應包含空格或以下任何字元:[ ] ( ) = , " / ? @ : ;
(2) 設定最大年齡:您使用 setMaxAge 指定 Cookie 的有效時間(以秒為單位)。以下將設定一個持續 24 小時的 Cookie。
cookie.setMaxAge(60*60*24);
(3) 將 Cookie 傳送到 HTTP 響應頭:您可以使用 response.addCookie 在 HTTP 響應頭中新增 Cookie,如下所示
response.addCookie(cookie);
要讀取 Cookie,您需要透過呼叫 HttpServletRequest 的 getCookies() 方法建立一個 javax.servlet.http.Cookie 物件陣列。然後遍歷該陣列,並使用 getName() 和 getValue() 方法訪問每個 Cookie 及其關聯的值。
刪除 Cookie 非常簡單。如果您想刪除 Cookie,您只需按照以下三個步驟操作:
讀取已存在的 Cookie 並將其儲存在 Cookie 物件中。
使用 setMaxAge() 方法將 Cookie 的生存期設定為零以刪除現有 Cookie。
將此 Cookie 添加回響應頭。
會話提供了一種跨多個頁面請求或訪問網站來識別使用者並存儲有關該使用者資訊的方法。會話在一個指定的時間段內持續存在,跨越使用者來自的多個連線或頁面請求。
您可以在每個 URL 的末尾附加一些額外的資料來標識會話,伺服器可以將該會話識別符號與它已儲存的有關該會話的資料關聯起來。例如,對於 https://tutorialspoint.tw/file.htm;sessionid=12345,會話識別符號附加為 sessionid=12345,可以在 Web 伺服器上訪問以識別客戶端。
您可以透過呼叫 HttpServletRequest 的公共方法 getSession() 來獲取 HttpSession 物件,如下所示
// Create a session object if it is already not created. HttpSession session = request.getSession();
完成使用者會話資料後,您可以選擇以下幾種方法:
刪除特定屬性:您可以呼叫公共方法 public void removeAttribute(String name) 來刪除與特定鍵關聯的值。
刪除整個會話:您可以呼叫公共方法 public void invalidate() 來丟棄整個會話。設定會話超時:您可以呼叫公共方法 public void setMaxInactiveInterval(int interval) 來單獨設定會話的超時時間。
登出使用者:支援 servlet 2.4 的伺服器,您可以呼叫 logout 方法將客戶端登出 Web 伺服器並使屬於所有使用者的全部會話失效。
HttpSession 物件的 setAttribute(String name, Object value) 將物件繫結到此會話,使用指定的名稱,並可用於更新會話中的屬性。
HttpSession 物件的 setMaxInactiveInterval(int interval) 指定客戶端請求之間的時間(以秒為單位),在此時間之後,servlet 容器將使此會話失效。
重新整理網頁最簡單的方法是使用 response 物件的 setIntHeader() 方法。
這意味著使網站能夠提供翻譯成訪問者語言或國籍的不同版本的內容。
這意味著向網站新增資源以使其適應特定的地理區域或文化區域,例如,將網站翻譯成印地語。
這是一個特定的文化或地理區域。它通常被稱為語言符號後跟一個國家/地區符號,兩者之間用下劃線分隔。例如,“en_US”代表美國的英語區域設定。
以下是 request 物件的方法,它返回 Locale 物件。
java.util.Locale request.getLocale()
以下方法返回適合向用戶顯示的區域設定國家/地區的名稱。
String getDisplayCountry()
接下來是什麼?
此外,您可以回顧一下您以前完成的科目作業,並確保您可以自信地談論它們。如果您是應屆畢業生,面試官並不期望您能回答非常複雜的問題,而是您必須使自己的基礎概念非常牢固。
其次,如果您無法回答一些問題,這實際上並不重要,重要的是您回答的任何問題都必須充滿信心。所以在面試時要有信心。我們在 tutorialspoint 祝您面試順利,並祝您未來的事業一切順利。乾杯 :-)
