java - 如何从 servlet 中可移植地读取配置数据

标签 java servlets properties servletconfig

我正在编写一个 Java servlet,它需要读取一些特定于站点的内容 配置数据;我希望它易于访问/修改 由系统管理员在部署时。没有合理的默认值, 因此数据必须由站点管理员提供。
它由一些字符串键/值对组成(想想属性)。 它只会被读取一次(在初始化时)。

我知道 this SO questionServletContext.getInitParameter() 机制,但就 我的理解是,他们要求将数据捆绑在 servlet 包(作为属性文件,或在 web.xml),不方便升级servlet代码。

servlet 是否有任何“标准”接口(interface)来获得这种 键/值配置数据?要是能编程就好了 界面到处都是一样的,但是实际的设置方式 配置数据取决于实际使用的 servlet 容器。

我更喜欢可移植解决方案,但我会满足于 仅适用于 Tomcat 和 Jetty 的功能。

最佳答案

为 Web 应用程序配置应用程序服务器的推荐方法是根据 JNDI。

每个应用程序服务器(包括 Jetty 和 Tomcat)都允许您配置 JNDI 参数。

对于 Jetty,您可以将以下内容添加到您的 jetty.xml 中以添加 JNDI 参数 param.file:

<!--  JNDI java:comp/env --> 
<New id="param.file" class="org.mortbay.jetty.plus.naming.EnvEntry">
  <Arg>param.file</Arg> 
  <Arg type="java.lang.String"><SystemProperty name="jetty.home" default="."/>etc/config.properties</Arg> 
  <Arg type="boolean">true</Arg> 
</New> 

然后在您的 servlet 中您可以读取 JNDI 参数:

import javax.naming.InitialContext;
import javax.naming.NamingException;

...

public Object readJndi(String paramName) {
  Object jndiValue = null;
  try {
    final InitialContext ic = new InitialContext();
    jndiValue = ic.lookup("java:comp/env/" + paramName);
  } catch (NamingException e) {
    // handle exception
  }
  return jndiValue;
}


public String getConfigPath() {
  return (String) readJndi("param.file");
}

其他应用服务器设置 JNDI 值的方式不同,但读取配置的代码始终相同。

关于java - 如何从 servlet 中可移植地读取配置数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3804396/

相关文章:

Java servlet doPost 方法不起作用

java - 将表 html 行值读取到 servlet 到另一个 jsp 页面以进行编辑

javascript - 我什么时候应该初始化 javascript 属性?

java - 使用命令行 --tags @my-tag 从 jar 运行 cucumber 测试执行

java - 在java中借助多边形绘制三角形

java - 如何让JButton事件修改JFrame(this)

Servlet 中的 JSF 托管 Bean

JavaScript 正则表达式到 Java 正则表达式

css - 右侧和底部 CSS 属性不起作用

java - 在重写的父类(super class)方法中访问子类属性。可能的?