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

Ch06 使用JSP

210 views

Published on

了解JSP生命週期 • 使用JSP語法元素 • 使用JSP標準標籤 • 了解何謂Model 1架構 • 使用運算式語言(EL) • 自訂EL函式

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Ch06 使用JSP

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

×