如何在Spring Controller </context-param>中访问web.xml的<context-param>值

时间:2013-11-20 10:46:26

标签: spring

我在我的应用程序的web.xml中定义了一个context-param,如下所示

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

现在我想在我的Controller中使用baseUrl的值,那么我如何才能访问它??

如果有人知道,请告诉我。

提前致谢!

3 个答案:

答案 0 :(得分:9)

如果您使用的是Spring 3.1+,则无需进行任何特殊操作即可获得该属性。只需使用熟悉的$ {property.name}语法。

例如,如果你有:

<context-param>
    <param-name>property.name</param-name>
    <param-value>value</param-value>
</context-param>
<{1>}或

中的

web.xml

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

然后您可以像访问它一样访问它:

context.xml

这是有效的,因为在Spring 3.1+中,部署到Servlet环境时注册的环境是StandardServletEnvironment,它将所有与servlet上下文相关的属性添加到永远存在的@Component public class SomeBean { @Value("${property.name}") private String someValue; }

答案 1 :(得分:8)

让您的Controller实现ServletContextAware接口。这将强制您实现setServletContext(ServletContext servletContext)方法,Spring将在其中注入ServletContext。然后只需将ServletContext引用复制到私有类成员。

public class MyController implements ServletContextAware {

    private ServletContext servletContext;

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

你可以通过以下方式获得param值:

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

答案 2 :(得分:4)

首先,在你的Spring应用程序“applicationContext.xml”(或你命名的任何东西:)中,添加一个属性占位符,如下所示:

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

如果您还想加载.properties文件中的某些值,可以添加“location”的可选参数。 (例如,location =“WEB-INF / my.properties”。)

要记住的重要属性是'local-override =“true”'属性,它告诉占位符如果在加载的属性文件中找不到任何内容,则使用上下文参数。

然后在构造函数和setter中,您可以使用@Value批注和SpEL(Spring Expression Language)执行以下操作:

@Component
public class AllMine{

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

        //Do stuff
    }
}

此方法具有从ServletContext中抽象出来的额外好处,并使您能够使用属性文件中的自定义值覆盖默认的context-param值。

希望有所帮助:)