我在我的应用程序的web.xml中定义了一个context-param,如下所示
<context-param>
<param-name>baseUrl</param-name>
<param-value>http://www.abc.com/</param-value>
</context-param>
现在我想在我的Controller中使用baseUrl的值,那么我如何才能访问它??
如果有人知道,请告诉我。
提前致谢!
答案 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值。
希望有所帮助:)