2

サーブレットコンテナ(私の場合はEmbedded Jetty )にますます多くの構成を追加する私は、すべてをweb.xmlに入れるべきか、それともJavaコードで構成をプログラム的に維持するべきか疑問に思い始めています。

プログラムによるアプローチよりもweb.xmlを選択する理由はありますか?その逆もありますか?セキュリティ上の理由がありますか、それともこれは単なる表面的なものですか?

私には、すべてをコードにプッシュするのではなく、DSLを専用にしてジョブを実行するため、web.xmlの方が優れているように思われます。反対側では、コード内にいるときに構成をすばやく検索できます。

4

3 に答える 3

2

設定する内容と利便性によって異なります。

サーブレット3.0では、次の3つの方法でメタデータを定義できます。

web.xml、通常、さまざまな環境にデプロイされている間に変更される構成は、ここで構成する必要があります。これらのプロパティには、データベースプロパティ、プロパティファイル、管理者ユーザープロパティなどがあります。

web.xmlで定義することの利点は、すべての構成が中央の場所に存在し、文書化などが容易です。1つの場所でのみ定義されるため、分散開発中の保守が困難です。はい、繰り返しますが、サーブレット3.0では、ライブラリを定義する必要があるweb-fragments.xmlが許可されます。この場合も、ライブラリごとに1つの記述子を使用できます。

アノテーション、開発中に定義できるが、デプロイ中にオーバーライドできるものはすべてアノテーションとして定義されます。

利点は、オーバーライドする必要がない限り、デプロイメント記述子で構成する必要がないことです。注釈はデ​​フォルト値を与えることができます。欠点は、コンテナがアノテーションのすべてのクラスを処理する必要があることです。これは大きなデメリットではないと思います。

プログラム的に、変更されないことがわかっているものはすべてプログラムで構成できます。利点は、開発者が構成が誰によっても変更されないことを確信していることです。

于 2012-06-25T17:43:45.297 に答える
0

web.configを使用して新しい設定を適用するには、構成ファイルを変更してアプリケーションを再起動するだけです。コードで構成を保持する場合は、プロジェクトを再構築する必要があります。

于 2012-06-25T17:03:32.607 に答える
0

私の経験では、次のようにめったに変更されない構成にweb.xmlを使用できます(Jerseyを使用している場合)。

<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
 <!-- Register resources and providers under com.vogella.jersey.first package. -->
<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.vogella.jersey.first</param-value>
</init-param>
<load-on-startup>1</load-on-startup>

(これらのコードをhttp://www.vogella.com/tutorials/REST/article.htmlからコピーします)

構成が定期的に変更および更新される場合は、プログラムによる構成が適しています(Netflix Archaiusを確認できます)
。例:サービスのタイムアウト、スレッドプールのサイズ、メトリックの追跡など。

于 2016-05-17T08:42:08.823 に答える