標籤:共用 action element 簡單 實現原理 繼承 font 擷取 模組
這個簡單的MVC遵循為整體思路
解讀MVC思想(jsp和servlet實現),其實MVC(Model,view,controllor)思想就是把代碼分離開來各自分工合作,首先讓我們結合執行個體來進行分析,看我們這個項目下會有一個FrontControllor.java
這個是用來進行處理請求的一個前段控制期用來處理一個前端發來的請求,讓我們先來看一下前端控制器的內部實現原理吧!
繼承了HttpServlet類並且覆蓋了init()方法,並且通過super.init()可以知道,此方法覆蓋相當於追加,大家一定好奇什麼是ResourceBundle,那讓我們來看一下API是怎麼說的:資源套件屬於這樣的系列,其成員共用一個公用的基本名稱,但是名稱中還有標識其語言環境的其他組件。例如,某個資源套件系列的基本名稱可能是 "MyResources"。該系列應該有一個預設資源套件,其名稱與其系列名相同( "MyResources"),如果不支援指定的語言環境,則應該將此資源套件用作最後的手段。然後,此系列可根據需要提供特定於語言環境的成員,例如一個名為 "MyResources_de" 的德語資源套件。 (我的天啊,小編都驚訝了,這不會是國際化吧?)我的理解是這個類可以統配一些資源套件然後根據不同的語言環境切換道當前合適的資源套件,讓我們看一下這個類是如何使用這個方法的:如
執行個體化ResourceBundle類產生一個rb對象,rb對象屬於”action”(知識擴充,通過31行我們可以推理出.getBundle()是一個靜態方法,還不知道的小夥伴需要抓緊了複習java基礎知識啦!),getKeys()是一個非靜態方法,得到的是索引值對裡面的key的枚舉,枚舉是Enumeration它具有的方法只有兩個,hasMoreElements(),nextElement(),通過key得到value(屬於rb的索引值對)接下來麻煩了,同學們業不理解下面這段代碼啊!那好讓我們一起來進行一下學習和解讀:
反射編程的一些小的初級體會總結大體如下文字: String A="java.util.Date";都是等效的。
Class.forName(A).newInstance;
new Date();
Date.class.newInstance;
Date d;
d.getClass.newInstance;
那麼請問actions(是一個Map)裡面存的value是什麼東西?答案是已經執行個體化後的對象.接下來尋找那個資源套件吧!如:
接著向下看
原理如同actions一樣,不解釋!
接下來核心代碼!
從代碼中我們不難發現我們這個前端控制器的主要羅技控制模組為這個都post方法理解起來真的很難,那就讓我們一步一步的拆分吧!
74-75由於邏輯地址是*.action也就是說所有的以.action結尾的請求地址都是會被這個類所攔截擷取其請求資訊,那讓我們來看一下這個就是擷取了請求地址,然後對請求地址進行拆分, 第一步先擷取請求頁面.action去除.action就只剩單純的請求頁面了也就是actionurl,78-79行的含義是定義用來處理(model)這個頁面的****Action.java和所需要的方法。一個驚嘆號可以把請求頁面分割開來驚嘆號前面是一個請求頁面對應url.properties中匹配的key值,驚嘆號後就是一個點要求方法,想法十分完美。那麼如果沒有驚嘆號就來一個預設的吧,那麼什麼是預設的呢就是請求頁面就是我們直接要跳到的頁面方法來一個預設的execute。Handler其實是一個已經執行個體化的對象,我們前面提到過得,就是把action.properties裡面的資源檔全都以key-value(利用反射編程執行個體化的對象)的方式存起來了,如果為空白便是沒有取到,那樣我們就需要為了不讓頁面發生異常給一個預設處理model然後調到另一個View層。
基於servlet,jsp,來進行MVC思想的剖析 第一部分