Jetty用户定义配置

时间:2013-02-27 21:24:01

标签: java servlets jetty

在我的应用程序中,我有一些参数(字符串),我想从服务器更改为服务器。

例如,其中一个参数是yes / no值,用于指示服务器是否为生产环境。另一个是运行应用程序的特定计算机中给定资源的文件路径。等

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

有没有办法实现这一点,允许通过密钥从我的servlet中简单地检索String值,而无需安装其他软件,或配置复杂的Jetty选项?我真的想避免因我需要检索的两个或三个值而出现并发症。

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

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

我想我正在寻找像ServletConfig这样的东西,但是在服务器级别,而不是web-app级别。

1 个答案:

答案 0 :(得分: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"));
        }
    }
}