卷妹的成長日記之javaweb day14
👩💻部落格首頁:京與舊鋪的部落格首頁
✨歡迎關注🖱點贊🎀收藏⭐留言✒
🔮本文由京與舊鋪原創
😘系列專欄:java學習
👕參考網站:動力節點
💻首發時間:🎞2022年8月28日🎠
🎨你做三四月的事,八九月就會有答案,一起加油吧
🀄如果覺得部落客的文章還不錯的話,請三連支援一下部落客哦
JSP
- 我的第一個JSP程式:
- 在WEB-INF目錄之外建立一個index.jsp檔案,然後這個檔案中沒有任何内容。
- 将上面的項目部署之後,啟動伺服器,打開浏覽器,通路以下位址:
- http://localhost:8080/jsp/index.jsp 展現在大家面前的是一個空白。
- 實際上通路以上的這個:index.jsp,底層執行的是:index_jsp.class 這個java程式。
- 這個index.jsp會被tomcat翻譯生成index_jsp.java檔案,然後tomcat伺服器又會将index_jsp.java編譯生成index_jsp.class檔案
- 通路index.jsp,實際上執行的是index_jsp.class中的方法。
- JSP實際上就是一個Servlet。
- index.jsp通路的時候,會自動翻譯生成index_jsp.java,會自動編譯生成index_jsp.class,那麼index_jsp 這就是一個類。
- index_jsp 類繼承 HttpJspBase,而HttpJspBase類繼承的是HttpServlet。是以index_jsp類就是一個Servlet類。
- jsp的生命周期和Servlet的生命周期完全相同。完全就是一個東西。沒有任何差別。
- jsp和servlet一樣,都是單例的。(假單例。)
- jsp檔案第一次通路的時候是比較慢的,為什麼?
- 為什麼大部分的運維人員在給客戶示範項目的時候,為什麼提前先把所有的jsp檔案先通路一遍。
- 第一次比較麻煩:
- 要把jsp檔案翻譯生成java源檔案
- java源檔案要編譯生成class位元組碼檔案
- 然後通過class去建立servlet對象
- 然後調用servlet對象的init方法
- 最後調用servlet對象的service方法。
- 第二次就比較快了,為什麼?
- 因為第二次直接調用單例servlet對象的service方法即可。
- JSP是什麼?
- JSP是java程式。(JSP本質還是一個Servlet)
- JSP是:JavaServer Pages的縮寫。(基于Java語言實作的伺服器端的頁面。)
- Servlet是JavaEE的13個子規範之一,那麼JSP也是JavaEE的13個子規範之一。
- JSP是一套規範。所有的web容器/web伺服器都是遵循這套規範的,都是按照這套規範進行的“翻譯”
- 每一個web容器/web伺服器都會内置一個JSP翻譯引擎。
- 對JSP進行錯誤調試的時候,還是要直接打開JSP檔案對應的java檔案,檢查java代碼。
- 開發JSP的最高境界:
- 眼前是JSP代碼,但是腦袋中呈現的是java代碼。
- JSP既然本質上是一個Servlet,那麼JSP和Servlet到底有什麼差別呢?
- 職責不同:
- Servlet的職責是什麼:收集資料。(Servlet的強項是邏輯處理,業務處理,然後連結資料庫,擷取/收集資料。)
- JSP的職責是什麼:展示資料。(JSP的強項是做資料的展示)
- JSP的基礎文法
- 在jsp檔案中直接編寫文字,都會自動被翻譯到哪裡?
- 翻譯到servlet類的service方法的out.write(“翻譯到這裡”),直接翻譯到雙引号裡,被java程式當做普通字元串列印輸出到浏覽器。
- 在JSP中編寫的HTML CSS JS代碼,這些代碼對于JSP來說隻是一個普通的字元串。但是JSP把這個普通的字元串一旦輸出到浏覽器,浏覽器就會對HTML CSS JS進行解釋執行。展現一個效果。
- JSP的page指令(這個指令後面再詳細說,這裡先解決一下中文亂碼問題),解決響應時的中文亂碼問題:
- 通過page指令來設定響應的内容類型,在内容類型的最後面添加:charset=UTF-8
- <%@page contentType=“text/html;charset=UTF-8”%>,表示響應的内容類型是text/html,采用的字元集UTF-8
- <%@page import=“java.util.List,java.util.ArrayList”%>
- 怎麼在JSP中編寫Java程式:
- <% java語句; %>
- 在這個符号當中編寫的被視為java程式,被翻譯到Servlet類的service方法内部。
- 這裡你要細心點,你要思考,在<% %>這個符号裡面寫java代碼的時候,你要時時刻刻的記住你正在“方法體”當中寫代碼,方法體中可以寫什麼,不可以寫什麼,你心裡是否明白呢?
- 在service方法當中編寫的代碼是有順序的,方法體當中的代碼要遵循自上而下的順序依次逐行執行。
- service方法當中不能寫靜态代碼塊,不能寫方法,不能定義成員變量。。。。。。
- 在同一個JSP當中 <%%> 這個符号可以出現多個。
- <%! %>
- 在這個符号當中編寫的java程式會自動翻譯到service方法之外。
- 這個文法很少用,為什麼?不建議使用,因為在service方法外面寫靜态變量和執行個體變量,都會存線上程安全問題,因為JSP就是servlet,servlet是單例的,多線程并發的環境下,這個靜态變量和執行個體變量一旦有修改操作,必然會存線上程安全問題。