当前位置: 首页 > 知识库问答 >
问题:

如何外部化web.xml中的context-param值

丌官嘉勋
2023-03-14

我正在尝试将一些遗留的(基于Struts2)web应用程序从Jboss迁移到Open-Liberty服务器,我想知道是否有一种方法可以从web.xml外部化上下文参数(或过滤器init-params)的值,就像在server.xml中使用${}语法或使用eclipse Microprofile的mpConfig特性一样。在最初的项目中,param值是在构建时使用占位符替换注入web.xml中的,但是根据12因子第3条建议,我更愿意在软件外部(例如环境变量)设置这个值。在我的具体案例中,我需要配置一个servlet过滤器和一个带有环境相关参数值的自定义标记库。

...
  <context-param>
    <param-name>remincl.resource.provider</param-name>
    <param-value>${remincl.resource.provider}</param-value>
  </context-param>
...

context-param的运行时值是:“${remincl.resource.provider}”,而不是存储在环境变量中的实际值。

我认为JEE规范不允许这种行为,但我想知道open-liberty是否提供了一些额外的功能来解决这个问题。否则,我必须在构建时不断注入值(或者更改filter和taglib的配置策略)。

共有1个答案

秦禄
2023-03-14

实现这一点的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) {}

}
 类似资料:
  • 我正在开发一个由几个包组成的OSGi程序,我有时在本地windows dev计算机上运行,有时在经典的Linux上运行。目前,几个专用于资源连接的bundle都有自己的配置文件(属性文件),其中包含一些信息,比如访问一些重要文件的路径(在两个环境中都有)。 但是,由于两个执行环境中的路径不同,我必须在编译之前手动更改配置,这取决于我要在哪个环境中运行我的程序。

  • 问题内容: 我有一个servlet,它读取init()上的.properties文件。如果我在web.xml中设置了上下文参数,则我的代码(下面的代码)不起作用,但是我读到上下文参数是全局可访问的,我不希望这样,因为此Servlet只是更大的一部分Web应用程序。我只是想能够使用我尝试过的init- param标签来做到这一点: 但我一直在获取文件未找到异常。我已经搜索了Internet,但是大多

  • 问题内容: 我正在创建一个需要加载配置信息的servlet。我需要的部分配置信息是字符串列表(特别是主机名和/或URL列表)。 我希望将此信息存储在servlet的web.xml文件中(因此,我不必编写自己的解析器)作为context-param或init- param。单个参数名称实际上是多个参数值。 我想要的示例: 我的初步研究似乎表明这是不可能的-任何param-name(在context-

  • 我想外部化的选项,有一个可重用的类或注释,我可以扔在排除任何数据库/Hibernate初始化。 因此,与其写: 我想创建一个注释,我可以应用到我的主类: 然后通过注释启用此功能: 问题:注释方法不起作用,Spring仍然尝试加载数据库。为什么啊? 我的最终目标是拥有多个配置文件,其中只有一个加载数据库。

  • SpringApplication将从以下位置的application.properties文件中加载属性,并将它们添加到Spring环境中: 列表按优先级排序(列表中较高位置定义的属性会覆盖较低位置定义的属性)。 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config

  • 问题内容: 我想将一些hibernate配置放在属性文件中,以使其无需构建和部署就可编辑。 我尝试按照不带persistence.xml配置文件的Create JPAEntityManager中的说明解决问题 app.properties: persistence.xml 在初始化代码中,应用程序执行以下序列(查找属性), 但失败并显示错误消息: 有人知道我的配置可能出什么问题吗? 版本:JBos