Successfully reported this slideshow.

Ch02 撰寫與設定 Servlet

0

Share

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

Ch02 撰寫與設定 Servlet

0

Share

Download to read offline

開發環境準備與使用
了解 Web 應用程式架構
Servlet 撰寫與部署設定
了解 URI 模式對應
使用 web-fragement.xml

開發環境準備與使用
了解 Web 應用程式架構
Servlet 撰寫與部署設定
了解 URI 模式對應
使用 web-fragement.xml

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Ch02 撰寫與設定 Servlet

  1. 1. 1
  2. 2. 2 • 撰寫與設定 Servlet 學習目標 • 開發環境準備與使用 • 了解 Web 應用程式架構 • Servlet 撰寫與部署設定 • 了解 URI 模式對應 • 使用 web-fragement.xml 2
  3. 3. 準備開發環境 • Java SE 15 • Eclipse IDE for Java EE Developers • Tomcat 9 3
  4. 4. 第一個 Servlet 程式 4
  5. 5. 5
  6. 6. 關於 HttpServlet • Servlet API 的相關類別 6
  7. 7. • 類別路徑(Classpath)中必須包括 Servlet API的相關類別 – 手動... – IDE... 7
  8. 8. 關於 HttpServlet 8
  9. 9. 關於 HttpServlet 9
  10. 10. 使用 @WebServlet • Servlet 3.0 可使用標註 10
  11. 11. 使用web.xml • 部署描述檔(Deployment Descriptor,DD檔) 11
  12. 12. 使用web.xml • web.xml 的設定會覆蓋 Servlet 的標註設定 – 可以使用標註來作預設值 – web.xml 日後更改設定值之用 12
  13. 13. 使用web.xml 13
  14. 14. 環境根目錄(Context Root) • 設定方式因 Web 應用程式伺服器而不同 14
  15. 15. 使用 web.xml • Servlet 在 web.xml 會有三個名稱設定 – <url-pattern> 設定的邏輯名稱 – <servlet-name> 註冊的 Servlet 名稱 – <servlet-class> 設定的實體類別名稱 15
  16. 16. 檔案組織與部署 16
  17. 17. 檔案組織與部署 • 實際上在部署 Web 應用程式時,會將 Web 應 用程式封裝為一個 WAR(Web Archive)檔案 – 副檔名為 *.war 的檔案 – 可使用 JDK 附的 jar 工具程式來建立 – 在Eclipse可以執行「Export/WAR file」匯出 WAR • Tomcat 容器若發現 webapps 目錄中有 WAR 檔案,會將之解壓縮,並載入 Web 應用程式 17
  18. 18. URI 模式設定 • 請 求URI – 環境路徑 – Servlet 路徑 – 路徑資訊 • 可使用 HttpServletRequest 的 getRequestURI() 來取得 18
  19. 19. 環境路徑 • 容器挑選哪個 Web 應用程式的依據 • 環境路徑的設定方式標準中並沒有規範,依 使用的應用程式伺服器而有所不同 • 可使用 HttpServletRequest 的 getContextPath() 來取得 • 如果應用程式環境路徑與 Web 伺服器環境根 路徑相同,則應用程式環境路徑為空字串 • 如果不是,則應用程式環境路徑以 “/” 開頭, 不包括 "/" 結尾 19
  20. 20. URI 模式設定 • 路徑對應(Path mapping) – "/" 開頭但 "/*" 結尾的 URI 模式,例如 "/guest/* • 延伸對應(extension mapping) – 以 "*." 開頭的URI模式,例如 "*.view" • 環境根目錄(Context root)對應 • 預設 Servlet – 僅包括 "/" 的 URI 模式 • 嚴格匹配(Exact match) – 不符合以上設定的其他字串,例如/guest/test.view 20
  21. 21. URI 模式設定 • 如果 URI 模式在設定比對的規則在某些URI請 求時有所重疊,則請求時比對的原則是從最 嚴格的URI模式開始符合 – "/admin/login.do" – "/admin/*" – "*.do" 請求/admin/login.do 21
  22. 22. Servlet 路徑 • 不包括路徑資訊(Path info)與請求參數 (Request parameter) • Servlet 路徑直接對應至 URI 模式資訊 • 可使用 HttpServletRequest 的 getServletPath() 來取得 • 基本上是以 "/" 開頭 • 在 "/*" 與 "" 的情況下, getServletPath() 取得的 Servlet 路徑是 空字串 22
  23. 23. Servlet路徑 • 若請求是根據 "/hello.do" 對應至某個 Servlet – Servlet 路徑就是 "/hello.do" • 如果透過 "/servlet/*" 對應至 Servlet – Servlet 路徑就是"/servlet" • 如果透過 "/*" 或 "" 對應至Servlet – Servlet 路徑就是空字串 23
  24. 24. 路徑資訊 • 不包括請求參數,指的是不包括環境路徑 與 Servlet 路徑部份的額外路徑資訊 • 可使用 HttpServletRequest 的 getPathInfo() 來取得 – 如果沒有額外路徑資訊,則為 null 24
  25. 25. 25
  26. 26. HttpServletMapping • 在 Servlet 4.0 ,HttpServletRequest 新增 了 getHttpServletMapping() 方法 26
  27. 27. Web 目錄結構 • 一個 Web 應用程式基本上會由以下項目組成: – 靜態資源(HTML、圖片、聲音等) – Servlet – JSP – 自定義類別 – 工具類別 – 部署描述檔(web.xml等)、設定資訊 (Annotation 等) 27
  28. 28. WEB-INF • 不被列入應用程式根目錄中可直接存取項目 – /WEB-INF/web.xml 是部署描述檔。 – /WEB-INF/classes 用來放置應用程式用到的自定義類別 (.class),必須包括套件(Package)結構 – /WEB-INF/lib 用來放置應用程式用到的 JAR(Java ARchive)檔案 • 可以透過程式面的控管,讓程式來取得 /WEB-INF 的資源,像是使用 ServletContext 的 getResource() 與 getResourceAsStream(), 或是透過 RequestDispatcher 請求調派 28
  29. 29. Web 應用程式用到的JAR檔案 • 可以放置 Servlet、JSP、自定義類別、工具類 別、部署描述檔等 • 應用程式的類別載入器可以從 JAR 載入對應 的資源 • 可以在 JAR 檔案的 /META-INF/resources 目錄 中放置靜態資源或 JSP 等 29
  30. 30. 類別尋找 • /WEB-INF/classes • /WEB-INF/lib 的 JAR 檔案 • 容器實作本身存放類別或 JAR 的目錄 30
  31. 31. 歡迎頁面 • web.xml • 尋找順序 – 目錄 – JAR 的 /META-INF/resources • 如果 URI 最後是以/結尾,但不存在該目錄, 則會使用預設 Servlet 31
  32. 32. 使用 web-fragment.xml • Servlet 3.0 – JAR 檔案可用來作為 Web 應用程式的部份模組 – 部署描述檔 web-fragment.xml – 放置在 JAR 檔案中的 META-INF 目錄之中 32
  33. 33. 使用 web-fragment.xml 33
  34. 34. web.xml 與 web-fragment.xml • 決定 web.xml 與 web-fragment.xml 配置順序 • 各個 JAR 檔 web-fragment.xml 定義的名稱不 得重複,若有重複,則會忽略掉重複的名稱 34
  35. 35. 另一個定義順序的方式 • 各個 JAR 中... • web.xml 沒有定 義順序資訊 • 載入定義的順序 – web.xml – WebFragment3 – WebFragment2 – WebFragment1 35
  36. 36. metadata-complete 屬性 • 設定為 true(預設是 false),表示 web.xml 中已完成 Web 應用程式的相關定義 – 部署時不會掃描標註與 web-fragment.xml 的定義 – 如果有 <absolute-ordering> 與 <ordering> 也會被忽略 36
  37. 37. 瑣瑣碎碎 • 如果 web-fragment.xml 指定的類別可以在 web 應用 程式的 /WEB-INF/classes 找到,就會使用該類別 • 如果該類別本身有標註,而 web-fragment.xml 有定 義該類別為 Servlet,則此時會有兩個 Servlet 實例 • 如果將 <web-fragment> 的 metadata- complete 屬性設定為 true(預設是false),就 只會處理自己 JAR 檔案中的標註資訊 37

×