Step1.情景概要 Hello,小伙伴們,好久不見,之前跟大家分享了三層架構與MVC思想,相信大家對於這兩塊內容有了相對清晰的個人認識了,既然我們講到了MVC,這裡我們接著這塊內容繼續往下深入,今天我們來看看MVC 中的V-VIEW 即我們所說的視圖層。 Step2.視圖技術 對於我們WEB開發人 ...
Step1.情景概要
Hello,小伙伴們,好久不見,之前跟大家分享了三層架構與MVC思想,相信大家對於這兩塊內容有了相對清晰的個人認識了,既然我們講到了MVC,這裡我們接著這塊內容繼續往下深入,今天我們來看看MVC 中的V-VIEW 即我們所說的視圖層。
Step2.視圖技術
對於我們WEB開發人員來說,視圖的概念應該都不會很陌生了,我們在瀏覽網頁時見到的各種形式的頁面內容,背後都離不開我們所用的視圖技術,對於JAVA Web 開發人員來講,頁面展示實際上就是模板+數據=頁面內容,所有的web頁面基本離不開這兩點,而我們常用的視圖表現層技術不考慮這種H5頁面的話,目前市面上用的比較多的基本上是JSP、Freemarker,或者Velocity,對於這三種常見的視圖表現層技術,這裡先來說說JSP。
Step3.JSP概念與應用場景
JSP(java server page ),故名思議,即在伺服器端執行的頁面,其實質為一個簡化的servlet 它是在傳統的網頁HTML文件中插入Java程式段和JSP標記,從而形成JSP文件,尾碼名為(*.jsp)。說了這麼多實際上就是在HTML基礎上加入JAVA 代碼,運行在Tomcat(servlet)容器中的頁面,最終項目發佈後通過瀏覽器訪問該頁面後在瀏覽器輸出的內容就是html ,是不是很簡單呢。
這裡對於JSP ,概念中提到JSP 實質上就是Servlet ,只是JSP的出現解決了Servlet 的一個痛點問題,就是Servlet 頁面內容輸出是相對麻煩,特別是涉及到複雜的頁面樣式控制與JS 時,這時Servlet 就相對變的心有餘而力不足了哦,這時JSP的出現,解決了Serlvet 的這一痛點問題,即:JSP 作為視圖展示層顯示頁面內容更加方便!那說到這,JSP既然是Servlet ,那JSP 究竟是怎麼執行的呢?
Step4.JSP執行過程剖析
這裡在分析JSP 原理前,先來看下Serlvet 內部執行原理
- 客戶端通過HTTP提出請求.
- Web伺服器接收該請求並將其發給servlet。如果這個servlet尚未被載入,Web伺服器將把它載入到Java虛擬機並且執行它。
- servlet將接收該HTTP請求並執行某種處理。
- servlet將向Web伺服器返回應答。
- Web伺服器將從servlet收到的應答發送給客戶端。
運行簡圖如下:
看到這,大家應該對Servlet 執行過程一目瞭然了吧,然後我們繼續往下看JSP 的運行原理
伺服器具體是如何做到的?
- 用戶通過瀏覽器發送請求
- tomcat伺服器收到*.jsp請求,會到org.apache.jasper.servlet.JspServlet處理,(tomcat web.xml) 里有對應處理jsp 請求具體配置
test01.jsp頁面未被訪問時,查看tomcat 下work 目錄 截圖如下:
當JSP頁面第一次被請求時,JSP引擎會將JSP原始文件轉換成Servlet源代碼,然後調用Java編譯器,編譯成Servlet,併在Servlet引擎中執行。當再次有請求的時候,JSP引擎會見差異編譯好的JSP是否比原來的JSP原始文件要新,如果是,運行Servlet;如果不是,表示文件已經更新的了,就會從新執行轉換和編譯的過程。
test01.jsp訪問成功後進入文件再次查看
查看目錄下具體生成的文件
簡要查看生成的 test01_jsp.java 文件內容
查看tomcat 源碼,查看HttpJspbase到底是什麼???
至此,可以發現 HttpJspBase 就是繼承了HttpServlet!!!
所以,到現在為止,我們可以這樣理解,可以把jsp 看做一個servlet來對待!!!
既然jsp 就是一個servlet ,為何還要使用jsp?
我們在使用servlet 時,大家應該能夠體會到在使用servlet 向瀏覽器輸出頁面內容時,並沒有那麼容易,同時當servlet 中涉及到的邏輯很複雜的時候,既要處理業務邏輯,又要控制頁面數據的顯示形式,這時候僅僅使用servlet來完成這些功能理論上可以實現,但對於項目的後期維護來說,工程量可能就是巨大的,於是業界就催生出了jsp(當然還有其他的技術 .net,php等)的技術,通過使用jsp技術,我們可以結合servlet ,將要顯示的數據通過jsp 來進行展現,總結來說就是:
Servlet:
優點:邏輯處理方便
缺點:頁面表現麻煩
Jsp:
優點:頁面表現方便
缺點:邏輯處理麻煩
所以要互補使用.一般項目採用:jsp+servlet+javabean 開發方式進行項目開發哦
好了,說到這,相信大家對JSP 視圖展示層技術有了很清晰的認識,那另外的Velocity同樣作為視圖層技術又是怎麼實現與使用的呢,哈哈,且聽下次與大家分享。