Successfully reported this slideshow.

Ch05 Servlet 進階 API、過濾器與傾聽器

0

Share

Upcoming SlideShare
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Loading in …3
×
1 of 69
1 of 69

Ch05 Servlet 進階 API、過濾器與傾聽器

0

Share

Download to read offline

了解 Servlet 生命週期
使用 ServletConfig 與ServletContext
使用 PushBuilder
各種傾聽器的使用
繼承 HttpFilter 實作過濾器

了解 Servlet 生命週期
使用 ServletConfig 與ServletContext
使用 PushBuilder
各種傾聽器的使用
繼承 HttpFilter 實作過濾器

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Ch05 Servlet 進階 API、過濾器與傾聽器

  1. 1. 1
  2. 2. 5 • Servlet 進階 API、過濾器 與傾聽器 學習目標 • 了解 Servlet 生命週期 • 使用 ServletConfig 與 ServletContext • 使用 PushBuilder • 各種傾聽器的使用 • 繼承 HttpFilter 實作過濾器 2
  3. 3. Servlet 介面 • init() • service() • destroy() 3
  4. 4. ServletConfig 介面 4
  5. 5. Servlet 類別架構圖 5
  6. 6. GenericServlet 類別 • 將初始 Servlet 呼叫 init()方法傳入的 ServletConfig 封裝起來 • 有一些初始時所要執行的動作,可以重新定 義這個無參數的 init()方法 6
  7. 7. GenericServlet 類別 • 包括了 Servlet 與 ServletConfig 定義 方法的簡單實作 7
  8. 8. 使用 ServletConfig • 使用標註設定個別 Servlet 的初始參數 8
  9. 9. 使用 ServletConfig • 在 web.xml 設定個別 Servlet 的初始參數 9
  10. 10. 使用 ServletConfig • GenericServlet 定義了一些方法,將 ServletConfig 封裝起來,便於取得設定 資訊 10
  11. 11. 11
  12. 12. 使用 ServletConfig • 如果 web.xml 的設定要覆蓋標註設定, <servlet-name> 的設定必須與 @WebServlet 的 name 屬性相同 • 不設定 name 屬性,預設是類別完整名稱 12
  13. 13. 使用 ServletConfig 13
  14. 14. ServletContext 介面 • 定義了運行 Servlet 的應用程式環境的一些行 為與觀點 • 整個 Web 應用程式載入 Web 容器之後,容 器會生成一個 ServletContext 物件作為 整個應用程式的代表 • 透過 ServletConfig 的 getServletContext()方法就可以取得 14
  15. 15. 使用 ServletContext • getRequestDispatcher() • getResourcePaths() 15
  16. 16. 使用 ServletContext • getResourceAsStream() – 在 3.3.3 節中有個讀取 PDF 的範例 16
  17. 17. 使用 PushBuilder • Servlet 4.0 規範中制訂了對 HTTP/2 的支援, 在伺服器推送上,提供了PushBuilder 17
  18. 18. 使用 PushBuilder 18
  19. 19. ServletContextListener • 想得知何時 Web 應用程式已經初始化或即將 結束銷毀 19
  20. 20. ServletContextListener 20
  21. 21. ServletContextListener • 在Servlet 3.0 之前, ServletContextListener 實作類別,必 須在 web.xml 設定 21
  22. 22. ServletContextListener • 有些應用程式的設定,必須在 Web 應用程式 初始時進行 22
  23. 23. ServletContextListener • 在應用程式初始化時,也可以實作 ServletContextListener 進行 Servlet、 過濾器等的建立、設定與註冊 • 好處是給予 Servlet、過濾器等更多設定上的 彈性 23
  24. 24. ServletContextListener 24
  25. 25. ServletContextAttributeListener 25
  26. 26. HttpSessionListener 26
  27. 27. HttpSessionListener 27
  28. 28. HttpSessionListener 28
  29. 29. HttpSessionAttributeListener 29
  30. 30. HttpSessionBindingListener • 讓即將加入 HttpSession 的屬性物件實作, 不需註釋或在 web.xml 設定 30
  31. 31. HttpSessionAttributeListener 31
  32. 32. HttpSessionIdListener • Servlet 3.1 新增 • HttpSession 的 Session ID 發生變化時, 就會呼叫 sessionIdChanged()方法 32
  33. 33. 請求相關的傾聽器 • ServletRequestListener • ServletRequestAttributeListener • AsyncListener • ReadListener 33
  34. 34. 過濾器的概念 • 針對所有的 Servlet,產品經理想要了解從請求到回 應之間的時間差。 • 針對某些特定的頁面,客戶希望只有特定幾個使用 者才可以瀏覽。 • 基於安全性的考量,使用者輸入的特定字元必須過 濾並替換為無害的 • 字元。 • 請求與回應的編碼從 Big5 改用 UTF-8。 • … 34
  35. 35. 過濾器的概念 • 執行 Servlet 的 service()方法「前」,記錄超始 時間,Servlet 的 service()方法執行「後」,記 錄結束時間並計算時間差。 • 執行 Servlet 的 service()方法「前」,驗證是否 為允許的使用者。 • 執行 Servlet 的 service()方法「前」,對請求參 數進行字元過濾與替換。 • 執行 Servlet 的 service()方法「前」,對請求與 回應物件設定編碼。 • … 35
  36. 36. 過濾器的概念 36
  37. 37. 過濾器的概念 37
  38. 38. 過濾器的概念 38
  39. 39. 實作與設定過濾器 39
  40. 40. 實作與設定過濾器 • FilterChain 的 doFilter() 實作概念 40
  41. 41. GenericFilter 與 HttpFilter • Servlet 4.0 新增 41
  42. 42. 42
  43. 43. 43
  44. 44. 44
  45. 45. 實作與設定過濾器 45
  46. 46. 實作與設定過濾器 • 在過濾器的請求套用上,除了指定 URL 模式 之外,也可以指定 Servlet 名稱,這可以透過 @WebServlet 的 servletNames 設定 46
  47. 47. 初始參數設定 47
  48. 48. 48
  49. 49. 觸發過濾器的時機 • 預設是瀏覽器直接發出請求 49
  50. 50. 50
  51. 51. 請求包裹器 • 實作字元替換過濾器 <a href="http://openhome.cc">OpenHome.cc</a> 51
  52. 52. 請求包裹器 52
  53. 53. 53
  54. 54. &lt;a href="http://openhome.cc"&gt;Openhome.cc&lt;/a&gt; 54
  55. 55. 55
  56. 56. 56
  57. 57. 57
  58. 58. 回應包裹器 58
  59. 59. 實作壓縮過濾器 59
  60. 60. 60
  61. 61. 61
  62. 62. 62
  63. 63. 簡介 AsyncContext • 在 Servlet 3.0 中,ServletRequest 提供了 startAsync()方法 • 呼叫了 startAsync()方法取得 AsyncContext 物件之後,此次請求的回應 會被延後,並釋放容器分配的執行緒 63
  64. 64. 簡介 AsyncContext • getRequest() • getResponse() • complete() • dispatch() 64
  65. 65. 簡介 AsyncContext • 必須告知容器此 Servlet 支援非同步處理 65
  66. 66. 簡介 AsyncContext • 若其前端有過濾器,則過濾器亦需標示其支 援非同步處理 66
  67. 67. 67
  68. 68. 68
  69. 69. 綜合練習/微網誌 • 先停下來檢討目前的應用程式,有哪些維護 上的問題 • 在不改變目前應用程式的功能下,程式碼必 須作出哪些調整 • 讓每個程式碼職責上變得更為清晰,對於將 來的維護更有幫助 69

×