MVC(模型-視圖-控制器)
Struts框架:Struts1,Struts2
struts1

控制器:中央控制器ActionServlet為控制層,將請求分在配置文件struts.cfg.xml中??蛻舳税l(fā)送的http請求由控制器處理然后返回ActionForward對象到指定jsp頁面
模型:ActionForm對象對表單數(shù)據(jù)進項封裝,與網(wǎng)友特表單進行交互,Java bean處理真正的業(yè)務(wù)請求,由action調(diào)用
視圖:界面
Struts2:
???????? 通過過濾器攔截要處理的請求,客戶端--->過濾器鏈(ActionContextClearUp過濾器,其它過濾器,StrutsPrepareAndExecuteFilter過濾器(必須配置))------>action映射器查找action對象,返回action對象的代理,----->action代理從配置器中讀出struts2的相關(guān)配置(struts2.xml)---->struts2攔截器------>action容器調(diào)用action對象---->返回結(jié)果視圖----->(過濾器)http請求返回瀏覽器
? ? ? ? Struts2通過一個過濾器StrutsPrepareAndExecuteFilter(web應(yīng)用和struts2api的 入口)(過濾器對象org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)將struts集成到web應(yīng)用中
完善配置信息
開發(fā)常用類包
1.struts2-core-2.5.10.1.jarstruts核心包(struts2.5版本的xwork-core.jar合并到struts-core.jar里了)
2.freemarker-2.3.23.jarfreeMarker是一個模板引擎,一個基于模板生成文本輸出的通用工具
3.commons-logging-1.1.3.jarJakarta的通用日志記錄包
4.ognl-3.1.12.jarognl表達式所需包
5.commons-lang3-3.4.jar為java.lang包提供擴展
6.commons-fileupload-1.3.2.jarstruts提供的文件上傳下載
7.log4j-api-2.7.jarstruts2.5版本開始必須導(dǎo)入該包,不然會無法開啟tomcat服務(wù)器
原博客有完整的配置以及代碼實現(xiàn)(轉(zhuǎn)自csdn :BYX903678890): blog.csdn.net/byx903678890/article/details/72902197
1.配置web.xml文件

<welcome-file-list>為歡迎頁面(網(wǎng)頁的第一個頁面,只用最前面的),
在舊版本中使用的是 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。
2.配置struts.xml

1.<package>聲明包
2.<action> 用于定義action對象,name為指定訪問action的url
3.<result> :設(shè)置處理結(jié)果轉(zhuǎn)發(fā)頁面
3.寫一個類繼承ActionSupport(也可不繼承):

4.測試:
訪問;http://localhost:8080/struts2/hellostruts2.action
5.可能會遇到的錯誤
(1)ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,在web.xml中配置正確過濾器類org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter這是2.5以上版本的StrutsPrepareAndExecuteFilter類所在的包。
(2)Tomcat無法啟動,Caused by:Java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger,將log4j-api-2.7.jar添加到項目中。
(3)通配符使用問題遇到的錯誤,可參考:http://blog.csdn.net/byx903678890/article/details/72877922
Action對象

1.SUCCESS:Action執(zhí)行成功的返回值
2.NONE:action處理不需要返回結(jié)果頁面的業(yè)務(wù)邏輯
3.ERROR:返回action執(zhí)行失敗的返回值
4.INPUT:返回到輸入信息的頁面的返回值
5.LOGIN:返回用戶登錄的返回值
請求參數(shù)的注入原理
(表單提交的數(shù)據(jù)會自動注入到與action相對應(yīng)的屬性,通過action對象為屬性提供setter注入)

Action流程
? ? ? ? 瀏覽器發(fā)送http請求時,web容器會調(diào)用過濾器的doFilter()方法,并通過內(nèi)部處理機制尋找相匹配的action對象,找到則調(diào)用actoin對象的execute(),然后將action返回值到所映射的頁面,最后通過視圖返回給瀏覽器。
“*.action”請求的返回視圖由action對象決定(通過查找返回的字符串對應(yīng)的配置項),如上struts1中execute()返回的success,struts2就會到配置文件中查找success的配置項

動態(tài)Action
通過execute()方法判斷請求對象然后調(diào)用響應(yīng)請求(通過在請求action的URL地址后+!+請求方法名稱實現(xiàn))
struts2配置
name:包名
extends:繼承類
namespace:名稱空間,以?/?開頭
abstract:將包聲明為抽象類型
Action配置
相當(dāng)于一個控制器,struts通過action對象處理http請求(請求地址的映射配置在struts文件中)
<name>:配置action被請求的URL映射
class:action對象的類名
method:調(diào)用的action的方法
converter:指定類型轉(zhuǎn)換器的類
通配符:
*:?匹配字符(如add*將匹配以add開頭的所有?)
\:?轉(zhuǎn)義字符:
struts2的開發(fā)模式
1.與servlet API的交互
實例化ActionContext:public static ActionContext getContext()
獲取request:public Object get(Object key)
Map request=ActionContext.getContext.get("request");
獲取session:public Map getSession() ? ?返回的Map對象范圍作用于HttpSession
獲取application:public Map getApplication() ? ?返回的map對象作用于ServletContext
域模型DomainModel
領(lǐng)域模型:通過直接定義實例對象的引用來調(diào)用實體對象進行相關(guān)操作,但要求請求參數(shù)必須指定參數(shù)對應(yīng)的實體對象。將某一領(lǐng)域的實體直接封裝成為一個實體對象,如操作用戶信息則將用戶信息封裝成為一個領(lǐng)域?qū)ο骍ser;
實現(xiàn)一個注冊功能:

?驅(qū)動模型ModelDriven
接口ModelDriven,通過實現(xiàn)ModelDriven的getModel()方法獲取指定的實體對象: ?T getModel()(ModelDriven接口應(yīng)用了泛型,getModel返回值為所要獲取的實體對象)

同樣是實現(xiàn)注冊
處理表單實現(xiàn)ModelDriven接口和getModel()方法


表單中元素名稱不需要指定明確的實體對象引用,其中user需要進行初始化操作,否則在getModel()方法獲取實體對象時將出現(xiàn)空指針異常