Struts2框架獲取Servlet API之注入方式詳解
在struts-default.xml的配置文件中
有一個 servletConfig攔截器
查看 servletConfig的對應的類的 ServletConfigInterceptor源碼
首先獲取action類,接著判斷這個action實現了哪個介面.
例如實現了ServletRequestAware介面,那麼Struts2框架就幫你把request對象注入到當前的action中.
測試代碼如下:
建立一個login.jsp頁面. 裡面有一個簡單的註冊姓名和密碼的輸入框
name屬性分別為,
新建一個LoginAction的Java類實現ServletRequestAware介面,重寫了setServletRequest方法
把request對象,傳遞給了當前的action類
在LoginAction類中,先執行的是setServletRequest()方法,是由StrutsPrepareAndExecuteFilter這個Filter過濾器調用setServletRequest方法, 那麼LoginAction這個類就得到了request對象.再執行login()方法獲取參數.
這也涉及到了一個知識點:
在一個類中,裡面如果有很多的方法,這些方法不是從上到下依次執行的,主要是看誰先被調用. 方法裡面的代碼是從上到下執行的.
由於是先載入struts-default.xml配置文件,setServletRequest(HttpServletRequest request)方法先被調用.
後載入struts.xml配置文件,配置了login()方法,那麼就會被調用和執行.
Struts2框架配置文件的執行順序
default.properties 該配置文件聲明了struts2框架的常量
Struts-default.xml struts2框架的核心功能都是在該配置文件中配置的。
struts.xml 在src的目錄下,代表用戶自己配置的配置文件
最後載入web.xml的配置文件
注意:後載入的配置文件會覆蓋掉之前載入的配置文件(在這些配置文件中可以配置常量)
注入的方式執行的流程:
login.jsp中填寫了姓名和密碼的參數,當點擊註冊按鈕,會向伺服器發送請求,StrutsPrepareAndExecuteFilter就會進行攔截,會載入一開始提到的struts-default.xml中的interceptor攔截器.其中就有servletConfig
在ServletConfigInterceptor類中,其中一段代碼如下
其中:
是獲取當前的action類
是通過多態的方式判斷action繼承了哪個類
框架底層獲取了request 對象
執行了setServletRequest(request)方法.
LoginAction重寫了setServletRequest(request)方法,通過 那麼就拿到了request對象.
總結:
當servletConfig對應的類執行時,會得到當前訪問的Action對象
在通過判斷是否實現指定的介面來將需要的servlet api對象注入到action類當中
TAG:稻香的超人不會飛 |