【问题标题】:How to access <context-param> values of web.xml in Spring Controller如何在 Spring Controller 中访问 web.xml 的 <context-param> 值
【发布时间】:2017-08-02 22:13:56
【问题描述】:

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

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

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

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

提前致谢!

【问题讨论】:

标签: spring


【解决方案1】:

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

例如,如果您有:

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

web.xml

&lt;Parameter name="property.name" value="value" override="false"/&gt;

在Tomcat的context.xml

然后你可以像这样访问它:

@Component
public class SomeBean {

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

这是因为在 Spring 3.1+ 中,部署到 Servlet 环境时注册的环境是 StandardServletEnvironment,它将所有与 servlet 上下文相关的属性添加到一直存在的 Environment

【讨论】:

    【解决方案2】:

    让你的控制器实现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");
    

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      @Component
      public class AllMine{
      
          public AllMine(@Value("${stuff}") String stuff){
      
              //Do stuff
          }
      }
      

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

      希望对您有所帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-14
        • 1970-01-01
        • 1970-01-01
        • 2012-01-30
        • 1970-01-01
        • 2017-07-15
        • 1970-01-01
        相关资源
        最近更新 更多