【struts】struts初始化主線

一、概述

    struts框架的入口是一個filter(StrutsPrepareAndExecuterFilter),filter在學習jsp/servlet的時候最先引入,其主要是由一個filter接口中的三個方法和三個參數——init和doFilter、destory方法,FilterConfig(web.xml中filter配置參數)和協議無關的ServletRequest、ServletResponse。縱觀struts2出現的前世今生,其實整個框架由兩部分組成,一部分是和HTTP協議有關的struts部分,另一部分則與協議無關、與業務邏輯緊密相連的xwork部分,因此運行主線還可以再細緻分一下,分成HTTP預處理(由struts完成)過程和HTTP執行過程(由xwork完成)。

    查看StrutsPrepareAndExecuterFilter源碼,整個struts框架可以分成三條主線:

    1. 初始化主線:init(FilterConfig)方法驅動;

    2. 運行主線:doFilter(ServletRequest, ServletResponse)方法驅動;

        2.1 HTTP預處理過程:和struts有關;

        2.2 HTTP執行過程:和xwork有關;

    3. 銷燬主線:destory()方法驅動;

    至此,struts2的所有主線列舉完成,本次主要分析struts框架的初始化主線。

    推薦閱讀:《struts技術內幕》——陸舟 《struts in action》


二、初始化主線

    web容器的初始化順序,ServletContext>listener>filter>servlet,對應着web.xml中配置的讀取順序context-param會最先讀取,接着纔是listener、filter、servlet標籤中配置的init-param。因此,想要使用struts框架,拷貝jar也好,配置struts.xml文件也好,最重要還是在web.xml中配置StrutsPrepareAndExecuterFilter,否則就算你做好一切準備工作,也不能把struts接入你的項目。

    寫到這裏決定不寫了,還是親自去看源碼吧,直接查看filter裏面的init方法,裏面主要初始化日誌工廠、HTTP預處理對象Prepare、HTTP請求處理對象Executer,最重要的是整個Struts作爲MVC框架的Controller——Diapatcehr的建立及其init方法,而整個struts的核心容器(Struts IOC/DI)也在Dispatcher中初始化完成,另外,Dispatcher還負責default.properties、struts-default.xml、struts.xml、struts-plugin.xml的加載,等等。

    需要明確的是,struts是由兩部分組成的,這一點尤爲重要,其中Dispatcher類作爲粘合劑,將struts和xwork粘合在一起,從而形成struts2 web框架和web容器解耦的基點。要想弄明白struts2框架,一個Filter和一個Dispatcher的瞭解首當其衝。


三、至此結束

    struts2作爲展示層的MVC框架還是太“重”了,當前Spring MVC也逐漸佔有更多的市場。

    我們說分層開發,其實是面向一個應用而言的分層:表示層、業務層和持久層,struts2和Spring MVC作爲表示層的MVC框架。下面擼一下各層常用框架和技術。

    展示層:servlet/jsp、Spring MVC、struts2

    業務層:Spring

    持久層:JDBC、DButils、Spring JDBC、Mybatis、hibernate

    此外,如果你還有精力,研究一下java.util.concurrent[.*]包和NIO,這些和機器硬件原理打交道太多了,是你進階必備的只是,譬如併發編程裏面的JMM(java內存模型,不是簡單的JVM的內存分類),抽空研究一下ThreadLocal也很有必要。


附註:

    本文偷懶沒寫完,如有需要,請加羣討論,謝謝!

發佈了82 篇原創文章 · 獲贊 95 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章