2012-04-22 1 views
2

私が探しているのは、特定のリクエストを扱うことに専念しているJavaクラスに追加できるクラスや注釈の名前です。たとえば、URL ".../api/GetContactsRequest"をGetContactsRequestという名前のハンドラにマップします(ハンドラが存在しない場合は404)。私はサーブレットを書くことができ、それぞれのサーブレットに各URLをマップすることができることを知っていますが、より定型的なルーティングコード/設定、これらは主にJSONを使用して通信するアプリケーション要求ハンドラです。私は静的なリクエストをどのように処理するのかを理解していませんが、ユーザー自身がナビゲートする大きなWebアプリケーションを送信する可能性が最も高いです。名前に基づいてURLをJavaサーブレットハンドラに動的にマッピングする方法はありますか? (Google App Engine)

私はyaml設定とサーブレットAPIにアクセスできるように、バックグラウンドではGoogle App Engineを使用しています。したがって、JavaサーブレットAPIまたはGoogle App Engine固有のフレームワークのいずれかを使用してこれを行う標準的な方法がありますか?以前はApacheなどの特定のJavaサーブレットフレームワークを使用していましたが、これまで作業を開始した時点では既に構築されていたため、この環境で使用するものが実際にはわかりません。私はこれも新しく、サーブレット、サービス、フィルター、リスナー、ハンドラーのすべてが何であるかを問わず、問題を抱えています。私は間違ったものを選ぶか、自分のニーズに合ったものを知りません。

答えて

5

これは、JAX-RSが実行するもので、正確にはクラス名のマッピングではなく、アノテーションによるマッピングです。 some of the featuresを参照してください。

いくつかの実装がありますが、私はRESTEasyを個人的に使用しています。これはGAEで完璧に動作します。さらに、JSONを作成するためにJackson(RESTEasyに付属)を使用します。

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

EDIT:あなたは本当に標準LIBSを使用し、自分で何かを書き込まないようにしたい場合は

、その要求を検査し、サーブレットに転送サーブレットフィルタを作成する(またはカスタムコードを呼び出します):

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); 
    } 
} 
+0

JavaまたはGAEのように実際に組み込まれている方法はありませんか?私が追加して理解しなければならない第三者コードが少なくて済むほど、より良いことです!特にライブラリを追加することは、通常、より多くの定型文を意味します。 – Jomasi

+0

成功したコーダーの公理の1つは、「巨人の肩に立つ」ことです。これは、他のスマートな人々が作った再利用コードを意味します。実際には、他の人が既に問題を十分に解決しているコードを書くことは、プログラミング(車輪の改革)の大きなミスとみなされます。特にJAX-RSがJava標準であり、オープンソースであり、評判の良い人/企業がサポートしている標準ベースのライブラリであれば、サードパーティ製のライブラリを使用することは避けてください。 –

+0

私はそれを理解していますが、同時に、私は不必要なものを追加しないようにしたいと思っています。つまり、私が望んでいたものがすでに標準のJavaやGAEに存在していたならば。私はそれをもう少し見て、それが標準ライブラリと見なされればそれについてもっと気楽に感じます。ありがとう! :) – Jomasi

関連する問題