JAVAEE企業級應用開發淺談之MVC 中的V-VIEW視圖

来源:http://www.cnblogs.com/shsxt/archive/2017/11/18/7858438.html
-Advertisement-
Play Games

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 內部執行原理

  1. 客戶端通過HTTP提出請求.
  2. Web伺服器接收該請求並將其發給servlet。如果這個servlet尚未被載入,Web伺服器將把它載入到Java虛擬機並且執行它。
  3. servlet將接收該HTTP請求並執行某種處理。
  4. servlet將向Web伺服器返回應答。
  5. Web伺服器將從servlet收到的應答發送給客戶端。


運行簡圖如下:


看到這,大家應該對Servlet 執行過程一目瞭然了吧,然後我們繼續往下看JSP 的運行原理


 
伺服器具體是如何做到的?

  1. 用戶通過瀏覽器發送請求
  2. 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同樣作為視圖層技術又是怎麼實現與使用的呢,哈哈,且聽下次與大家分享。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 面向對象概念 面向對象是利用類和對象來創建各種模型對真實世界進行描述,也能使程式變得簡單。 class 類 一個類即對一類擁有相同屬性的對象的抽象。其中類定義了這些對象都具備非屬性以及方法。 object 對象 一個對象即是一個類的實例化後的實例,一個類必須經過實例化後才能在程式中調用,一個類可以有 ...
  • 1. 框架代碼 用 PyCharm 新建一個名為 SimplePaintApp 的項目,然後新建一個名為 simple_paint_app.py 的 Python 源文件, 在代碼編輯器中,輸入以下框架代碼 運行上面的代碼,將顯示一個黑色背景的視窗 看起來很沒勁的樣子,不過你可不要小瞧這幾行代碼。這 ...
  • 在方法裡面建立properties對象 Properties pps = new Properties(); 調用.load()方法 pps.load(new FileInputStream("E:\\workplace\\testStudent\\src\\we.properties")); 整個 ...
  • 大家在中學就已經學過變數的概念了。例如:我們令 x = 100,則可以推出 x*2 = 200 試試下麵這段 Python 代碼 運行上面的代碼,小海龜將畫出下麵的圖案 x = 100 聲明瞭變數 x,並將它賦值為 100,用大家熟悉的中學數學語言來說,就是“令 x 等於 100” 接下來的代碼中 ...
  • 前面我們學習了numpy,現在我們來學習一下pandas。 Python Data Analysis Library 或 pandas 主要用於處理類似excel一樣的數據格式,其中有表頭、數據序列號以及實際的數據,而numpy就僅僅包含了實際的數據。 安裝 直接輸入: 最基本用法 輸出: 我們可以 ...
  • List<Map<String, Object>> queryData = configDao.queryConfig( expressions, conditions, expressions); Collections.sort(queryData, new Comparator<Map<Str ...
  • 一.生產者消費者問題? 1.生產者消費者問題(英語:Producer-consumer problem),也稱有限緩衝問題(英語:Bounded-buffer problem),是一個多線程同步問題的經典案例。該問題描述了兩個共用固定大小緩衝區的線程——即所謂的“生產者”和“消費者”——在實際運行時 ...
  • 作者:NiceCui 本文謝絕轉載,如需轉載需徵得作者本人同意,謝謝。 本文鏈接:http://www.cnblogs.com/NiceCui/p/7858473.html 郵箱:[email protected] 日期:2017-11-18 Python學習一:序列基礎詳解 一:序列介紹 Pyth ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...