JSP 規范:
JSP 規范介紹:
-
來自于 JAVAEE 規范中的一種
-
JSP 規范制定了如何開發 JSP 檔案代替回應物件將處理結果寫入到回應體的開發流程
-
JSP 規范制定了 Http 服務器應該如何呼叫管理 JSP 檔案
回應物件存在弊端:
-
適合將資料量較少的處理結果寫入到回應體
-
如果處理結果數量過多,回應物件會增加開發難度
JSP 檔案優勢:
-
JSP 檔案在互聯網通信程序,是回應物件的替代品
-
降低將處理結果寫入到回應體的開發作業量,降低處理結果維護難度
-
在 JSP 檔案開發時,可以直接將處理結果寫入到 JSP 檔案不需要手寫 print 命令,在 Http 服務器呼叫 JSP 檔案時,根據 JSP 規范要求自動的將 JSP 檔案書寫的內容通過輸出流寫入到回應體
HTML 檔案與 JSP 檔案的區別:
-
資源檔案型別不同:HTML 檔案屬于靜態資源檔案,其相關命令需要瀏覽器編譯并執行;JSP檔案屬于動態資源檔案,其相關命令需要在服務端編譯并執行
-
呼叫形式不同:如果瀏覽器訪問 HTML 檔案,此時 Http 服務器直接通過一個輸出流,將 HTML 檔案中所有的內容寫入到回應體;如果瀏覽器訪問 JSP 檔案,此時 Http 服務器根據JSP 規范來操作 JSP 檔案【編輯---->編譯----->呼叫】
JSP 檔案運算原理
-
Tomcat 根據 JSP 規范,將被訪問的 JSP 檔案【編輯】為一個 java 檔案,這個 Java 檔案是 Servlet 介面實作類
(Tomcat 將 JSP 檔案編輯后生成的 Java 檔案,繼承于 HttpJspBase,通過 Apache 官方檔案查看其身份是 HttpServlet 的子類,所以 Tomcat 將 JSP 編輯為的檔案是一個 Servlet 介面實作類)
-
Tomcat 根據 JSP 規范,呼叫 JVM,將這個java檔案【編譯】為 class 型別
(Http服務器【編輯】與【編譯】JSP 檔案的位置 --- work 檔案夾)
-
Tomcat 根據 JSP 規范負責生成這個 class 檔案的實體物件,這個實體物件是一個 Servelt 介面實體物件
-
Tomcat 根據 JSP 規范通過實體物件呼叫 class 檔案中 _jspService 方法
-
_jspService 方法在運行時負責將 JSP檔案中書寫內容寫入到回應體中
_jspService 方法:
- 作用:當一個 JSP 檔案被訪問時,Tomcat 呼叫的并不是當前 JSP 檔案,而是 JSP 檔案對應的 Servlet介面 實作類中 _jspService 方法,_jspService 方法負責將開發人員在 JSP 檔案書寫的所有內容寫入到回應體中,
- 內部結構:【判斷當前請求方式】Jsp 檔案可以接收的請求方式有 POST,GET,HEAD
【宣告區域變數】這些區域變數都可以在 JSP 檔案開發時直接使用
【輸出部分】這部分執行時將 JSP 檔案內容通過輸出流寫入到回應體
在JSP檔案中如何書寫Java命令:
- 命令格式:
<%
這里隨便寫 java 代碼
%>
<%=java的變數名%>
<%=java的運算式%>
- 命令作用:通知 Http 服務器將 JSP 檔案中 Java 命令與其他普通執行結果進行區分;通知Tomcat將輸出標記中【變數的值】或者輸出標記中【運算式運算結果】寫入到回應體
如何將 Servlet 中 doGet / doPost 方法執行結果交給 JSP 檔案輸出?
-
JSP 檔案被訪問時,并不是 JSP 檔案在執行,而是對應的 Servlet 在執行
-
自定義 Serlvet 介面實作類與 JSP 檔案之間的呼叫關系,等同于兩個 Servlet 之間的呼叫關系
-
自定義 Servelt 介面實作類與 JSP 檔案之間可以通過重定向方案或者請求轉發方案進行呼叫,考慮到運行效率問題,一般采用【請求轉發】
-
自定義 Servlet 介面實作類可以通過請求作用域物件將共享資料交給 JSP 來輸出到回應體
EL 運算式:
EL 工具包介紹:
-
由 Java 技術開發一個的 jar 包
-
作用:降低 JSP 檔案開發時 Java 命令開發強度
-
Tomcat 服務器本身自帶了 EL 工具包
JSP檔案中主要開發步驟:
【將作用域中存放的處理結果讀取出來并寫入到回應體】
-
第一步:從指定的作用域物件讀取處理結果
-
第二步::將得到資料進行型別強轉
-
第三步::將轉換后的資料寫入到回應體
<%
String value = https://www.cnblogs.com/Burning-youth/archive/2022/03/22/(String)request.getAttribute("key");
%>
<%=value%>
EL 運算式命令格式:
${作用域物件別名.共享資料名}- 命令作用執行時從指定的【作用域物件】中讀取指定【共享資料】的內容并自動的寫入到回應體中
- EL 提供 . 和 [ ] 兩種運算子來導航資料,下列兩者所代表的意思是一樣的:
${sessionScope.user.sex}
${sessionScope.user["sex"]}
- . 和 [ ] 也可以同時混合使用,如下:
${sessionScope.shoppingCart[0].price}
- 當要存取的屬性名稱中包含一些特殊字符,如. 或 – 等并非字母或數字的符號,就一定要使用 [ ]
例如:${user.My-Name } //錯誤示范
${user["My-Name"] } //正確格式
- EL 運算式支持運算運算式:數學運算運算式 / 關系運算運算式 / 邏輯運算運算式
簡化版 EL 運算式:
- 命令格式:${作用域物件別名}
- 作業原理:由于在EL簡化版中沒有指定作用域物件別名,所以EL運算式采用"猜測演算法"
- 猜測演算法:首先到【pageContext】定位共享資料,如果定位成功讀取輸出并結束執行;
如果在【pageCotnext】沒有找到共享資料,到【request】定位共享資料,如果定位成功讀取輸出并結束執行;
如果在【request】沒有找到共享資料,到【session】定位共享資料,如果定位成功讀取輸出并結束執行;
如果在【session】沒有找到共享資料,到【application】定位共享資料,如果定位成功讀取輸出并結束執行;
如果在【application】沒有找到共享資料,此時回傳 null,
- 弊端:增加程式運行時間;可能導致定位資料錯誤,
- 使用場景:簡化版設計之初就是為了從當前頁作用域物件讀取資料并輸出,所以從 request,session,application 讀取資料并輸出時應該避免使用簡化版,
EL 運算式將參考型別資料型別的屬性輸出:
- 命令格式:${作用域物件別名.共享資料名.屬性名}
- 命令作用:從作用域物件讀取到指定的參考變數,并將參考變數中指定屬性內容寫入到回應體
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/447039.html
標籤:其他
上一篇:八、Java面向物件編程
下一篇:Java基礎——日期類Date
