2012-06-25 31 views
2

添加越來越多的配置servlet容器嵌入式碼頭在我的情況),我開始懷疑我是否應該把一切都變成web.xml中或保留在Java代碼中配置程序化web.xml中與編程方法

是否有理由選擇web.xml而不是編程方法,反之亦然?有沒有安全原因還是這只是美容?

對我來說,似乎web.xml更好,因爲你專門用DSL來完成這項工作,而不是將所有內容都按到代碼中。另一方面,我可以在代碼中快速查找配置。

+0

你在談論哪種配置? –

+0

其實每一個配置都可以完成,目前我只配置servlet映射和約束,比如JAAS。 – Mahoni

回答

2

這取決於你想要配置什麼和你的方便。

的Servlet 3.0允許你定義三種不同的方式的元數據:

web.xml中,通常配置將同時被部署在不同的環境變化應在此處配置。這些屬性如數據庫屬性,屬性文件,管理員用戶屬性等。

在web.xml中定義的優點是,所有配置都存在於中心位置,並且很容易進行文檔編輯等。僅在一個在分佈式開發過程中,難以維護。是的,再次Servlet 3.0允許web-fragments.xml,您應該爲其定義庫,每個庫可以有單個描述符。

註釋,任何可以在開發過程中定義但可以在部署過程中被覆蓋的定義爲註釋。

優點是不需要在部署描述符中進行配置,除非它必須被覆蓋。註釋可以給出默認值。 缺點是容器必須處理所有類的註釋。我不認爲這是很大的缺點。

以編程方式,任何你知道不會改變的東西都可以用編程方式配置好處是開發人員確信配置不會隨時被任何人改變。

0

要使用web.config應用新設置,只需更改配置文件並重新啓動應用程序。如果在代碼中保持配置,則需要重新構建項目。

+0

我也想到了。但爲什麼然後介意程序化方法呢? – Mahoni

0

在我的經驗中,可以使用web.xml中進行一些配置很少樣變(如果你使用澤西):

<servlet> 
<servlet-name>Jersey REST Service</servlet-name> 
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
<!-- Register resources and providers under com.vogella.jersey.first package. --> 
<init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>com.vogella.jersey.first</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 

(我複製這些代碼從http://www.vogella.com/tutorials/REST/article.html

如果配置會定期更改和更新,則編程配置將會很好(您可以查看Netflix Archaius)
例如:服務超時,線程池大小或metri CS追蹤等...