首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Spring Controller中访问web.xml的<context-param>值

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

Stack Overflow用户
提问于 2013-11-20 18:46:26
回答 3查看 19.8K关注 0票数 10

我在应用程序的web.xml中定义了一个上下文参数,如下所示

代码语言:javascript
复制
<context-param>
    <param-name>baseUrl</param-name>
    <param-value>http://www.abc.com/</param-value>
</context-param>

现在我想在我的控制器中使用baseUrl的值,那么我如何才能访问这个.....?

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

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2014-10-06 22:58:33

如果你使用的是Spring 3.1+,你不需要做任何特殊的事情来获得这个属性。只需使用熟悉的${property.name}语法即可。

例如,如果您有:

代码语言:javascript
复制
<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

然后,您可以像这样访问它:

代码语言:javascript
复制
@Component
public class SomeBean {

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

这之所以有效,是因为在Servlet中,在部署到3.1+环境时注册的环境是将所有servlet上下文相关属性添加到始终存在的EnvironmentStandardServletEnvironment

票数 11
EN

Stack Overflow用户

发布于 2013-11-20 18:53:27

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

代码语言:javascript
复制
public class MyController implements ServletContextAware {

    private ServletContext servletContext;

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

您可以使用以下命令获取param-value:

代码语言:javascript
复制
String urlValue = servletContext.getInitParameter("baseUrl");
票数 8
EN

Stack Overflow用户

发布于 2014-01-17 08:43:30

首先,在您的Spring应用程序"applicationContext.xml“(或者您给它命名的其他名称:)中,添加一个属性占位符,如下所示:

代码语言:javascript
复制
<context:property-placeholder local-override="true" ignore-resource-not-found="true"/>

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

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

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

代码语言:javascript
复制
@Component
public class AllMine{

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

        //Do stuff
    }
}

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

希望这能有所帮助:)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20093759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档