3

私のアプリケーションには、サーバーごとに変更したい特定のパラメーター (文字列) があります。

たとえば、これらのパラメーターの 1 つは、サーバーが実稼働環境かどうかを示す yes/no 値です。もう 1 つは、アプリケーションが実行されている特定のマシン内の特定のリソースのファイル パスです。等。

これらの値を別の構成ファイル (プレーン テキスト、xml、JSON、または別の単純な形式) で、Jetty Web サーバーのディレクトリ構造に保持したいと考えています。

追加のソフトウェアをインストールしたり、複雑な Jetty オプションを構成したりせずに、サーブレット内からキーで文字列値を簡単に取得できるようにする方法はありますか? 取得する必要がある値が 2 つまたは 3 つしかない場合は、複雑さを避けたいと思います。

編集:追加の 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

次に、サーブレットに 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 に答える