2011-01-03 6 views
1

GWTでは、リクエストは "GWTコントローラ"(RemoteService)にマップされたXXXX.rpcに送信されます。呼び出されるメソッド名は、このリクエストのポストに埋め込まれます。アクセスログのGWTメソッド名をログに記録

追加のHTTPヘッダーとして、またはURLの一部としてメソッド名を送信する方法はありますか?こうすることで、アクセスログにメソッド名を記録することができます。

私はRpcRequestBuilderクラスがあることを知っていますが、ヘッダーまたはURLにメソッド名を追加する方法を拡張する方法はわかりません。

答えて

1

は私が...このリンクはあなたを助けることができると思いhttp://stuffthathappens.com/blog/2009/12/22/custom-http-headers-with-gwt-rpc/

EDIT: あなたが可能であれば、私は、あなたが異なるこの問題を解決するべきだと思います..リモートサービスメソッドを呼び出す前に

public class MyRpcRequestBuilder extends RpcRequestBuilder() { 
    String methodName; 
    public void setMethodName(String name) { 
     methodName = name; 
    } 
    @Override 
    protected RequestBuilder doFinish(RequestBuilder rb) {  
     RequestBuilder rb = super.doFinish(rb);  
     rb.setHeader("method", methodName);  
     return rb; 
    } 
}; 
+0

ありがとうございました。しかし、私が本当に知りたいのは、ヘッダーに入れるメソッド名を取得する方法です。 – Tihom

+0

よく、あなたの問題に対する一般的な解決策はありません。しかし、あなたはdoFinishメソッドのRpcRequestBuilderクラスをオーバーライドすることでそれを行うことができます。 –

+0

私のチームメイトはこれを使用して終了しましたが、doSetRequestData()メソッドを上書きしました。彼はrpcMethodNameを解析し、ヘッダーに設定しました。彼はRpc | rpceMethodName | rpcMethodNameを抽出しました。 – Tihom

5

をmethodNameのを設定する必要があります。ここに別の考えがあります。

メソッド名は実際にはすでに送信されていますが、あなたが言ったように埋められます。しかし、サーバー側でこの名前をキャッチすることができます。 RemoteServiceServletには、保護された方法onAfterRequestDeserializedがあります。これは、デコードされたデータを提供し、これらの種類のものに特有のものです。メソッド名が含まれています。単にこのメソッドを拡張し、そこにメソッド名を記録してください。こうすることで、クライアント側のコードにトリックを追加する必要がありません。

+0

メソッド名を取得したら、それを記録するためにサーバー固有のものを行う必要があります。たとえば、JBossやTomcatを使用している場合は、メソッド名をリクエストに入れることができます。 request.setAttribute( "GWT_METHOD_NAME"、methodName); 次に、AccessLogValveとパターン%GWT_METHOD_NAMEを使用してログオンします。 – mabn

関連する問題