伺服器啟動:
1. 附加元件目web.xml
2. 建立struts核心過濾器對象, 執行filter → init()
struts-default.xml, 核心功能的初始化
struts-plugin.xml, struts相關插件
struts.xml 使用者編寫的配置檔案
通路:
3. 使用者通路action, 伺服器根據通路路徑名稱,找對應的aciton配置, 建立action對象
4. 執行預設攔截器棧中定義的18個攔截器
5. 執行action的業務處理方法
struts-default.xml, 詳解
目錄:struts2-core-2.3.4.1.jar/ struts-default.xml
内容:
1. bean節點指定struts在運作的時候建立的對象類型
2.指定struts-default包 【使用者寫的package(struts.xml)一樣要繼承此包 】
package struts-default 包中定義了:
a. 跳轉的結果類型
dispatcher 轉發,不指定預設為轉發
redirect 重定向
redirectaction 重定向到action資源
stream (檔案下載下傳的時候用)
b. 定義了所有的攔截器
定義了32個攔截器!
為了攔截器引用友善,可以通過定義棧的方式引用攔截器,
此時如果引用了棧,棧中的攔截器都會被引用!
defaultstack
預設的棧,其中定義預設要執行的18個攔截器!
c. 預設執行的攔截器棧、預設執行的action
<default-interceptor-ref name="defaultstack"/>
<default-class-ref class="com.opensymphony.xwork2.actionsupport" />
<interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.prepareinterceptor"/>
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.parametersinterceptor"/>
攔截器(先睹為快):
攔截器功能與過濾器功能類似。
差別:
共同點: 都攔截資源!
差別:
過濾器,攔截器所有資源都可以; (/index.jsp/servlet/img/css/js)
攔截器,隻攔截action請求。
攔截器是struts的概念,隻能在struts中用。
過濾器是servlet的概念,可以在struts項目、servlet項目用。
面試題: 攔截器什麼時候執行? (通路/啟動) 先執行action類建立,先執行攔截器?
1. 使用者通路時候按順序執行18個攔截器;
2. 先執行action類的建立,再執行攔截器; 最後攔截器執行完,再執行業務方法
問題1:struts.xml配置檔案沒有提示
解決a:
找到struts-2.0.dtd檔案, 拷貝到某個目錄:d:/dtd /.. (不要用中文目錄)
讓myeclipse關聯到上面dtd檔案,
→ windows àpreferences → 搜尋xml catalog
配置:
location: 上面配置的dtd目錄
key: -//apache software foundation//dtd struts configuration 2.0//en
解決b:
讓機器連接配接網際網路,工具會自動下載下傳dtd檔案,緩存到myeclipse中!