簡單談談 SimpleFramework 系統架構

cknet 14年前發布 | 13K 次閱讀 虛擬平臺 ODF

工作機理


圖:基于過濾器(/后處理)的Web應用框架工作原理

Web應用中,無論服務器端采用(Java EE/.NET),客戶端的請求經Web或應用服務器解析后,最終返回客戶端的響應內容主體都是HTML(含Javascript/CSS等)。由此,解決問題的契機就是在響應返回客戶端(/瀏覽器)之前,“攔截”響應,解析其中HTML,并進行“再處理”,此即“后處理”應用模式。其實現方案可有服務器端(過濾/攔截器等)和客戶端(插件等)兩種。在Java EE體系下,支持Servlet 2.3的各種應用服務器(Weblogic/Websphere/JBoss/Tomca等)都有“過濾器(Filter/Interceptor)”機制,恰好為本框架的實現奠定了技術基礎。
  • 處理流程
         了解處理流程將有利于有效地使用本框架,其中包含如下步驟:
  1. 攔截響應中HTML。
  2. 組件XML元數據解析。
  3. 業務Handle類執行。
  4. 組件代碼生成及渲染。
  5. 復合HTML生成及響應。
  • 應用加載
         基于本框架的應用可通過web.xml中定義的Filter加載(另提供一Web應用入口的繼承類AbstractWebApplication,可更快捷搭建Web應用)。如下為典型配置示例:
<servlet>
    <servlet-name>startup</servlet-name>
    <servlet-class>net.simpleframework.web.SimpleWebApplication</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>
<filter>
    <filter-name>actionFilter</filter-name>
    <filter-class<net.simpleframework.web.page.PageFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>actionFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>
<listener>
    <listener-class>net.simpleframework.web.page.PageEventAdapter</listener-class>
</listener>
  • 原始請求-響應
         原始請求-響應過程,本框架并未參與,因此從理論上講,本框架可兼容任何基于Servlet規范的框架,諸如Struts、SpringMVC等。
  • 響應攔截
         當響應(Respone)流中生成HTML文檔,在還未Flush到瀏覽器時,本框架接管該HTML文檔,并重新結合組件(XML)定義,做“后處理”。
  • 元數據解析
         解析請求中含有XML文件的元信息定義,此類信息是本框架的組件基礎。
  • Handle執行
         如定義了HandleClass,本框架則調用該Handle業務類,并將結果傳遞給渲染器。
  • 組件渲染
          渲染器(Render)根據組件定義及Handle執行結果,生成響應的HTML、Javascript、CSS等元素。
  • 重構HTML
        最后將重新組合的HTML推到瀏覽器端。如含有異步請求的腳本,則重復如上步驟。

框架模式

</font>


從上圖可知,基于過濾器的后處理模式,實際上是利用過濾器機制對MVC2的擴展,是兩個MVC2模式的有機組合:先由“Filter”作為“Controller”,以另一MVC2作為其“虛模型”,再將此“Model”分解為一完整的MVC2,分別由原Model和作為Post-View(基于XML定義)的解析器(Parser)及邏輯處理器(HandleClass)的Post-Controller構成。

遵循標準
  1. 后端實現技術為Java ,前端實現技術為HML+Javascript+CSS,皆為業界標準;
  2. 未創建自己專有語法、標簽或其他,遵循的標準就是JSP\Serverlet、Taglib等Java EE的原生或固有標準;
  3. 采用了類似XUI的XML式組件聲明,但語義更加簡潔;
  4. 不是“重新發明輪子”,可看做WEB過濾器的MVC擴展實現;
  5. 以獨特的AJAXRequest組件對象、仿真HTTP Client以及代碼自動生成技術,內置AJAX引擎(缺省為Prototype)實現無Javascript的AJAX應用;


</div>
<!--[if gte mso 10]>

<![endif]-->

 本文由用戶 cknet 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
寫博客

博客分類