Successfully reported this slideshow.

Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器

0

Share

1 of 64
1 of 64

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器

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

×