1. struts2的工作原理 客戶端發送請求 經過一系列的過濾器 FilterDispatcher通過ActionMapper來決定這個REquest需要調用的Action FilterDispather交給ActionProxy 通過ConfigurationManager詢問struts.xm ...
struts2的工作原理
客戶端發送請求
經過一系列的過濾器
FilterDispatcher通過ActionMapper來決定這個REquest需要調用的Action
FilterDispather交給ActionProxy
通過ConfigurationManager詢問struts.xml找到對應的Action
ActionProxy創建一個ActionInvocation實例
調用Action Action執行完畢ActionInvocation負責根據struts.xml中的配置找到對應的返回結果
Struts攔截器,常用的攔截器
Struts2的攔截器是其核心部分,它提供了一種機制,可以定義一個特殊的模塊,對請求進行封裝和處理,這個模塊在Action執行前後都可以進行
modelDriven(模型驅動)
servletConfig(獲取ServletApo)
params(動態參數註入)
validation(輸入驗證 聲明式驗證)
struts2的優點
實現了mvc模式 層次結構清晰,
豐富的標簽庫,提高了開發效率
提供了豐富的攔截器實現
方便異常處理
通過配置文件可以掌握系統各個部分之間的關係
struts2核心控制器
FilterDispatcher
它負責攔截所有的用戶請求,當 用戶請求到達時,該Filter會過濾用戶請求。如果用戶請求以action結尾,該請求將被轉入Struts 2框架處理。
struts2配置文件覆蓋順序
- struts.xml -> struts.properties -> web.xml(配置過濾器時,指定參數。程式員可以編寫)
struts2修改常量的方式
struts.xml
:<constant name="struts.action.extension" value="do"/>
struts.properties
:struts.action.extension=do
Action
Action為多例的,所以在Spring中Scope要設置參數
通配符 動態調用
Action實現的三種方式
單純的POJO
實現Action介面 (提供了格式化的返回參數)
繼承ActionSupport(實現了Action介面並且其中還做了一些國際化和驗證的功能)
訪問ServletAPI
ServletActionContext
實現介面 ServletRequestAware,ServletResponseAware ,ServletContextAware 攔截器負責註入(ServletConfig)
結果視圖
- chain(轉發到動作,要是不在同一個包內需要設置 name) dispatcher(預設) redierct (請求重定向) stream(文件上傳和下載)
預設的struts-default有什麼作用
struts-default包是由struts內置的,它定義了struts2內部的眾多攔截器和Result類型,而Struts2很多核心的功能都是通過這些內置的攔截器實現,當包繼承了struts-default包才能使用struts2為我們提供的這些功能。
通常每個包都應該繼承struts-default包。
struts2如何對指定的方法進行驗證
驗證功能是由validation攔截器來負責處理的。回顯錯誤信息是由workflow攔截器來負責處理的。
驗證失敗以後錯誤信息回顯需要設置
<result name="input">/regist.jsp</result>
結果視圖對類中所有方法進行驗證,覆寫validate()方法,當出錯的時候addFieldError("name", "請輸入用戶名");
對指定方法:將validate()方法改寫成為public void validateDemo1 後面是指定方法的名字(驗證Demo1方法)
值棧
ValueStack的生命周期為Action的生命周期,保存在request域中,
每個action都有與之對應的值棧,action對象預設保存在棧頂
使用OGNL訪問值棧中的內容不需要添加# 而訪問其他域中的需要添加#
ActionContext、ServletContext、pageContext的區別?
ActionContext是當前Action的上下文環境,通過ActionContext可以獲取到request、session、ServletContext等與Action有關的對象的引用
ServletContext是域對象,一個web應用中只有一個ServletContext,生命周期伴隨整個web應用;
pageContext是JSP中的最重要的一個內置對象,可以通過pageContext獲取其他域對象的應用,同時它是一個域對象,作用範圍只針對當前頁面
攔截器
每個攔截器都是實現了Interceptor介面的java類
Init() 在這個攔截器初始化的時候被調用
intercept() 當攔截器起作用的時候調用
destroy() 在攔截器被銷毀的時候調用
struts2預設有18個攔截器
自定義攔截器
編寫一個類繼承
MethodFilterInterceptor
struts2.xml中聲明攔截器
struts2.xml中聲配置攔截器 , 當指定自定義攔截器時預設攔截器會失效,所以還要顯示的在指定一次.
文件上傳
file域 form表單
enctype=multipart/form-data
提交方式為postaction接受文件對象為表單中的name, 文件類型為name+ContentType 文件名字為:jsp頁面file組件的名稱+FileName
可以用數組來接收多個文件的上傳