濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Struts中的Action 單例與多例詳解

Struts中的Action 單例與多例詳解

熱門標(biāo)簽:好操作的電話機(jī)器人廠家 泰州泰興400電話 怎么申請(qǐng) 南昌市地圖標(biāo)注app 如何用中國(guó)地圖標(biāo)注數(shù)字點(diǎn) 百度地圖添加標(biāo)注圖標(biāo)樣式 企業(yè)怎么在聯(lián)通申請(qǐng)400電話 南京新思維電話機(jī)器人 聊城智能電銷機(jī)器人外呼 地圖標(biāo)注市場(chǎng)怎么樣

 Struts中的Action 單例與多例詳解

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

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

  }
}

運(yùn)行代碼可以看到,每次訪問該網(wǎng)絡(luò)地址都會(huì)在控制臺(tái)輸出一次?。?!

如果是單例的話,若出現(xiàn)兩個(gè)用戶都修改一個(gè)對(duì)象的屬性值,則會(huì)因?yàn)橛脩粜薷臅r(shí)間不同,兩個(gè)用戶訪問得到的屬性不一樣,操作得出的結(jié)果不一樣。

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

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

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

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

背景:

1) Struts2會(huì)對(duì)每一個(gè)請(qǐng)求,產(chǎn)生一個(gè)Action的實(shí)例來(lái)處理.

2) Spring的Ioc容器管理的bean默認(rèn)是單實(shí)例的.

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

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

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

您可能感興趣的文章:
  • 關(guān)于struts2中Action名字的大小寫問題淺談
  • jQuery ajax請(qǐng)求struts action實(shí)現(xiàn)異步刷新
  • Struts2中Action三種接收參數(shù)形式與簡(jiǎn)單的表單驗(yàn)證功能
  • struts2通過action返回json對(duì)象
  • Struts2 ActionContext 中的數(shù)據(jù)詳解
  • 詳解在Java的Struts2框架中配置Action的方法
  • 用js模擬struts2的多action調(diào)用示例
  • struts2中action實(shí)現(xiàn)ModelDriven后無(wú)法返回json的解決方法
  • 詳解Struts2中Action訪問Servlet API的幾種方法

標(biāo)簽:白銀 烏蘭察布 吉林 銅川 臨汾 開封 山南 自貢

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Struts中的Action 單例與多例詳解》,本文關(guān)鍵詞  Struts,中的,Action,單例,與,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Struts中的Action 單例與多例詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Struts中的Action 單例與多例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    安图县| 基隆市| 南溪县| 渭南市| 江孜县| 麻城市| 克山县| 云林县| 漠河县| 永川市| 闽清县| 印江| 铜鼓县| 时尚| 浪卡子县| 青州市| 油尖旺区| 搜索| 富蕴县| 杭州市| 额济纳旗| 化州市| 通城县| 五华县| 淮滨县| 射阳县| 吴桥县| 肃宁县| 阿尔山市| 定陶县| 晋江市| 佳木斯市| 军事| 得荣县| 洮南市| 稻城县| 正蓝旗| 安国市| 屯留县| 扬中市| 高州市|