1. 程式人生 > 程式設計 >Java經典面試題彙總:Java Web

Java經典面試題彙總:Java Web

目錄
  • 1. P 和 servlet 有什麼區別?
  • 2. 什麼是Tomcat?
  • 3. Tomcat容器是如http://www.cppcns.com何建立Servlet類例項?用到了什麼原理?
  • 4. 攔截器和過濾器的區別?
  • 5.說一下 JSP 的 4 種作用域?
  • 6. JSP 有哪些內建物件?作用分別是什麼?
  • 7. Servlet的生命週期
  • 8. session 和 cookie 有什麼區別?
  • 9. 說一下 session 的工作原理?
  • 10. 如果客戶端禁止 cookie 能實現 session 還能用嗎?
  • 11. JSP工作原理?
  • 12. JSP中動態include和靜態include的區別?
  • 13、JSTL是什麼?優點有哪些?
  • 14. GET和POST的區別?
  • 15. 什麼是 XSS 攻擊,如何避免?
  • 16. 什麼是 CSRF 攻擊,如何避免?
  • 總結

1. JSP 和 servlet 有什麼區別?

JSP 是 servlet 技術的擴充套件,本質上就是 servlet 的簡易方式。servlet 和 JSP 最主要的不同點在於, servlet 的應用邏輯是在 檔案中,並且完全從表示層中的 html 裡分離開來,而 JSP 的情況是 Java 和 html 可以組合成一個副檔名為 JSP 的檔案。JSP 側重於檢視,servlet 主要用於控制邏輯。

2. 什麼是Tomcat?

Tomcat是一個免費的Web應用伺服器,Java編寫的Web專案可以部署在上面,使用者在客戶端請求時,都是將請求發到Tomcat上,Tomcat在將請求發到對應的專案上。

3. Tomcat容器是如何建立Servlet類例項?用到了什麼原理?

當容器啟動時,會讀取在webapps目錄下所有的web應用中的web.xml檔案,然後對xml檔案進行解析,並讀取servlet註冊資訊hjsnCzPJ。然後,將每個應用中註冊的servlet類都進行載入,並通過反射的方式例項化。(有時候也是在第一次請求時例項化)在servlet註冊時加上1如果為正數,則在一開始就例項化,如果不寫或為負數,則第一次請求例項化。

4. 攔截器和過濾器的區別?

  • 攔截器是基於java的反射機制的,而過濾器是基於函式回撥。
  • 攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
  • 攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
  • 攔截器可以訪問action上下文、值棧裡的物件,而過濾器不能訪問。
  • 在action的生命週期中,攔截器可以多次被呼叫,而過濾器只能在容器初始化時被呼叫一次。

5.說一下 JSP 的 4 種作用域?

  • page:代表與一個頁面相關的物件和屬性。
  • request:代表與客戶端發出的一個請求相關的物件和屬性。一個請求可能跨越多個頁面,涉及多個 Web 元件;需要在頁面顯示的臨時資料可以置於此作用域。
  • session:代表與某個使用者與伺服器建立的一次會話相關的物件和屬性。跟某個使用者相關的資料應該放在使用者自己的 session 中。
  • application:代表與整個 Web 應用程式相關的物件和屬性,它實質上是跨越整個 Web 應用程式,包括多個頁面、請求和會話的一個全域性作用域。

6. JSP 有哪些內建物件?作用分別是什麼?

JSP 有 9 大內建物件:

  • request:封裝客戶端的請求,其中包含來自 get 或 post 請求的引數;
  • response:封裝伺服器對客戶端的響應;
  • pageContext:通過該物件可以獲取其他物件;
  • session:封裝使用者會話的物件;
  • application:封裝伺服器執行環境的物件;
  • out:輸出伺服器響應的輸出流物件;
  • config:Web 應用的配置物件;
  • page:JSP 頁面本身(相當於 Java 程式中的 this);
  • exception:封裝頁面丟擲異常的物件。

7. Servlet的生命週期

servlet有良好的生存期的定義,包括載入和例項化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.servlet介面中的init、service、destroy方法表達。

(1)載入和例項化

當Servlet容器啟動或客戶端傳送一個請求時,Servlet容器會查詢記憶體中是否存在該Servlet例項,若存在,則直接讀取該例項響應請求;如果不存在,就建立一個Servlet例項。

(2) 初始化

例項化後,Servlet容器將呼叫Servlet的init()方法進行初始化(一些www.cppcns.com準備工作或資源預載入工作)。

(3)服務

初始化後,Servlet處於能響應請求的就緒狀態。當接收到客戶端請求時,呼叫service()的方法處理客戶端請求,HttpServlet的service()方法會根據不同的請求 轉調不同的doXxx()方法。

(4)銷燬

當Servlet容器關閉時,Servlet例項也隨時銷燬。其間,Servlet容器會呼叫Servlet 的destroy()方法去判斷該Servlet是否應當被釋放(或回收資源)。

8. session 和 cookie 有什麼區別?

  • 儲存位置不同:session 儲存在伺服器端;cookie 儲存在瀏覽器端。
  • 安全性不同:cookie 安全性一般,在瀏覽器儲存,可以被偽造和修改。
  • 容量和個數限制:cookie 有容量限制,每個站點下的 cookie 也有個數限制。
  • 儲存的多樣性:session 可以儲存在 Redis 中、中、應用程式中;而 cookie 只能儲存在瀏覽器中。

