2012-06-18 31 views
14

我的公司正在重做我們的網站,從ColdFusion網站轉到使用Java編寫的網站。我只是在學習Java,我很好奇如何在Java Web應用程序中設置應用程序範圍變量。 ColdFusion具有application.cfm文件,該文件包含應用程序內所有ColdFusion頁面/組件都可訪問的變量。 Java顯然沒有與該文件直接等價的東西,所以我想知道如何在Java中重新創建類似的東西。我希望有一箇中心位置,即web應用程序中的所有jsp頁面,servlet,類等都可以訪問。在java中使用應用程序範圍變量

那麼做這樣的事情最好的方法是什麼?

有沒有人有類似的事情的例子嗎?

應用程序範圍變量應放在類中嗎?一個XML文件?一個jsp頁面?別的東西?

在java webapp中擁有應用程序範圍變量a是否可行?

例如: 這將是一個保存圖像文件夾路徑的地方,因此在單獨的JSP頁面或類或任何需要訪問該圖像文件夾的內容中,您可以引用該路徑的應用程序作用域變量把它寫在每個地方。然後,如果由於某種原因我們需要移動該圖像文件夾的位置,我們只需在一個位置更改路徑變量,而不必更新引用該圖像文件夾的20個位置。

在我的在線研究中,我很難找到關於此類事物的任何信息,這就是爲什麼我在這裏詢問它的原因。我知道要求解釋這種類型的東西有很多,但我想我會問,看看我能得到什麼類型的答覆。

感謝您提供有關此主題的任何幫助。

回答

23

等效可能是ServletContext

在你的控制器servlet:

ServletContext context = request.getSession().getServletContext(); 

就像在會話對象可以存儲屬性在servlet上下文以及

context.setAttribute("someValue", "aValue"); 

Object attribute = context.getAttribute("someValue"); 

如果你從Java開始,你有一個非平凡的應用程序來建立,我會建議使用一個流行的框架,如SpringStruts

+0

謝謝。在servlet上下文中設置屬性時,會話超時時是否過期?到目前爲止,我發現我可以在我的web.xml文件中設置標籤並通過servlet上下文訪問這些標籤,但我懷疑使用setAttribute方法實際上會更改web.xml文件,特別是在運行時。那麼,在servlet上下文中設置一個屬性會有什麼意義呢?它與設置會話屬性有什麼不同嗎?我只是好奇。 – kei23th

+3

您可以將ServletContext看作是所有Servlet,JSP等共享的全局空間。另一方面,HttpSession是每個用戶特有的。 ServletContext可以由web.xml初始化,但J2EE應用程序永遠不會寫入到web.xml。它通常作爲只讀存儲。最佳實踐是使用像Spring ['ApplicationContext'](http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/context/ApplicationContext.html)這樣的框架來定義「應用程序範圍」值。 )並且不污染web.xml。我建議閱讀一些[教程](http://www.springsource.org/tutorials)文檔 – Brad