2013-11-20 59 views
8

我在我的應用程序的web.xml中定義的context-param如下如何訪問<的context-param>春季控制器web.xml中的價值

<context-param> 
    <param-name>baseUrl</param-name> 
    <param-value>http://www.abc.com/</param-value> 
</context-param> 

現在我想使用的值baseUrl在我的控制器中,所以我如何訪問這個.....?

請告訴我,如果有人知道這件事。

在此先感謝!

+0

http:// stackoverflow。com/questions/2175502/spring-application-context-access-web-xml-context-params – Mark

回答

7

使您的控制器實現ServletContextAware接口。這將迫使你實現一個setServletContext(ServletContext servletContext)方法,Spring將在其中注入ServletContext。然後,將ServletContext引用複製到私有類成員。

public class MyController implements ServletContextAware { 

    private ServletContext servletContext; 

    @Override 
    setServletContext(ServletContext servletContext) { 
     this.servletContext = servletContext; 
    } 
} 

你可以得到帕拉姆值有:

String urlValue = servletContext.getInitParameter("baseUrl"); 
+0

嘿Kecko ......它的工作.....謝謝! – Naveen

4

首先,在你的Spring應用程序「的applicationContext.xml」(或任何你把它命名爲:),添加屬性的佔位符是這樣的:

<context:property-placeholder local-override="true" ignore-resource-not-found="true"/> 

如果您還想加載在.properties文件中找到的某些值,則可以添加「位置」的可選參數。 (例如,location =「WEB-INF/my.properties」)。

要記住的重要屬性是'local-override =「true」'屬性,它告訴佔位符如果在加載的屬性文件中找不到任何內容,則使用上下文參數。

然後在你的構造函數和setter方法,你可以做到以下幾點,使用@Value註釋和規劃環境地政司(春季表達式語言):

@Component 
public class AllMine{ 

    public AllMine(@Value("${stuff}") String stuff){ 

     //Do stuff 
    } 
} 

這種方法有從ServletContext抽象掉的額外優惠,使您可以使用屬性文件中的自定義值覆蓋默認上下文參數值。

希望幫助:)

+0

@MathiasGys感謝您的編輯:) – Pytry

9

如果您在使用Spring 3.1+,你沒有做什麼特別獲得的財產。只需使用熟悉的$ {property.name}語法即可。

例如,如果您有:

<context-param> 
    <param-name>property.name</param-name> 
    <param-value>value</param-value> 
</context-param> 
web.xml

<Parameter name="property.name" value="value" override="false"/>

Tomcat的context.xml

那麼你就可以訪問它想:

@Component 
public class SomeBean { 

    @Value("${property.name}") 
    private String someValue; 
} 

這是有效的,因爲在Spring 3.1+中,部署到Servlet環境時註冊的環境是StandardServletEnvironment,它將所有與servlet上下文有關的屬性添加到以前的Environment