9. 說一下 session 的工作原理?

session 的工作原理是客戶端登入完成之後,伺服器會建立對應的 session,session 建立完之後, 會把 session 的 id 傳送給客戶端,客戶端再儲存到瀏覽器中。這樣客戶端每次訪問伺服器時,都會帶著 sessionid, 伺服器拿到 sessionid 之後,在記憶體找到與之對應的 session 這樣就可以正常工作了。

10. 如果客戶端禁止 cookie 能實現 session 還能用嗎?

可以用,session 只是依賴 cookie 儲存 sessionid,如果 cookie 被禁用了, 可以使用 url 中新增 sessionid 的方式保證 session 能正常使用。

11. JSP工作原理?

(1)當用戶訪問一個JSP頁面時,會向一個Servlet容器(Tomcat)發出請求;

(2)如果是第一次請求頁面,或頁面有所改動,則servlet容器首先要把JSP頁面(假設為test.jsp)轉化為Servlet程式碼(test.java),再將其轉化為(test.class檔案);因為這個過程(編譯)會耗費一定時間,所以第一次訪問或jsp檔案有改動時,訪問時間有些長;

(3)JSP容器負責呼叫從JSP轉換來的servlet,這些servlet負責提供服務相應使用者請求(比如客戶端傳送表單,要求servlet:formprocessor.java來處理,則容器會建立一個執行緒,呼叫formprocessor.java來處理該請求);如果使用者有多個請求,則容器會建立多個執行緒處理多個請求;

(4)容器執行位元組碼檔案(包括呼叫的servlet:formprocessor.java位元組嗎),並將其結果返回到客戶端;(返回的最終方式是由servlet輸出html格式的檔案流)

12. JSP中動態include和靜態include的區別?

  • 靜態include:語法:<%@ include file="檔名" %>,相當於複製,編輯時將對應的檔案包含進來,當內容變化時,不會再一次對其編譯,不易維護。
  • 動態include:語法:<jsp:include page="檔名">,能夠自動檢查被包含檔案,當客戶端對JSP檔案進行請求時,會重新將對應的檔案包含進來,進行實時的更新。

13、JSTL是什麼?優點有哪些?

答:JSTL(JSP Standard Tag Library,JSP標準標籤庫)是一個不斷完善的開放原始碼的JSP標籤庫,由四個定製標記庫(core、format、xml、sql)和一對通用標記庫驗證器(ScriptFreeTLV和PermittedTaglibsTLV)組成。

優點有:

  • 在應用程式伺服器之間提供了一致的介面,最大程度的提高了web應用在各應用伺服器之間的移植。
  • 簡化了JSP和web應用程式的開發。
  • 以一種統一的方式減少了JSP中scriptlet程式碼資料,可以達到沒有任何scriptlet程式碼的程式碼。在我們公司的專案中是不允許任何scriptlet出現在JSP中。
  • 允許JSP設計hjsnCzPJ工具與web應用程式開發的進一步整合。相信不久就會有支援JSTL的IDE開發工具出現。

14. GET和POST的區別?

POST和GET都是向伺服器提交資料,並且都會從伺服器獲取資料。

1、傳送方式:get通過位址列傳輸,post通過報文傳輸。

2、傳送長度:get引數有長度限制(受限於url長度),而post無限制

3、GET和POST還有一個重大區別,簡單的說:

GET產生一個TCP資料包;POST產生兩個TCP資料包

長的說:

對於GET方式的請求,瀏覽器會把http header和data一併傳送出去,伺服器響應200(返回資料);

而對於POST,瀏覽器先發送header,伺服器響應100 continue,瀏覽器再發送data,伺服器響應200 ok(返回資料)。

建議:

1、get方式的安全性較Post方式要差些,包含機密資訊的話,建議用Post資料提交方式;

2、在做資料查詢時,建議用Get方式;而在做資料新增、修改或刪除時,建議用Post方式;

15. 什麼是 XSS 攻擊,如何避免?

XSS 攻擊:即跨站攻擊,它是 Web 程式中常見的漏洞。原理是攻擊者往 Web 頁面裡插入惡意的指令碼程式碼( 程式碼、 程式碼等),當用戶瀏覽該頁面時,嵌入其中的指令碼程式碼會被執行,從而達到惡意攻擊使用者的目的,如盜取使用者 cookhjsnCzPJie、破壞頁面結構、重定向到其他等。 預防 XSS 的核心是必須對輸入的資料做過濾處理。

16. 什麼是 CSRF 攻擊,如何避免?

CSRF:Cross-Site Request Forgery(中文:跨站請求偽造),可以理解為攻擊者盜用了你的身份,以你的名義傳送惡意請求,比如:以你名義傳送郵件、發訊息、購買商品,虛擬貨幣轉賬等。 防禦手段: 驗證請求來源地址; 關鍵操作新增驗證碼; 在請求地址新增 token 並驗證。

總結

本篇文章就到這裡了,希望能給你帶來幫助,也希望您能夠多多關注我們的更多內容!