1 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
正如你所說(shuō):Servlet是單實(shí)例的,容器中只有一個(gè)Servlet對(duì)象來(lái)處理所有的客戶(hù)端請(qǐng)求, 因此:
1.Servlet里面可以存放一些全局的或不變的數(shù)據(jù),但是不應(yīng)該存放和用戶(hù)相關(guān)的數(shù)據(jù), 否則由于多個(gè)用戶(hù)會(huì)在不同的線(xiàn)程中同時(shí)操作這些數(shù)據(jù),就會(huì)導(dǎo)致混亂。
2.mvc里面也有一個(gè)Servlet,但是這個(gè)servlet在每次請(qǐng)求的時(shí)候,會(huì)new一個(gè)Controller, 這樣在Servlet的一次請(qǐng)求處理中,數(shù)據(jù)是相互沒(méi)有干擾的。另外,一般spring管理的bean,會(huì)存放在ThreadLocal這樣的對(duì)象中,在controller處理完畢后,會(huì)清理ThreadLocal。
3.道理同上,如果單獨(dú)寫(xiě), 應(yīng)該new一個(gè)service,并且最后需要在處理完畢后清理ThreadLocal,否則會(huì)把殘留數(shù)據(jù)留給下一次數(shù)據(jù)處理, 導(dǎo)致數(shù)據(jù)不可預(yù)期。
添加回答
舉報(bào)