如何在 web.xml 中外部化上下文参数值
how to externalize context-param values in web.xml
我正在尝试将一些遗留(struts2-based)Web 应用程序从 Jboss 迁移到 Open-Liberty 服务器,我想知道是否有办法将这些值外部化来自 web.xml 的上下文参数(或过滤器初始化参数),就像使用 server.xml 中的 ${} 语法或使用 eclipse microprofile 的 mpConfig 功能一样。
在原始项目中,参数值在构建时被注入 web.xml 中,使用占位符替换,但根据 12-factor 第三建议,我更愿意在软件外部设置此值,例如在环境变量中。
在我的具体情况下,我需要配置一个 servlet 过滤器和一个具有环境相关参数值的自定义标签库。
我已经尝试在 web.xml 中使用 ${} 语法,但没有成功:
...
<context-param>
<param-name>remincl.resource.provider</param-name>
<param-value>${remincl.resource.provider}</param-value>
</context-param>
...
上下文参数的运行时值为:“${remincl.resource.provider}”而不是存储在环境变量中的实际值。
我认为 JEE 规范不允许这种行为,但我想知道 open-liberty 是否提供了一些额外的功能来解决这个问题。否则我必须在构建时继续注入值(或更改过滤器和标签库的配置策略)。
实现此目的的 JavaEE 标准方法是使用 javax.servlet.ServletContextListener
.
例如:
@WebListener
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
// Get the context value from wherever is most convenient:
// System.getProperty(), System.getenv(), MP Config API, etc
String value = System.getProperty("remincl.resource.provider");
event.getServletContext().setInitParameter("remincl.resource.provider", value);
}
@Override
public void contextDestroyed(ServletContextEvent event) {}
}
我正在尝试将一些遗留(struts2-based)Web 应用程序从 Jboss 迁移到 Open-Liberty 服务器,我想知道是否有办法将这些值外部化来自 web.xml 的上下文参数(或过滤器初始化参数),就像使用 server.xml 中的 ${} 语法或使用 eclipse microprofile 的 mpConfig 功能一样。 在原始项目中,参数值在构建时被注入 web.xml 中,使用占位符替换,但根据 12-factor 第三建议,我更愿意在软件外部设置此值,例如在环境变量中。 在我的具体情况下,我需要配置一个 servlet 过滤器和一个具有环境相关参数值的自定义标签库。
我已经尝试在 web.xml 中使用 ${} 语法,但没有成功:
...
<context-param>
<param-name>remincl.resource.provider</param-name>
<param-value>${remincl.resource.provider}</param-value>
</context-param>
...
上下文参数的运行时值为:“${remincl.resource.provider}”而不是存储在环境变量中的实际值。
我认为 JEE 规范不允许这种行为,但我想知道 open-liberty 是否提供了一些额外的功能来解决这个问题。否则我必须在构建时继续注入值(或更改过滤器和标签库的配置策略)。
实现此目的的 JavaEE 标准方法是使用 javax.servlet.ServletContextListener
.
例如:
@WebListener
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
// Get the context value from wherever is most convenient:
// System.getProperty(), System.getenv(), MP Config API, etc
String value = System.getProperty("remincl.resource.provider");
event.getServletContext().setInitParameter("remincl.resource.provider", value);
}
@Override
public void contextDestroyed(ServletContextEvent event) {}
}