最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Struts中的Action 單例與多例詳解

 更新時間:2017年05月06日 10:36:24   投稿:lqh  
這篇文章主要介紹了 Struts中的Action 單例與多例詳解的相關資料,需要的朋友可以參考下

 Struts中的Action 單例與多例詳解

struts2中action是多例的,即每次訪問網(wǎng)絡地址的時候都會產(chǎn)生一個action

public class pr_action {
  public pr_action(){
    System.out.println("創(chuàng)建action成功?。?!");
  }
  public void execute(){

  }
}

運行代碼可以看到,每次訪問該網(wǎng)絡地址都會在控制臺輸出一次?。?!

如果是單例的話,若出現(xiàn)兩個用戶都修改一個對象的屬性值,則會因為用戶修改時間不同,兩個用戶訪問得到的屬性不一樣,操作得出的結果不一樣。

舉個例子:有一塊布長度300cm,能做一件上衣(用掉100cm)和一件褲子(用掉200cm);甲和乙同時訪問得到的長度都是300cm,
甲想做上衣和褲子,他先截取100cm去做上衣,等上衣做完再去做褲子,而乙這時正好也拿100cm去做上衣,那好,等甲做完上衣再做褲子的時候發(fā)現(xiàn)剩下的布(100cm)已經(jīng)不夠做褲子了…..這就是影響系統(tǒng)的性能,解決的辦法就是給甲和乙一人一塊300cm的布,就不會出現(xiàn)布被別人偷用的事情,也是就單實例和多實例的區(qū)別

如果設置成單例,那么多個線程會共享一個ActionContext和ValueStack,這樣并發(fā)訪問的時候就會出現(xiàn)問題了

struts 2的Action是多實例的并非單例,也就是每次請求產(chǎn)生一個Action的對象。原因是:struts 2的Action中包含數(shù)據(jù),例如你在頁面填寫的數(shù)據(jù)就會包含在Action的成員變量里面。如果Action是單實例的話,這些數(shù)據(jù)在多線程的環(huán)境下就會相互影響,例如造成別人填寫的數(shù)據(jù)被你看到了。所以Struts2的Action是多例模式的。

問題出現(xiàn)了,可以讓struts2的action變成單例模式么?我在使用spring來生成action的時候,發(fā)現(xiàn)生成的action居然全是單例的。這不是讓我的程序默認就跑出bug來么?上個用戶提交的信息,如果下個用戶沒填,居然跑到上個用戶輸入的信息去了。

背景:

1) Struts2會對每一個請求,產(chǎn)生一個Action的實例來處理.

2) Spring的Ioc容器管理的bean默認是單實例的.

首先從數(shù)據(jù)安全性的問題上考慮,我們的Action應該保證是多例的,這樣才不會出現(xiàn)數(shù)據(jù)問題。但是如果有的action比如只有admin才能操作,或者某些action,全站公用一個來提高性能,這樣的話,就可以使用單例模式。

不過幸好,Spring的bean可以針對每一個設置它的scope,所以,上面的問題就不是問題了。如果用多例,就在spring的action bean配置的時候設置scope=”prototype”.好吧,問題到此結束。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

最新評論

汉川市| 崇州市| 会同县| 班玛县| 伊川县| 池州市| 花垣县| 武平县| 万年县| 潮安县| 翁源县| 雷州市| 永丰县| 邳州市| 冀州市| 安塞县| 荆州市| 通化县| 海淀区| 汉阴县| 微山县| 大兴区| 博爱县| 克什克腾旗| 普格县| 新干县| 砚山县| 潜江市| 托克逊县| 内江市| 永吉县| 姚安县| 武冈市| 海原县| 谷城县| 怀柔区| 井冈山市| 泸定县| 岚皋县| 乌海市| 贵溪市|