日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringSide 3 中的 Struts 2

發布時間:2025/7/14 javascript 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringSide 3 中的 Struts 2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在SpringSide 3 中,使用的MVC框架是Struts 2。Struts 2 向對于Struts 1 來說,具有相當多的優點,有很多人都說,用過Struts 2之后,再也不想看Struts 1了。然而,任何東西都有它的復雜性,Struts 2也不例外,SpringSide 3做了很多工作來簡化Struts 2 的使用。

先來說說Struts 2的特點:
1、編寫Action變得簡單了,Action變成了簡單的POJO,再也不用和ActionForm、ActionForward打交道了,返回的時候直接返回字符串即可。如果要訪問Servlet API,則直接使用ServletActionContext類的靜態方法。
2、Struts 2提供了插件機制,允許我們自己為它編寫插件,當然,要我自己寫是不現實的,但是面對別人寫的琳瑯滿目的插件,我一樣會昏頭。再網上隨便一搜,就可以發現40多種Struts 2插件。SpringSide 3選擇的CodeBehind,就是一種Struts 2插件,它的目的是為了簡化配置。
3、Struts 2提供了攔截器機制,之所以編寫Action的任務那么簡單,靠的都是這些攔截器,比如它們可以自動解析Web表單和URL參數,把它們注入到Action中。
4、Struts 2提供了豐富的taglib,當然,豐富也代表著我們要化更多的時間去學習。
5、Struts 2依然提供了Validator和i18n支持。
等等...

下面,我們來看看SpringSide 3是怎么使用Struts 2的吧。SpringSide 3的主要目標是降低我們使用Struts 2的復雜性,所以,它選擇了這些辦法:
1、沒有使用Validator和i18n,對數據的驗證交給了JQuery,這變成了表現層的任務,而且JQuery也可以使用AJAX從服務器端進行驗證。至于i18n,江南白衣說小網站用不上。
2、沒有使用Struts 2的UI標簽,當然也就沒有使用FreeMaker或SiteMesh了。

當然,省掉了一些東西,就省掉了我們不少的學習時間。對于Struts 2核心的一些東西,我們看看它是怎么做的:

1、使用CodeBehind插件來簡化配置。使用CodeBehind后,我們就可以不用配置result了,它可以根據我們Action的返回值自動猜測返回的視圖頁面,它猜測的規則是這樣的:返回頁面的路徑為struts.codebehind.pathPrefix + package namespace + action name + action returnvalue?+?.jsp,action returnvalue為success時,值為空,為其他時,值為"-" + return type。我們來看看SpringSide 3生成的項目中關于Struts 2的配置文件:



其中struts.codebehind.pathPrefix設置為“/WEB-INF/jsp/”,package的namespace沒有設置,所以,如果我們的Action為UserAction,則返回success時,就會返回到/WEB-INF/jsp/user.jsp,如果返回input,則返回到/WEB-INF/jsp/user-input.jsp。這里江南白衣玩了一個狡猾,他把所有的jsp頁面放到WEB-INF目錄中,別人就沒有辦法直接訪問了,這樣就可以簡化Acegi的配置工作。

2、關于攔截器棧
在上面講Struts 2的特點時,我已經說了Struts 2中攔截器的重要作用,在上面的截圖中,package的配置沒有做別的什么事,主要就是配置了攔截器棧。那么攔截器棧是怎么使用的呢?它是在Action類中通過@ParentPackage指定的,如下面的代碼:




下面,我來具體說一下攔截器有什么作用。
?例子一、我們知道Struts 2中的Action是和Servlet API解耦的,那么如果我們要在Action中訪問Servlet API怎么辦呢?一種辦法就是使用ServletActionContext,如下圖:



另外一種辦法,就是讓我們的Action實現ServletRequestAware接口,如下代碼:

?

public ? class ?MyAction? implements ?ServletRequestAware?{
???
private ?HttpServletRequest?request;
???
public ? void ?setServletRequest(HttpServletRequest?request)?{
????????
this .request? = ?request;
???}
???
public ?String?execute()? throws ?Exception?{
????????
// ?do?the?work?using?the?request
???????? return ?Action.SUCCESS;
???}
}
這時候,ServletConfigInterceptor 攔截器就會把request對象注入到我們的Action中。

例子二、ParametersInterceptor 攔截器會自動解析web表單或URL參數,并把它們注入到Action中。但是很多時候,我們不愿意我們的Action具有太多的屬性,因為一大堆的get、set方法看起來太亂糟糟,我們希望有一個專門的Model對象來存儲這些值,而且剛好我們為Hibernate設計的Entity類用來做Model正合適。這時,我們可以讓我們的Action實現ModelDriven接口,讓getModel()方法返回我們的entity對象即可。這正是SpringSide 3采取的方法,如下圖的代碼片斷:

這時候,ModelDrivenInterceptor攔截器就會幫助我們把解析的URL參數或表單數據注入到entity的屬性中,而不是Action中。

例子三、Preparable 接口聯合PrepareInterceptor攔截器一起工作,可以讓action在執行execute() 方法前, 執行一個prepare()方法,這也正是SpringSide 3的工作方式。

3、關于Action
有了上面對CodeBehind的理解和對攔截器棧的理解后,再來理解SpringSide 3中的Action就再簡單不過了,SpringSide 3中Action的繼承樹如下:


