2017-02-27 16 views
-1

私は支払いゲートウェイからの返信URLを持つ変数を1つ持っています。リスナーのHttpServletRequestオブジェクトへのアクセス

private static String response_url = "http://1.1.1.1:8001/abc/xyz.html"; 
// private static String response_url = "http://www.something.com/xyz.html"; 

最初の変数はローカルサーバー用であり、2番目の変数は本番環境のものです。環境に応じてコメントを付けてコメントを外し、コメントを解除してコメントを外します。

<action name="viewResponseFile" class="controller.RAction" method="viewResponseFile"> 
    <result name="success">somepage.jsp</result> 
</action> 

コントローラは、xyz.html上にマッピングされ、それはpayment gatewayからの戻りURLです。今私は一般的にしたいです。

私は、その変数を既存のListenerクラスに設定することを計画しています。

<listener> 
    <listener-class>in.com.Initializer</listener-class> 
</listener> 

私はRequestURIを取得するためにServletRequestAwareを使用してHttpServletRequestを作成しようとしましたが、まったく成功していません。

public class Initializer implements ServletContextListener 
{ 
    ServletContext context; 


    public Initializer() 
    { 

    } 

    public void contextInitialized(ServletContextEvent contextEvent) 
    { 
     // set-up code 
    } 

    public void contextDestroyed(ServletContextEvent contextEvent) 
    { 

    } 

} 

どのようにこれらの要件を達成できますか?

答えて

1

明らかにコメントとコメントを外してくださいは実行可能な方法ではありません、それは仕事を伴い、重大な間違いを引き起こす可能性があります。

などですが、ビルドプロセス中に.propertiesファイルなどからも提供することは、自動化されていてもビルドが異なる環境で異なるため、不適切であると考える必要があります。 dev.propertiesにプロパティを追加し、prod.propertiesに追加することを忘れた場合はどうなりますか?ファイルが別の文字エンコーディングを使用するエディタで別のユーザによって変更された場合はどうなりますか?

ベストは、これらのパラメータを外部にすることです。

Webアプリケーションは、それらを組み込むべきではありません、それは代わりに、環境にそれらを求める必要があります。構成テーブルをデータベースに、など環境変数のセットを...

この道をWARは常にと同じで、異なるサーバーによって異なる値が提供されます(システム管理者が適切な変数を適切な場所に書き込むまでは正常ですが)。

したがって、ある環境でのみ発生するエラーはコードの問題にはなりません。

+0

環境変数のアプローチの場合、N個のサーバーに環境を設定する必要があります。 DBアプローチの場合、単一URL用テーブルを作成することは実現不可能です。 Listenerクラスの 'localhost:8080 \ project_name \'(動的ホスト名)を選択する方法はありませんか? – piechuckerr

+0

通常、Webアプリケーションには、dev環境とprod環境の設定が異なり、環境間でも同じですが、将来変更される可能性があります。そのため、テーブルやenv変数でパラメータ化されています。ところで、単一URLの場合、相対リクエストのヘッダから* referer *を読み取ることはできませんか? –

関連する問題