2013-09-30 84 views
-3

我是Java新手,開始對它進行一點探索。 我知道這是個愚蠢的問題,但我沒有在網上找到任何支持博客或文章,這將澄清我的疑問。JSP中對象的範圍

我想知道Java對象的範圍。 考慮一個場景:假設我正在瀏覽器中訪問一個頁面,說「索引」,它使用對象X的一些值它,如果我刷新頁面,我可以得到對象X的以前的值?

如果是,它是如何保留的?因爲它們在一起有不同的要求,它是如何認識到它是相同的要求?

由於提前

+2

這是關於** Java **或** JavaScript **的問題嗎?也請添加代碼,即使是基本的 - 某些代碼行可以解釋比數千個單詞更好的內容... – ppeterka

+1

您正在談論JSP頁面(scriptlets)中使用的Java對象嗎? –

+1

可能通過cookies或URL重寫 – upog

回答

2

我強烈建議您閱讀Object範圍的官方文檔。

有四個可能的範圍:

scope="page"--目的是隻能從創建它的JSP頁面內訪問。

scope="request"--該對象可以從任何JSP頁面訪問,該頁面服務於創建該對象的JSP頁面提供服務的相同HTTP請求。

scope="session"--可以從任何共享與創建該對象的JSP頁面相同的HTTP會話的JSP頁面訪問該對象。

scope="application"--可以從創建該對象的JSP頁面的相同Web應用程序(在任何單個Java虛擬機內)中使用的任何JSP頁面訪問此對象。

Here is the official docs link

1

這個問題更多地與服務器端保持我認爲,當你說:「如果我刷新頁面」。如果一個servlet存儲了頁面上顯示的值,那麼是的,它仍然會在頁面上顯示它。

如果問題是基於java小程序,並且該值沒有被保存,只是輸入到文本框然後否,它不會仍然存在。

如果你想了解對象範圍,你可以考慮用一個例子來重新描述你的問題。大多數帶有瀏覽器的Web場景可能會使用像Spring這樣的框架,它比對象範圍稍微複雜一些。

如果您想了解更多關於web範圍的信息,可以考慮在servlet生命週期中查看this oracle page

0

您可以存儲並使用它們保存爲屬性在一個會話(HttpSession對象)檢索對象:

public void setAttribute(java.lang.String name, java.lang.Object value) 
public java.lang.Object getAttribute(java.lang.String name) 

例如,我可以節省用戶的得分在多-page測驗:

session.setAttribute("score", (Integer) value); 
score = ((Integer) (session.getAttribute("score"))).intValue(); 

這對遍歷/刷新頁面是持久的。即使它不是同一個請求,它也是同一個會話。