其中ActionSupport類是Struts 2提供的,另外兩個類是白衣自己擴展的。其中SimpleActionSupport主要是提供了一些繞過jsp頁面直接輸出字符串的方法,不值一談。而CRUDActionSupport就比較復雜,如下: public?abstract?class?CRUDActionSupport<T>?extends?SimpleActionSupport?implements?ModelDriven<T>,?Preparable?{
????
/**
?????*?進行CUD操作后,以redirect方式重新打開action默認頁的result名.
?????
*/
????
public?static?final?String?RELOAD?=?"reload";

????
/**
?????*?Action函數,默認action函數,默認指向list函數.
?????
*/
????@Override
????
public?String?execute()?throws?Exception?{
????????
return?list();
????}

????
/**
?????*?Action函數,顯示Entity列表.
?????*?return?SUCCESS.
?????
*/
????
public?abstract?String?list()?throws?Exception;

????
/**
?????*?Action函數,新增或修改Entity.?
?????*?return?RELOAD.
?????
*/
????
public?abstract?String?save()?throws?Exception;

????
/**
?????*?Action函數,刪除Entity.
?????*?return?RELOAD.
?????
*/
????
public?abstract?String?delete()?throws?Exception;

????
/**
?????*?在save()前執行二次綁定.
?????
*/
????
public?void?prepareSave()?throws?Exception?{
????????prepareModel();
????}

????
/**
?????*?在input()前執行二次綁定.
?????
*/
????
public?void?prepareInput()?throws?Exception?{
????????prepareModel();
????}

????
/**
?????*?屏蔽公共的二次綁定.
?????
*/
????
public?void?prepare()?throws?Exception?{
????}

????
/**
?????*?等同于prepare()的內部函數.?
?????
*/
????
protected?abstract?void?prepareModel()?throws?Exception;
}


第一,它做了把CRUD操作放到了同一個Action中的操作,這樣可以少寫幾個Action。這個工作難度不大,我覺得白衣此舉,主要是為了規范CRUD函數的命名。在Struts 2中,如果我們要訪問的不是默認的excute方法,可以使用如/user!save.action的格式,這樣訪問的就是UserAction的save方法。
第二,它實現了ModelDriven接口和Preparable接口,關于這兩個接口,我在前面講攔截器的時候已經提到過了,所以很容易理解。我們可以把我們為Hibernate設計的entity類作為Model,也可以把初始化這些entity的工作放到prepareSave()和prepareInput()方法中,這兩個方法將會在save()和input()方法執行前自動執行。
第三,它定義了一個靜態變量RELOAD,定義這個變量的目的是為了定義一個result的需要。CodeBehind中,大部分的result可以自己猜測,對于不能猜測的,需要使用@Results指定,如下代碼:

?

?好了,對SpringSide 3中Struts 2的分析就寫到這里了。總之,使用SpringSide 3時,對于Action這一塊非常簡單,如果不設及到CRUD操作,就繼承SimpleActionSupport,如果涉及到CRUD操作,就繼承CRUDActionSupport,并在getModel()/save()/prepareSave/input()/prepareInput()等框框中填入適當的代碼即可。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的SpringSide 3 中的 Struts 2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产91久久婷婷一区二区 | 九九精品网 | 久久久久久久极品 | 黄瓜视频91 | 天天操天天插天天射 | 骚狐网站 | 日批毛片 | 一区二区三区中文字幕在线观看 | av片在线观看网站 | 男女av网站| 波多野结衣一区二区在线 | 曰本三级日本三级日本三级 | 噼里啪啦免费看 | 国产农村妇女毛片精品 | 国产毛片久久久久久久 | 精品区| 黄色片子免费看 | 亚洲久久久久 | 欧美日本亚洲 | 国产在线一区二 | 综合激情五月婷婷 | 51人人看 | 日韩精品人妻一区二区中文字幕 | 福利视频在线免费观看 | 国产精品老牛影视 | 2014亚洲天堂| 大香依人 | 中文字幕9 | 婷婷久久网 | 少妇不卡视频 | 婷婷中文| 欧美成人免费视频 | 中文在线免费观看 | 久久久久久久久久99 | 97超碰超碰 | 手机在线永久免费观看av片 | 天天爱夜夜爽 | 成人高清免费 | 逼逼av网站| 黄色小视频国产 | 国产精品电影网站 | 国产人成视频在线观看 | 国产传媒欧美日韩 | 日本青青草| 精品黑人一区二区三区国语馆 | 农村老熟妇乱子伦视频 | 麻豆亚洲av熟女国产一区二 | 久久久噜噜噜www成人网 | 欧美一二区视频 | 欧美男女动态图 | 亚洲日本成人 | 亚洲清纯唯美 | 看久久| 日本免费高清视频 | 屁屁影院一区二区三区 | 免费一级a毛片夜夜看 | 成人影音在线 | 日韩欧美福利 | 日本高清不卡视频 | 黄色av地址| 成人午夜天 | 97无码精品人妻 | 精品一区二区三区蜜臀 | 中文国语毛片高清视频 | 中国极品少妇xxxx | 爱操视频 | 九九热在线视频观看 | 日韩欧美国产另类 | 婷婷去俺也去 | 欧美一二三区在线观看 | 三级av网站 | 欧美黑人一级 | 激情 亚洲 | 人人亚洲 | 中国免费看的片 | 欧美插插视频 | 在线观看国产精品入口男同 | 午夜久久久久久久久 | 日韩一级伦理片 | 里番acg★同人里番本子大全 | 亚洲日本天堂 | 欧美性生交大片免费看 | 性视频欧美 | 诱夫1v1高h | 美女高潮视频在线观看 | 亚洲av无码国产精品久久不卡 | av一区二区在线播放 | 男男play视频 | 鲁丝av | 极品超粉嫩尤物69xx | 涩涩视频在线观看免费 | 久久久久一区二区三区四区 | 黄色成人免费观看 | 91亚洲国产成人精品性色 | 成年人免费看的视频 | 国产又黄视频 | 国内精品一区二区三区 | 欧美一区精品 | 亚洲精品v日韩精品 |