簡體   English   中英

Java類使用靜態String變量

[英]Java Class using a static String variable

我在這里有點困惑,構建一個帶有標簽頁的Web應用程序。 在選項卡工作表類中,我使用數據成員-靜態String變量來存儲用戶選擇的選項卡。 我這樣做是為了在用戶返回標簽頁時顯示用戶最后選擇的標簽。 我得到了令人滿意的結果。 但是,如果我注銷並登錄(在瀏覽器上刪除緩存后),則選項卡表仍在選擇用戶最后一次選擇的選項卡,而不是默認選項卡。 該標簽頁正在由另一個組件初始化。 我不明白的是,課堂定義是否沒有垃圾收集? 為什么要選擇舊數據? 如何解決這個問題?

您似乎假設將變量設為靜態與將其隔離到用戶會話相對應。 沒有。

如果您需要任何類型的會話處理,則實際上必須有一個session (您需要考慮在服務器重啟,多個服務器等情況下會發生什么。)

當您有一個靜態變量時,這就是該類加載器中該類的一個變量。 它沒有任何與用戶。 如果所有用戶使用相同的服務器,他們將看到相同的變量。

您沒有告訴我們有關構建Web應用程序所使用的技術的任何信息,但是基本上,您應該研究服務器端用戶會話方面為您提供的技術-或使用隱藏字段或類似內容傳播信息,因此服務器根本不需要跟蹤它。

靜態成員是按類存儲的,而不是按對象存儲的,因此靜態成員的值在所有類實例(對象)中都是相同的,並且在實例超出范圍時不會“重置”。 以這種方式使用靜態成員是一個壞主意,因為應用程序的所有用戶都將看到相同的值,並且如果其中一個導致其更改,則更改后的值將對所有人可見(即,如果用戶1更改了選項卡,所有其他用戶的標簽也會更改)。

僅僅因為您清除了瀏覽器緩存,它才不會影響存儲您的靜態變量的服務器上的對象。 如果用戶注銷(或選擇登錄),則需要明確地重新設置它

如果值不斷變化,這不是靜態的。 我認為您應該考慮使用其他機制來存儲這些類型的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM