12

はい、知っています。最高の Web フレームワークについての古い質問ですが、説明させてください。

RESTful な対話を可能にし、Web GUI の構築にも適した Java Servlet ベースの Web フレームワークを探しています。

私が欲しいもの:

  • http コンテンツ ネゴシエーションと適切な URL マッピングによる REST サポート
  • リクエスト パラメータからドメイン オブジェクトへのデータ変換 (理想的には逆方向も)
  • Webへのインターフェースとしてドメインオブジェクトを複製する必要はありません(ストラットのように)
  • 簡単な EJB 統合
  • 依存性注入は Java EE サーバーで実行する必要があります
  • わかりやすいコード (Spring MVC のクラスパス内のコンポーネントのマジック ワイヤリングは好きではありません)
  • 構成が簡単 (Spring で魔法のように構成されていないものは、コンテナーで構成するのが面倒です。直接の依存関係を好む場合もあります)
  • たとえば、JPA や BeanValidation などを使用し、フレームワークによって再発明しないようにするか、少なくともこれらの標準を使いやすくする必要があります。
  • フォームのエラー表示による検証サポート
  • 国際化のサポート

候補者:

  • Spring MVCは強力ですが、Spring の構成にうんざりしていて、プログラミング モデルが好きではありません。これは少し抽象的で柔軟すぎるため、多くの構成が必要になると思います。そして、Spring MVC がアノテーションを使用する方法が好きではありません。しかし、出力パラメータを介して値を返すメソッドなど、いくつかの設計上の欠陥もありreturnます - 本当に醜いです! Spring MVC は Spring DI に大きく依存しているため、Java EE 依存性注入で Spring MVC を使用するのは簡単ではないと思います。

  • Rooはクールに思えますが、Spring MVC アプリを作成する別の方法にすぎず、AOP でいくつか奇妙なことを行います。

  • Strutsはやや扱いにくく、時代遅れです。

  • Stripes ActionBean のアプローチは、Struts より優れているようには見えません。私はそれが気に入りません。

  • Grailsは素晴らしいですが、バグがあります (少なくとも 1.2 より前)。車輪の再発明: たとえば、Gorm よりも JPA を好みます。

10 の最高の Java Web フレームワークも参照してください。

Wicket、Tapestry、JSF など、サーバー上で UI 状態を持つフレームワークを探しているわけではありません。このアプローチは、Web の基本原則に反していると思います。

じゃあ何をすればいいの?フレームワークをゼロから作成しますか? ふーむ ...

古典的なブラウザ GUI をサポートする JAX-RS のようなものが欲しいです。たとえば、フレームワークは検証をサポートし、検証エラーを再表示されたフォームに入れる必要があります。そのようなものはありますか?推奨事項はありますか?

4

5 に答える 5

7

過去に、統合 Web フレームワークとして JAX-RS を使用することについてブログを書いたことがあります。必要なことはほとんど JAX-RS で行うことができます。主な欠点は、Spring MVC、Stripes、Grails、Seam などのように、すべての部分が 1 か所に十分に文書化されていない可能性があることです。

ビューの場合、 JerseyでJAX-RS を使用するのは非常に簡単で、JSON/XML などの RESTful サービスに加えて、HTML で Web UI をサポートします。JAXRS の洗練されたコンテンツ ネゴシエーションを再利用できるため、HTTP コンテンツ受け入れヘッダーを使用して、HTML または XML が返されるかどうかなどを決定できます (さらに、サーバー側で HTML を重み付けして、奇妙な受け入れヘッダーを提供する一部の Web ブラウザーに XML を提供しないようにすることができます。 HTML より XML を好むあなたの Safari を見てください!)。たとえば、リソース Bean に @ImplicitProduces("text/html;qs=5") を追加すると、他のどの表現よりも HTML の重みが高くなります。コンテンツ ネゴシエーションをオーバーライドするために、URI 接尾辞 (.html、.xml、または .json の追加など) を構成することもできます。これにより、ブラウザでのさまざまな表現のテストがはるかに簡単になります。

Jersey は暗黙的なビューを適切にサポートしているため、JSPやLift テンプレートなどの任意のテンプレート エンジンを使用して HTML でビューをレンダリングできます。次に、XML/JSON タイプのマーシャリングに従来の JAX-RS プロバイダーを使用します。ビューを明示することもできます。またはJAX-RSにテンプレートなどを見つけさせます。

暗黙的なビューの動作を確認するには、Jersey のソースをダウンロードして、書店などのサンプルを確認する価値があります (必要に応じて @ImplicitProduces を検索してください)。

検証などに関しては、 Bean Validation JSRをリソース Beanに統合するのは簡単です。そのため、リソースや DTO などのカスタム検証を実行できます。同様に、Jersey (フォーム Bean) にも優れたフォーム投稿サポートがあります。

DI/IoC フレームワークを使用して、リソース Bean に必要なもの (データベース関連、Bean 検証関連、サービス オブジェクトなど) を注入することをお勧めします。Spring を回避したい場合、Guice は Jersey でうまく機能します。ただし、Spring with JavaConfig は多くの XML を回避します。

最近では、複雑な UI の場合、おそらくクライアントで JavaScript を使用したいと思うでしょう。JavaScript から RESTful サービスを呼び出すのは簡単ですが (特に JSON または JSONP を使用する場合)、GWT から Java/JAX-RS で RESTful サービスをエレガントに再利用することが欠けています。これまでのところ、 RestyGWTが最も有望に見えます。いつの日か最高の JSON マーシャリング フレームワークであるJacksonは、ネイティブ GWT バインディングを備えます。クライアント側の GWT とサーバー側の JAX-RS で DTO オブジェクトを再利用するというアイデアは、完全に RESTful のままです。

于 2010-01-13T09:35:03.900 に答える
3

Grailsを「バギー」と表現するのは少し厳しいと思います。Grails を使用しているときにバグに遭遇することがありますが、それは多くの場合、Grails ではなく、基盤となるフレームワーク (Spring、Hibernate) またはプラグインが原因です。

また、Hibernate が JPA 実装であることを考えると、それを言うのは本当に意味がありますか?

私はゴームよりJPAを好むだろう

いずれにせよ、あなたが Grails やあなたが言及した他のフレームワークに本当に満足していないなら、Play フレームワークは一見の価値があるかもしれません。

于 2010-01-12T21:01:14.680 に答える
3

2005 年にリリースされた Java 用の最初の REST フレームワークであるRestlet Frameworkについて言及したいと思います。これは成熟しており、スケーラブルであり、大規模なユーザー ベースと活発なコミュニティを持っています。

バージョン 2.0 は最終開発段階にあり、次のような幅広い機能セットを提供します。

  • クリーンな Java API での HTTP 概念の完全なマッピング
  • クライアント側とサーバー側の一貫した API
  • 多くの一般的なテクノ (FreeMarker、Velocity、Spring、Jackson、XStream、JAXB、Atom、OData/WCF Data Services など) との統合
  • スタンドアロンの Java SE、Java EE/サーブレット コンテナ内、Google App Engine、Android、さらには遅延バインディングを使用して Bean を自動的にシリアル化する方法を知っている GWT にデプロイできます (GWT-RPC に似ていますが、RESTful です)。
  • HTTP、SMTP、POP、JDBC、SIP などの多くのコネクタを提供します。
  • 完全なセキュリティ パッケージが組み込まれており、Web セキュリティに重点を置いています
  • 拡張機能としての JAX-RS のサポート
  • 予測可能で、拡張と構成が容易な (Java、XML、Spring、Groovy、Scala などで) クラス指向 API。真に役立つ場合は Java アノテーションをサポート

プロジェクトを見て、試してみてください: http://www.restlet.org/

于 2010-02-08T15:06:09.037 に答える
2

dropwizardも見てください。。

于 2012-07-11T07:29:54.887 に答える
1

それはあなたのリストには載っていませんが、非常に使いやすい Web サービスを構築するためにresteasyをお勧めします。メソッドにアノテーションを使用して Web サービスを配信するだけで済みます。

また、優れた EJB 統合が必要な場合は、 JBoss Seam Frameworkで resteasy を使用できます。

于 2010-01-12T20:11:35.550 に答える