2008-11-08 68 views
0

我在web應用程序啓動階段(contextInitialized())讀取了一個屬性文件,我開始考慮如何使這些設置對servlet可見。我是否需要依次通過按鍵和每一個增加的背景下,這樣的Java - 設置上下文屬性(ServletContextListener)

Iterator i = settings.keySet().iterator(); 
while (i.hasNext()) { 
    key = (String) i.next(); 
    value = (String) settings.get(key); 
    context.setAttribute(key, value); 
} 

或有更好的方法呢?

謝謝!

/亞當

回答

1

你有沒有考慮在web.xml中定義的設置的可能性?

而且,如果那是不可能的,使用泛型如果可能的話:

String key = null; 
Iterator<String> i = settings.keySet().iterator(); 
while (i.hasNext()) 
context.setAttribute(key = i.next(), settings.get(key)); 
+0

我想過它,但決定將配置存儲在一個單獨的文件中。我不知道,但我認爲這樣更方便。 – 2008-11-08 19:46:06

0

有關使用JNDI上下文是什麼。 JNDI是將屬性傳遞給webapp的更常見的方式。

任何屬性都可以在META-INF/context.xml中爲tomcat或任何應用程序特定的設置指定。

5

爲什麼不將整個內容存儲在servlet上下文中?

context.setAttribute("mySettings", settings); 

的setAttribute的簽名是:

public void setAttribute(String name, Object object) 
0

這件事情,我已經考慮,設定整個屬性對象爲上下文屬性。

如果我不走這條路線,是否有任何指導如何命名這些屬性,或者你覺得「application.settings」或「myBlog.settings」? 組密鑰?這會是好的:

application.module1.color=black 
application.module1.font=arial 

我覺得,在某種程度上,它可以成爲保持這樣在屬性鍵在整個碼擴展的應用程序的負擔?如果另一位開發人員在屬性文件中重命名屬性,我們只會在運行應用程序(如果/當/引用舊密鑰)時才知道。對?

我將不得不查找JNDI。

1

我一直有想法玩弄:

在上下文初始化方法,我打算只創建一個用於設置全局對象。很像工具包建議。但不是爲每個鍵/屬性/設置設置上下文屬性,添加設置容器/包裝器對象會是一個可怕的想法嗎?我在想這個類將負責保存(靜態)類模塊設置。這樣我可以打字,像這樣

//ExampleServlet.java 
Settings settings = (Settings)context.getAttribute("application.settings"); 

String color = settings.getModule1().getColor(); 
String font = settings.getModule1().getFont(); 

int blogs = settings.getModule2().getActiveBlogCount(); 

引用整個代碼,我必須記住只有一個屬性鍵,一個爲整個設置容器。減少可能導致朗姆輪胎異常的錯字風險! 它也可以很容易地重命名屬性。

您認爲如何?

/Adam