Successfully reported this slideshow.

Ch06 使用 JSP

0

Share

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

Ch06 使用 JSP

0

Share

Download to read offline

了解 JSP 生命週期
使用 JSP 語法元素
使用 JSP 標準標籤
使用運算式語言(EL)
自訂 EL 函式

了解 JSP 生命週期
使用 JSP 語法元素
使用 JSP 標準標籤
使用運算式語言(EL)
自訂 EL 函式

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Related Audiobooks

Free with a 14 day trial from Scribd

See all

Ch06 使用 JSP

  1. 1. 1
  2. 2. 6 • 使用 JSP 學習目標 • 了解 JSP 生命週期 • 使用 JSP 語法元素 • 使用 JSP 標準標籤 • 使用運算式語言(EL) • 自訂 EL 函式 2
  3. 3. JSP 生命週期 3
  4. 4. 4
  5. 5. 從Java EE 7的JSP 2.3開始 JSP只接受GET、POST、HEAD請求 5
  6. 6. 6
  7. 7. JSP 生命週期 7
  8. 8. 8
  9. 9. Servlet 至 JSP 的簡單轉換 9
  10. 10. Servlet 至 JSP 的簡單轉換 10
  11. 11. Servlet 至 JSP 的簡單轉換 11
  12. 12. 12
  13. 13. 13
  14. 14. 14
  15. 15. 15
  16. 16. 16
  17. 17. 17
  18. 18. 指示元素 • page • include • taglib 18
  19. 19. page 指示元素 • 指示如何轉譯... 19
  20. 20. page 指示元素 • 可用屬性 – info – autoFlush – buffer – errorPage – extends – isErrorPage – language – session – isELIgnored – isThreadSafe 20
  21. 21. include 指示元素 21
  22. 22. include 指示元素 22
  23. 23. 指示元素 • 可以在 web.xml 統一預設的網頁編碼、內容 類型、緩衝區大小等 23
  24. 24. 指示元素 • 可以宣告 JSP 開頭與結尾要包括的網頁 24
  25. 25. 宣告元素 • 轉譯為 Servlet 的類別成員或方法 25
  26. 26. 宣告元素 26
  27. 27. 宣告元素 • 重新定義 jspInit()、jspDestroy() 27
  28. 28. Scriptlet 元素 • 轉譯為 Servlet 原始碼_jspService()方法 中的內容 28
  29. 29. 29
  30. 30. 運算式元素 • 運算結果將直接輸出為網頁的一部份 30
  31. 31. 31
  32. 32. 禁用 Scriptlet • 如果想禁用 JSP 的 Scriptlet,則可以在 web.xml 設定 32
  33. 33. 註解元素 33
  34. 34. 隱含物件 • 像 out、request 這樣的字眼,在轉譯為 Servlet 之後,會直接對應於 _jspService() 中的某個區域變數 34
  35. 35. 35
  36. 36. 隱含物件 • 隱含物件只能在 <% 與 %> 間,或 <%=與%> 間使用 • 無法在 <%! 與 %> 間使用隱含物件 36
  37. 37. 錯誤處理 • JSP 終究會轉譯為 Servlet,所以錯誤可能發 生在三個時候 – JSP 轉換為 Servlet 原始碼時 – Servlet 原始碼進行編譯時 – Servlet 載入容器進行服務但發生執行時期錯誤時 37
  38. 38. JSP 轉換為 Servlet 原始碼時 • 容器在轉譯 JSP 時不知道該怎麼將那些語法 轉譯為 Servlet 的 .java 檔案 38
  39. 39. Servlet 原始碼進行編譯時 • 嘗試將 .java 編譯為 .class 檔案,如果此時編 譯器因為某個原因而無法完成編譯 39
  40. 40. 進行服務但發生執行時期錯誤時 • 在執行時期因找不到某個資源、程式邏輯上 的問題而發生錯誤 40
  41. 41. 進行服務但發生執行時期錯誤時 41
  42. 42. errorPage 屬性 42
  43. 43. errorPage 屬性 43
  44. 44. errorPage 屬性 44
  45. 45. web.xml 設定 45
  46. 46. <jsp:include>、<jsp:forward> 標籤 • 執行時期依條件動態地調整包括的 JSP 頁面 • 目前頁面會自己生成一個 Servlet 類別被包括的 add.jsp 也會獨立生成一個 Servlet 類別 • 轉譯而成的 Servlet 會取得 RequestDispatcher 物件,並執行 include()方法 46
  47. 47. <jsp:include>、<jsp:forward> 標籤 • 將請求轉發給另一個 JSP 頁面作處理 • 目前頁面會生成一個 Servlet,而被轉發的 add.jsp 也是生成一個 Servlet • 轉譯的 Servlet 會取得 RequestDispatcher 物件,並執行forward()方法 47
  48. 48. 簡介 <jsp:useBean>、<jsp:setProperty> 與 <jsp:getProperty> • 搭配 <jsp:useBean> 的 JavaBean 元件 – 必須實作 java.io.Serializable 介面 – 沒有公開(public)的類別變數 – 具有無參數的建構式 – 具有公開的設值方法(Setter)與取值方法 (Getter) 48
  49. 49. 簡介 <jsp:useBean>、<jsp:setProperty> 與 <jsp:getProperty> 49
  50. 50. 50
  51. 51. 深入 <jsp:useBean>、<jsp:setProperty> 與<jsp:getProperty> 51
  52. 52. 深入 <jsp:useBean>、<jsp:setProperty> 與<jsp:getProperty> 52
  53. 53. 深入 <jsp:useBean>、<jsp:setProperty> 與<jsp:getProperty> 53
  54. 54. 深入 <jsp:useBean>、<jsp:setProperty> 與<jsp:getProperty> • 標籤的目的是減少 JSP 中 Script 的使用 • 反過來說,如果發現 JSP 有 Scriptlet,撰寫 的是從某個屬性範圍中取得物件 • 思考是否可以用 <jsp:useBean> 消除 Scriptlet 的使用 54
  55. 55. 深入 <jsp:useBean>、<jsp:setProperty> 與<jsp:getProperty> • 使用 PageContext的findAttribute(),從 page、request、session、application 依 序找看看有無name指定的屬性名稱 • 找到的話,再透過反射機制找出 JavaBean 的 setPassword()方法,呼叫並將 value 的指定值 設定給 JavaBean 55
  56. 56. 深入 <jsp:useBean>、<jsp:setProperty> 與<jsp:getProperty> • 將請求參數的值設定給 JavaBean 的某個屬性 • 由 JSP 的自省機制來判斷是否有相同的請求 參數名稱 • 自省機制自動匹配 56
  57. 57. 深入 <jsp:useBean>、<jsp:setProperty> 與<jsp:getProperty> • 使用 <jsp:useBean> 時一併設定屬性值 57
  58. 58. 深入 <jsp:useBean>、<jsp:setProperty> 與<jsp:getProperty> • 底下這個有點不同 58
  59. 59. 深入 <jsp:useBean>、<jsp:setProperty> 與<jsp:getProperty> • 取得 JavaBean 屬性 59
  60. 60. Model 2 60
  61. 61. Model 2 61
  62. 62. 談談 Model 1 62
  63. 63. 談談 Model 1 63
  64. 64. 簡介 EL 64
  65. 65. 簡介 EL • EL 優雅地處理了 null 值的情況,對於 null 值直接以空字串加以顯示 65
  66. 66. 簡介 EL • EL 的點運算子還可以連續存取物件 66
  67. 67. 簡介 EL • 可以使用 page 指示元素的 isELIgnored 屬性(預設是false),來設定 JSP 網頁是 否使用 EL • 可以在 web.xml 設定 <el-ignored> 標籤 為 true 來決定不使用 EL 67
  68. 68. 簡介 EL • 如果 web.xml 的 <el-ignored> 與 page 指令元素 的 isELIgnored 設定都沒有設定 – 2.3 或以下的版本,不會執行 EL – 2.4 或以上的版本,則會執行 EL • 不設定 page 指令元素的 isELIgnored – web.xml 的 <el-ignored> 為 false,則會執行 EL, – web.xml 的 <el-ignored> 為 true,則不會執行 EL • 使用 page 指令元素的 isELIgnored 設定是否支 援 EL,則以 page 指令元素的設定為主 68
  69. 69. 使用 EL 取得屬性 • 存取屬性 • 存取陣列 69
  70. 70. 使用 EL 取得屬性 • 如果使用點(.)運算子,則左邊可以是 JavaBean 或 Map 物件 • 如果使用[]運算子,則左邊可以是 JavaBean、 Map、陣列或 List 物件 • 例如 JavaBean... 70
  71. 71. 使用 EL 取得屬性 • 例如 Map... 71
  72. 72. 使用 EL 取得屬性 • 當左邊是 Map 物件時,建議使用 [] 運算子, 因為如果設定 Map 時的鍵名稱有空白或點字 元時,這是可以正確取得值的方式 72
  73. 73. 使用 EL 取得屬性 • List 的例子 73
  74. 74. 使用 EL 取得屬性 • 如果[]運算子中不是使用雙引號,則會嘗試 作運算 74
  75. 75. 使用 EL 取得屬性 • [] 也可以進行巢狀 ... 75
  76. 76. EL 隱含物件 • pageContext 隱含物件 • 屬性範圍相關隱含物件 • 請求參數相關隱含物件 • 標頭(Header)相關隱含物件 • cookie 隱含物件 • 初始參數隱含物件 76
  77. 77. EL 運算子 77
  78. 78. EL 運算子 78
  79. 79. EL 運算子 79
  80. 80. 自訂 EL 函式 80
  81. 81. 自訂 EL 函式 81
  82. 82. 自訂 EL 函式 82
  83. 83. 綜合練習/微網誌 • 使用 JSP 改寫先前綜合練習中使用 Servlet 實 現的視圖網頁 83

×