1

私は netty を使用しており、いくつかの API 用に単純な HTTP サーバーを実装しようとしています。着信リクエストがある間、url = /foo/bar/other/ のパスを取得できます。次へのパスをどのようにマッピングできますか?

class = foo 
method = bar 
param = other

正規表現を使用できますか? または、より良い解決策はありますか?


ええ、URL パスを分割してクエリ文字列パラメーターを取得する方法を知っています。httpヘッダー、ipなどからすべてのパラメーターを取得します...問題ありません。問題は、これらのパスをクラスとメソッドにどのようにマップするかです。必要なクラスとメソッドを持ってくることができるように。

簡単な実装(疑似コードのみ):

public class Mapper {
    private String htttpMethod;
    private String controllerName;
    private String methodName;
}

ArrayList<Mapper> m = new ArrayList<Mapper>();
m.add(new Mapper("GET","HomeController","index"));

したがって、/Home/index/1/ は HomeController.index(1); を上げなければなりません。

見つけたいパターンごとに、新しい正規表現が必要ですか? すべてをチェックします。if / else ブロックが多すぎます...

それについて何か解決策はありますか?

しかし、この質問のためにドックを読んでください。歌詞の意味: 私の英語のために泣く

4

1 に答える 1

0

Netty Snoopの例を見ると役に立ちます。

public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
    HttpRequest request = this.request = (HttpRequest) e.getMessage();

    // Get your path
    String uri = request.getUri();
    String[] segments = uri.split("/");
    String className = segments[0];
    String methodName = segments[1];

    // Get your query string parameters
    QueryStringDecoder queryStringDecoder = new QueryStringDecoder(request.getUri());

}

お役に立てれば。

于 2012-05-04T00:03:27.677 に答える