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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...