1. 程式人生 > >深入淺出學習Struts1框架(六):ActionServlet的例項化

深入淺出學習Struts1框架(六):ActionServlet的例項化

之前寫了五篇關於struts1框架學習的部落格,主要是從mvc的一個例項開始,慢慢重構出一個struts1框架雛形,通過這個雛形來引出我們要學習的struts1框架並且編寫了一個struts1例項。五篇部落格如下:

今天我們來分析一下先前的Struts1框架的例項。在分析之前希望讀者能夠再次看一下struts1框架(五)的部落格,以便對這篇部落格的理解。

在struts框架(四)中我們介紹了struts1框架結構:

 

從struts1框架結構來看,客戶端的請求會發送到Actionservlet上,這個AcitonServlet就像是我們在struts1框架(一)

中介紹的testAction一樣,就是處理伺服器傳來的請求,所以我們要在web.xml裡面配置ActionServlet,我們也看到struts框架(五)中web.xml的配置檔案中的對ActionServlet的配置資訊:

[html] view plaincopyprint?
  1. <servlet>
  2.    <servlet-name>action</servlet-name>
  3.    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  4.    <init-param>
  5.      <param-name>config</param-name>
  6.      <param-value>/WEB-INF/struts-config.xml</param-value>
  7.    </init-param>
  8.    <init-param>
  9.      <param-name>debug</param-name>
  10.      <param-value>2</param-value>
  11.    </init-param>
  12.    <
    init-param>
  13.      <param-name>detail</param-name>
  14.      <param-value>2</param-value>
  15.    </init-param>
  16.    <load-on-startup>2</load-on-startup>
  17.   </servlet>
  18. <!-- Standard Action ServletMapping -->
  19.  <servlet-mapping>
  20.    <servlet-name>action</servlet-name>
  21.    <url-pattern>*.do</url-pattern>
  22.  </servlet-mapping>
  23. </web-app>


知道配置ActionServlet之後,我們看一下除了配置ActionServlet還配置了一些初始化引數資訊,首先我們看第一個config引數,這裡配置的是/WEB-INF/struts-config.xml,因為要下面傳遞一個這樣一個配置資訊,這個xml檔名是struts1標準的名字,所以這裡這個初始化資訊完全可以刪除,如果不用這個標準名稱這裡就必須要在這裡配置。現在我們配置的是標準名字,所以我們可以刪除,這是為什麼呢?這裡要看ActionServlet原始碼才可以。


從圖片上我們能看到ActionServlet中已經寫好了預設的config資訊了,就是標準名字。所以這裡刪除也是可以的。

在看下面的debug和detail引數,這兩個引數資訊是有關日誌資訊級別的設定,主要關於解析配置檔案/WEB-INF/struts-config.xml級別的初始化引數。這裡這兩個引數可以完全去掉也不影響。

最後還有一個load-on-startup配置,這個是初始化servlet級別的初始化資訊,這個引數如果大於等於0就是說明在伺服器一啟動就把servlet初始化,也就是呼叫ActionServlet的init方法,這個也可以到ActionServlet的原始碼中去查詢。

當ActionServlet初始化的時候就會讀取/WEB-INF/struts-config.xml資訊到記憶體中,讀到記憶體是以什麼樣的形式展現的呢?我們現在可以看一下以前部落格的那個mvc例項,那裡面讀取配置檔案中的資訊是以Actionmapping的形式展現的(如果這裡不理解,建議看一下我原先部落格的那個mvc小例項)【這裡是如何獨到記憶體的,請看下篇部落格分析】。

另外servlet-mapping的配置就不講解了,這個都知道就是匹配url路徑的,當遇到url-pattern的路徑時候就會例項化Actionservlet。

通過這篇部落格我們知道了當我們請求的時候ActionServlet是怎樣例項化的,也知道為什麼我們要配置web.xml資訊了。那麼我們為什麼要配置/WEB-INF/struts-config.xml檔案,ActionServlet是如何傳遞請求的,如何和ActionForm、ActionMapping、Action等互動的最終完成使用者請求的呢?下一篇就會慢慢道來,敬請期待!