2

RemoteServiceServletとFilterを使用して、ユーザーのWebアプリケーションで要求されているメソッドを追跡する要求をキャッチしようとしています。

私はこれを行うことができません...

ServletFilterのようなものと呼ばれるメソッドを追跡するための最良の方法を誰かが提案できますか?

注私はユーザーと彼が要求した彼の要求を追跡するのが好きです。

4

3 に答える 3

0

「SpringMVC 」または「GoogleGuice」を使用してこれを行うことができます。このアイデアの背後にある手順は次のとおりです。

  1. 一般的なサーブレットを作成し、すべてのRPCのURLをそれにマップします。
  2. 一般的なサーブレットは、「RemoteServiceServlet」クラスを拡張する必要があります。
  3. processCallメソッドをオーバーライドして、クライアントがどのクラスのどのメソッドを呼び出したいかを確認できるようにします。

    @Override public String processCall(Stringpayload)はSerializationExceptionをスローします{

    try {
        RPCRequest rpcRequest = RPC.decodeRequest(payload);
    
        RemoteService service = getServiceInstance(rpcRequest.getMethod().getDeclaringClass());
    
        return RPC.invokeAndEncodeResponse(service, rpcRequest.getMethod(),
                rpcRequest.getParameters(), rpcRequest.getSerializationPolicy());
    
    } catch (IncompatibleRemoteServiceException ex) {
        getServletContext()
                .log("An IncompatibleRemoteServiceException was thrown while processing this call.", ex);
        return RPC.encodeResponseForFailure(null, ex);
    }
    

    }

Googleguiceを使用したこのサンプルを見ることができます。

よいひとときを。

于 2012-12-18T14:11:53.817 に答える
0

public boolean preProcess(HttpExchange exchange)次のように、RemoteServiceServletの実装をオーバーライドできます。

public boolean preProcess(HttpExchange exchange) {
    String body = null;
    RPCRequest req = null;

    // Read and parse the request
    byte[] bytes = null;
    Object bytebuf = getAttribute("RequestBody");
    if ((bytebuf != null) && (bytebuf instanceof ByteBuffer)) {
        bytes = ((ByteBuffer) bytebuf).array();
    }

    if (bytes == null) {
        setAttribute("ResponseCode", new Integer(500));
        setAttribute("ResponseBody", "Missing Request Body.");
        return true;
    }

    body = new String(bytes, "UTF-8");

    req = RPC.decodeRequest(body, this.getClass());

    String methodName = req.getMethod().toString();
    //Here you have name of a method
    //You can get parameters
    //Object[] parms = req.getParameters();
    return true;
}
于 2012-12-19T11:07:48.427 に答える
0

すべてのメソッドjava.util.logging.Loggerの先頭で使用してから、パラメーターとユーザー情報を書き込みます。情報はTomcatログに書き込まれます。

于 2012-12-18T13:27:51.160 に答える