簡(jiǎn)單來(lái)說(shuō)稽坤,Struts2的作用就是把請(qǐng)求和結(jié)果分開(kāi)丈甸,即提高可擴(kuò)展性,使得更加靈活尿褪。
一睦擂、struts2的基本配置
新建一個(gè)web project項(xiàng)目,下載struts2杖玲,配置Strusts2環(huán)境顿仇。
- 1配置struts.xml文件。
將struts-2.1.6目錄中的apps中的struts2-blank.war文件解壓,打開(kāi)WEB-INF---------classes--------struts.xml文件拷貝到新建項(xiàng)目的src目錄下臼闻。
【struts-2.1.6\apps\struts2-blank-2.1.6-\WEB-INF\classes\struts.xml】
- 2配置struts2所需的jar包鸿吆。
將【struts-2.1.6\apps\struts2-blank-2.1.6-\WEB-INF\lib】下的jar包拷貝到 項(xiàng)目的WebRoot-----WEB-INF
----lib目錄下。
- 3配置web.xml文件述呐。
將示例web.xml文件中關(guān)于struts2的filter標(biāo)簽配置復(fù)制到項(xiàng)目的web.xml中惩淳。
1.源碼和javadoc的設(shè)置:
【可查閱struts2源碼,按F1可查閱javadoc】
在jar包上右鍵---properties---Java Source Attachment/Java Doc Location:
【struts2的Java Source源碼路徑為:
\struts-2.3.16.1\src\core\src\main\java
struts2的Java Doc路徑為:
\struts-2.3.16.1\docs\struts2-core\apidocs】
2.xml文件自動(dòng)提示設(shè)置
Window----Preferences----輸入catalog----XML catalog----Add---設(shè)置dtd文檔location乓搬、keyType和key
【Location:選擇dtd文檔位置思犁。
解壓 struts-2.3.16.1\lib\ 目錄下的struts2-core-2.3.16.1.jar文件,選擇struts-2.0.dtd文件位置进肯。
Key Type:URL
Key:輸入dtd的URL地址抒倚,在struts.xml文件的上部的DOCTYPE標(biāo)簽中定義的 "http://struts.apache.org/dtds/struts-2.0.dtd"】
- 4配置action。
簡(jiǎn)化struts.xml中package標(biāo)簽中的內(nèi)容坷澡。
<constant>標(biāo)簽:struts.devMode為true時(shí)托呕,為開(kāi)發(fā)模式,可更改action的name且不用重啟tomcat
<package>標(biāo)簽:包名频敛,設(shè)置namespace项郊。類(lèi)似java項(xiàng)目中的包名,起到防止action重名的作用斟赚。
<action>標(biāo)簽:設(shè)置action的name着降,設(shè)置相應(yīng)result路徑。
二拗军、Struts2運(yùn)行機(jī)制
Struts2的作用:把請(qǐng)求和視圖分開(kāi)任洞,增強(qiáng)項(xiàng)目的可擴(kuò)展性。
工作流程:
1发侵、客戶端瀏覽器發(fā)出HTTP請(qǐng)求.
2交掏、根據(jù)web.xml配置,該請(qǐng)求被FilterDispatcher接收
3刃鳄、根據(jù)struts.xml配置盅弛,找到需要調(diào)用的Action類(lèi)和方法, 并通過(guò)IoC方式叔锐,將值注入給Aciton
4挪鹏、Action調(diào)用業(yè)務(wù)邏輯組件處理業(yè)務(wù)邏輯,這一步包含表單驗(yàn)證愉烙。
5讨盒、Action執(zhí)行完畢,根據(jù)struts.xml中的配置找到對(duì)應(yīng)的返回結(jié)果result步责,并跳轉(zhuǎn)到相應(yīng)頁(yè)面
6返顺、返回HTTP響應(yīng)到客戶端瀏覽器
namespace:action訪問(wèn)路徑
用戶自定義Action
1.IndexAction中有execute()方法禀苦,返回“success”字符串,struts.xml的action標(biāo)簽中定義class创南。
當(dāng)struts2的filter讀到struts.xml中的action是一個(gè)class時(shí)伦忠,每次訪問(wèn)struts2都會(huì)調(diào)用createMessage()方法省核,new一個(gè)新的action的class對(duì)象稿辙,調(diào)用execute()方法,不會(huì)出現(xiàn)線程同步的問(wèn)題气忠×诖ⅲ【而struts1每次訪問(wèn)時(shí)會(huì)訪問(wèn)可能用的是同一個(gè)對(duì)象,會(huì)出現(xiàn)線程同步的問(wèn)題旧噪《帜龋】
2.當(dāng)action中不配置class時(shí),可以使IndexAction繼承Action接口淘钟,實(shí)現(xiàn)execute()方法宦赠,返回SUCCESS常量。
3.當(dāng)action中不配置class時(shí)米母,可以使IndexAction繼承ActionSupport類(lèi)勾扭,重寫(xiě)execute方法,返回SUCCESS常量铁瞒。
------------------------------日常開(kāi)發(fā)使用第三種方法妙色。
路徑問(wèn)題
Action--method
Action執(zhí)行的時(shí)候并不一定要執(zhí)行execute()方法
(1)可以在struts.xml配置文件中配置Action的時(shí)候用“method=要執(zhí)行的方法”,并在對(duì)應(yīng)的Action中實(shí)現(xiàn)該方法慧耍。
(2)也可以在url地址中動(dòng)態(tài)指定(動(dòng)態(tài)方法調(diào)用DMI)【推薦】
不指定method身辨,在調(diào)用時(shí)通過(guò)在action后添加“!方法名”的方式調(diào)用Action中的方法。
Action---通配符
使用通配符芍碧,可將配置量降到最低煌珊。但一定要遵守“約定優(yōu)于配置”的原則。
通過(guò)Studentadd訪問(wèn)action
在action配置中沒(méi)有對(duì)應(yīng)的Studentadd的action泌豆,但有Student怪瓶。result中{1}與表示的內(nèi)容相同。