天天看點

卷妹的成長日記之javaweb day14

卷妹的成長日記之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是單例的,多線程并發的環境下,這個靜态變量和執行個體變量一旦有修改操作,必然會存線上程安全問題。