3

在我的应用程序中,我想在服务器之间更改某些参数(字符串)。

例如,这些参数之一是表示服务器是否为生产环境的是/否值。另一个是运行应用程序的特定机器中给定资源的文件路径。等等。

我想将这些值保存在我的 Jetty Web 服务器的目录结构中的单独配置文件(纯文本、xml、JSON 或其他简单格式)中。

有没有一种方法可以实现这一点,它允许从我的 servlet 中通过键简单地检索字符串值,而无需安装其他软件或配置复杂的 Jetty 选项?我真的很想避免只需要检索两个或三个值的并发症。

编辑:我直接使用 servlet,没有任何额外的 web 框架,没有 Spring 等。该软件是用 Scala 编码的。

JNDI 可能会做我需要的,但我想要一些更简单的设置。

我想我正在寻找类似 ServletConfig 的东西,但在服务器级别,而不是 Web 应用级别。

4

1 回答 1

3

这是一个简单的例子。

在您的 jetty-distribution 目录中,您有一个目录(通过文件中的配置/resources/默认包含在服务器级别的类加载器中)OPTIONS/start.ini

如果您创建/resources/myconfig.properties(例如)具有以下内容:

food=fruit
fruit.color=yellow
fruit.name=banana

然后你可以让一个 Servlet 在 init() 上加载它,如下所示:

public class LoadResourceServlet extends HttpServlet
{
    private Properties props;

    @Override
    public void init(ServletConfig config) throws ServletException
    {
        super.init(config);

        props = new Properties();
        URL url = this.getClass().getResource("/myconfig.properties");
        if (url != null)
        {
            try (InputStream stream = url.openStream())
            {
                props.load(stream);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        resp.setContentType("text/plain");

        try (PrintWriter writer = resp.getWriter())
        {
            writer.printf("food = %s%n",props.getProperty("food"));
            writer.printf("fruit.color = %s%n",props.getProperty("fruit.color"));
            writer.printf("fruit.name = %s%n",props.getProperty("fruit.name"));
        }
    }
}
于 2013-02-27T22:07:52.467 回答