2

私が探しているのは、特定のリクエストを処理する専用の Java クラスに追加できるある種のクラスまたは注釈であり、名前に基づいてこれらに URL をマップします。たとえば、URL ".../api/GetContactsRequest" を GetContactsRequest という名前のハンドラー (または、そのようなハンドラーが存在しない場合は 404) にマップします。サーブレットを作成して、各 URL を各サーブレットにマップできることはわかっていますが、定型的なルーティング コード/構成が少ないほど良いと考えています。これらは主にアプリケーション リクエスト ハンドラであり、JSON を使用して通信します。静的リクエストをどのように処理するかはわかりませんが、おそらく、それ自体をナビゲートするユーザーに大きな Web アプリケーションを送信するだけになるでしょう。

背景として、Google App Engine を使用しているので、yaml 構成とそのサーブレット API にアクセスできます。Java サーブレット API または Google App Engine 固有のフレームワークを使用してこれを行う標準的な方法はありますか? 以前は Apache などの特定の Java サーブレット フレームワークしか使用したことがありませんでした。これらはすべて、作業を開始した時点ですでに構築されていたので、この環境で何を使用すればよいか本当にわかりません。また、私はこれにまったく慣れておらず、サーブレット、サービス、フィルター、リスナー、およびハンドラーのすべてが何であるか、そして私が望む/必要とするこの単純なルーティング動作に最適なものを探すのに苦労しています。間違ったものを選んだり、自分のニーズに合ったものがわからないのではないかと心配しています。

4

1 に答える 1

5

これはJAX-RS、クラス名のマッピングではなく、注釈によるマッピングです。機能の一部を参照してください。

いくつかの実装がありますが、個人的にはRESTEasyを使用しています。GAE で問題なく動作します。さらに、Jackson (RESTEasy に付属) を使用して JSON を生成します。

HTML を作成する必要がある場合はhtmleasy、RESTEasy の上にある薄いレイヤーであり、さまざまな HTML テンプレート ライブラリを使用できるようになっていることを確認してください。ロジックをプレゼンテーションから分離するのに役立ちます。

編集:

標準ライブラリを使用して独自に何かを作成することを本当に避けたい場合は、リクエストを検査してサーブレットに転送する (またはカスタム コードを呼び出す) サーブレット フィルターを作成します。

public class ForwardFilter implements Filter {

    @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) {

        if(request.getRequestURI().equals("/some/path")){
            request.getRequestDispatcher("/path/where/servlet/registered").forward(request, response);
            return; // prevents normal request processing

        }

        // you need this for normal request path
        filterChain.doFilter(request, response);
    }
}
于 2012-04-22T18:10:29.913 に答える