Java web 學(xué)習(xí)—Struts2

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文件

過濾器使用的類包org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter ? ? ??

<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注入)

要有set()

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)空指針異常

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容