Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Ch04 會話管理
Ch04 會話管理
Loading in …3
×

Check these out next

1 of 70 Ad

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

Download to read offline

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

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

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Advertisement

Recently uploaded (20)

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. 應用 • 非同步Long Polling • 非同步Server-Sent Event • 搭配ReadListener • 搭配WriteListener 69
  70. 70. 綜合練習/微網誌 • 先停下來檢討目前的應用程式,有哪些維護 上的問題 • 在不改變目前應用程式的功能下,程式碼必 須作出哪些調整 • 讓每個程式碼職責上變得更為清晰,對於將 來的維護更有幫助 70

×