一垮抗、struts2簡介
Struts2是一個(gè)基于MVC設(shè)計(jì)模式的Web應(yīng)用框架虏束,它本質(zhì)上相當(dāng)于一個(gè)servlet洪添,在MVC設(shè)計(jì)模式中绅项,Struts2作為控制器(Controller)來建立模型與視圖的數(shù)據(jù)交互曲尸。也就是說赋续,struts2可以實(shí)現(xiàn)代碼的MVC分離,而傳統(tǒng)的servlet在面對(duì)龐大的工程時(shí)解耦不是很好另患。在團(tuán)隊(duì)協(xié)作里面纽乱,struts2的配置文件是聯(lián)系不同模塊之間的關(guān)鍵,方便解耦柴淘。
不過迫淹,Struts2曾曝出2個(gè)高危安全漏洞秘通,一個(gè)是使用縮寫的導(dǎo)航參數(shù)前綴時(shí)的遠(yuǎn)程代碼執(zhí)行漏洞,另一個(gè)是使用縮寫的重定向參數(shù)前綴時(shí)的開放式重定向漏洞敛熬。這些漏洞可使黑客取得網(wǎng)站服務(wù)器的“最高權(quán)限”肺稀,從而使企業(yè)服務(wù)器變成黑客手中的“肉雞”。所以有觀點(diǎn)認(rèn)為SpringMVC將逐步吞并struts2应民,不過本人沒有學(xué)習(xí)過SpringMVC话原,所以無法對(duì)以上觀點(diǎn)做出評(píng)判。
二诲锹、struts2攔截器介紹
攔截器是面向切面編程的實(shí)例繁仁,它將多個(gè)模塊的共同代碼模塊提取出來,靈活地插入各個(gè)模塊之中归园,減少了系統(tǒng)的重復(fù)代碼黄虱,確保業(yè)務(wù)對(duì)象的整潔。
面向切面編程(AOP)舉例:一個(gè)工程當(dāng)中多個(gè)類需要在執(zhí)行之后打印日志信息庸诱,“打印日志信息”這一功能并不是某個(gè)特定模塊獨(dú)有的功能捻浦,如果在每個(gè)模塊都加入這部分代碼,就會(huì)導(dǎo)致代碼重用性降低桥爽,所以就有了面向切面編程編程朱灿,將打印日志信息這部分代碼提取出來,靈活的嵌入各個(gè)模塊钠四。
struts2攔截器體現(xiàn)了AOP思想盗扒,它可以在指定action的代碼執(zhí)行前后加入攔截器類的代碼,不需要的時(shí)候缀去,只需要在配置文件中刪除攔截器侣灶,同時(shí)可以保留攔截器的代碼。
三缕碎、攔截器的使用例子
此處使用struts2攔截器實(shí)現(xiàn)登錄驗(yàn)證功能來介紹攔截器的使用炫隶。
功能描述:網(wǎng)站的某部分內(nèi)容在用戶沒登錄之前是不能訪問的,最簡單的做法就是在每個(gè)展現(xiàn)內(nèi)容的action中加入幾句判斷用戶是否登錄的代碼阎曹,但如果涉及的action比較多,開發(fā)者就不得不復(fù)制粘貼同樣的代碼到不同的類中煞檩,而修改的時(shí)候也需要到各個(gè)類修改处嫌,比較麻煩。
struts2攔截器將代碼實(shí)現(xiàn)和AOP的配置分開來斟湃,配置信息集中在struts2.xml中熏迹,比較方便修改。此外代碼只有一份凝赛,可以做到一次修改注暗,造福全局坛缕。
流程如下(登錄之后才能訪問的網(wǎng)頁放在WEB-INF下):
登錄->action1->驗(yàn)證成功->跳轉(zhuǎn)到頁面1->點(diǎn)擊某個(gè)按鈕->調(diào)用action2->使用登錄后才能用的頁面2.
通常action1不用攔截器,因?yàn)楸旧硎堑卿涷?yàn)證部分捆昏,而action2則需要赚楚,所以需要在“”使用登錄后才能用的頁面2”前添加攔截器,變?yōu)椋?/p>
登錄->action1->驗(yàn)證成功->跳轉(zhuǎn)到頁面1->點(diǎn)擊某個(gè)按鈕->調(diào)用action2->攔截器驗(yàn)證當(dāng)前是否登錄->使用登錄后才能用的頁面2.
代碼:
1骗卜、配置web.xml宠页,使用struts2
2、jsp頁面
3寇仓、編寫對(duì)應(yīng)的action
4举户、編寫攔截器
5、配置struts2.xml