今Java Web Frameworkを選択していますか?[閉まっている]


149

カスタム開発されたmvcフレームワークで構築された大規模なWebサイトを、ajax、リッチメディアコンテンツ、マッシュアップ、テンプレートベースのレイアウト、検証、最大のhtml /の組み込みサポートを提供するJavaベースのWebフレームワークに移行する計画段階です。 Javaコード分離。Grailsは良い選択のように見えましたが、スクリプト言語を使用したくありません。Javaを使い続けたい。テンプレートベースのレイアウトは、このWebアプリケーションを、機能は似ていますが外観が大幅に異なる複数のWebサイトで使用する予定であるため、主な関心事です。

ポータルベースのソリューションはこの問題に適していますか?

「Spring Roo」または「Play」の使用に関する洞察は非常に役立ちます。

私はこのような同様の投稿を見つけましたが、1年以上前のものです。物事は確かにその間に変化しました!

編集1:素晴らしい答えをありがとう!このサイトは、トレンチ内のプログラマー情報の最高の単一ソースになりつつあります。ただし、portal-cms duoの使用に関する詳細情報が必要でした。ジャヒアは商品に見えます。同様のものはありますか?


1
「スクリプト言語を使いたくない」というのは残念なことですが、なぜ私が質問できるのでしょうか。Playフレームワークが好きなら、JRuby with Railsを試してみてください。プレーンなJavaではありませんが、JRubyからJavaクラスを呼び出すのは非常に簡単です。
ルーク

2
Grails(Groovyなど)はJavaで非常にうまく機能します。恐れる必要はありません。
Erich Kitzmueller、2010年

4
@hbagchi:気になるだけ。4か月後、どのフレームワークを使いましたか?それで満足ですか?
Jonik、

1
これは「コミュニティウィキ」の質問ではありませんか?
mickthompson、2010

11
「しかし、それは1年以上経過しています。物事はその間に確実に変化しました!」...はい、神様は12か月以上前のテクノロジーを使用することを禁じています!銀の弾丸は確かにその間に発明されました... :-)
ObiWanKenobi

回答:


146

ポータルベースのソリューションはこの問題に適していますか?

個人的には、私は大きな脂肪のポータルソリューション(それらは多くの場合、生産性を低下させる)から離れます。でも、Gateinについては良いことは聞いたことがありますが、実際の経験はありません。

「Spring Roo」または「Play」の使用に関する洞察は非常に役立ちます。

Spring Rooについて、Spring roo Vs(WicketとSpring)などのインターネット上のその他の回答を読んだことがありますが、まだ確信が持てません(たぶんわかりません)。その成熟度はわかりません。 、そしてさらに重要なことに、SpringSourceがGrailsとRooで何をしているのか本当に疑問に思っています(いいえ、Grails対Roo-なぜSpringSourceが2つの非常に類似したテクノロジーを推進しているのですか?両方が存続することを確信していません)。

Playについてはあまり言えません。みんなと同じようにデモを見てきましたが、実際のフィードバックを読みたいと思います。それまで、お待ちください。

同様の投稿を見つけました(...)。物事は確かにその間に変化しました!

はい、いいえ:)でも、プレゼンテーションフレームワークの地獄に入りましょう。質問に対する答えは1年前のように1つもありません。周囲には何十ものフレームワークがあり、明確な勝者はいません。ほんのいくつかを引用します:

  • JSF:私を含め、このコンポーネントベースのフレームワークについては多くの懐疑論者がいるので、私はそれについて話すのが一番ではありませんが...
  • JSF 2(+ CDI / Weld):JSF懐疑論者は(Gavin Kingによって)「再検討」することが推奨されます。実際、JSF 2は、特にCDIを使用することで大幅に改善されたと思いますが、それはまだかなり新しいものです(理解してください。フィードバックがありません)。Java EE 6を採用したい場合は、チェックしてください。
  • Wicket:より注目を集めているコンポーネントベースのフレームワーク。JSFよりもシンプルで、デザインが良く、テスト容易性が高く、HTMLデザイナーが使いやすいなど、それについてはほとんど良いことを聞いています。
  • タペストリー:しないでください(タペストリーの使用をやめた理由を参照してください)。
  • Struts 2、Spring MVC、Stripes:アクションベースのフレームワーク。すべてのまともであなたのニーズをカバーします(個人的に、私はStripesとその構成アプローチに対する慣習が好きです、それについてのアイデアを得るためにStripesとStruts2を参照してください)。
  • GWT、Flex、Grails:これらはあなたが探しているものではないかもしれません。私は実際にFlexとGWTの(最近のバージョン)について話すことはできませんが、私はGrailsのがないことを知っている必要があり 、一部 のファンを

実際、マットレイブルのプレゼンテーションをご覧になることをお勧めします。彼は、Webフレームワークを比較し、長所と短所を示し、事実と数値を収集し、傾向を示し、非常に優れた仕事をしました。

本当に、これらのプレゼンテーションを見てください。これらは適切なフレームワークを見つけるのに役立ち(一意の答えはありませんが、削除することで選択を制限できます)、視点を変える可能性があります。


よくできました、私は:)を撤回しました。+1
Adeel Ansari

Mattによる最近のJava Web f / wsの撮影はひどいものでした。私がストラットを実質的に同じスコアではるかに豊富でより強力なf / wsと覚えていたとしたら、GWTやWicketよりも数ポイントだけ低いスコアに値するStrutsのように、誰もがプレーンジェーンと見なすことができる方法はありません。
mP。

3
はい、私はかなりの数の人々が私の「マトリックス」またはその評価のための私のロジックを好きではなかったことに気づきました。結局、このマトリックスで私が望んでいたことは、単にWebフレームワークを選択するための手法を強調することでした。私の評価の背後にあるロジックについては、次のブログ投稿を参照してください。raibledesigns.com
Matt Raible

JSF、Spring MVC、Stripes、Struts 2、Tapestry、およびWicketの比較に関するMatt Raibleのプレゼンテーションは確かにかなり古くなっています...
Nerrve

1
@iberck、私は最近AngularJSを実験しています。正直なところ、誇張することなく、現在のすべてのWebフレームワークとは言わないまでも、ほとんどのWebフレームワークが隠されると思います。クライアント側の単なるJSフレームワークなので、RESTを使用してサーバーからデータを簡単かつ「効率的に」取得できます。試してみてください、それはあなたの世界を揺るがし
Muhammad Gelbana

41

私はしばらくSpring 3とJqueryを使用していますが、Playについて聞いて試してみました。PlayはPHPのようなものと、Springのような頑丈なJavaフレームワークとの間にぴったりです。

私が遊びについて最も好きなことは:

  • Playアプリケーションを地面から取得するのは非常に簡単です。Springを使用して画面上に単純なcrudアプリケーションを取得するには、コーディングと構成をかなり遠くまで行かなければなりません(ただし、Spring 3により、はるかに簡単になりました)。
  • Spring Securityは素晴らしいですが、複雑さを犠牲にしています。Playのセキュリティモジュールは非常にシンプルで、世の中にあるアプリケーションのおそらく90%のニーズをカバーしています。
  • サーブレットベースのフレームワークで再デプロイ全体を実行する代わりに、コードを変更してブラウザーで更新を押し、PHPのように変更を確認できます。
  • エラーメッセージは適切に表示され、ほとんどの場合、暗号化されているわけではありません。Playはまだエラー処理に取り組む必要があります
  • Playのプラグインメカニズムはかなりシンプルです。
  • インメモリデータベースとJPAがフレームワークに付属しているため、オブジェクト永続化は非常に適切に行われ、外部オブジェクト永続化ツールの構成はありません。メモリー内データベースから実際のRDBMSへの移行は、構成ファイルの1行の変更です。
  • MVCのセットアップは非常にうまく行われています。ドメインオブジェクトを作成するために拡張するModelクラスは、JPAエンティティマネージャーと統合されます。それらはPOJOだけではありません。
  • URLのコントローラへのマッピングはシンプルで柔軟で、すべて1つの「ルート」ファイルに含まれています。
  • プロジェクトを作成すると、Playはすべてのjar依存関係を処理し、Playはプロジェクト(または任意のIDE)をEclipse化して、お気に入りのIDEに直接インポートするユーティリティを備えています。

Playで気に入らない点

  • ドキュメントはまだ完全なものではありませんが、ドキュメント化されていない多くの機能がまだ存在しています。
  • フレームワークはサーバーなので、各アプリケーション専用のポートを用意する必要があります。誰かが仮想ホストプラグインに取り組んでいると思いますが、まだ動作していません。
  • 若く、プロジェクトは素晴らしく、技術は素晴らしかったですが、実際にはさらに開発者が必要です。私はそれに少し時間を捧げたいと思います。

17

私にとって一番の選択肢はWicketです。マークアップとJavaコードの明確な分離。コンポーネントの作成と使用が非常に簡単です。使いやすいAjax、テスト容易性。ページ/コンポーネントを直接デバッグでき、JSF実装から不可解なエラーメッセージを受信しません;)

パフォーマンスの点で優れた比較ウィケット<-> JSF もあります。


4
+1継承、ポリモーフィズム、構成を伴う純粋なOOP指向は言うまでもありません。また、XML-configファイルは無料です!
XaviLópez

3
彼らが提案するフレームワークが好きではないため、人々がここで反対票を投じていることを興味深い。だけでなく、私の自動改札の答えは、ほぼすべての...票ダウンいくつかを持っている
BERT

13

私にとっての上位3つの選択肢は(アルファベット順)です。

彼ら:

  • ajaxを十分にサポートしている
  • アプリケーション(GWTなど)ではなく、実際のWebサイトを作成できる
  • 安定した、十分に文書化された、広く使用されている
  • MVC
  • 純粋なJava
  • ミドルウェアとしてのSpringとの簡単な統合

17
JSFを使用して「実際のWebサイトを作成する」ことができると主張する方法を私は知りません。POSTの使用を強制するフレームワークは、この点ですぐに失われます。
Stefan Tilkov、

3
私はJSFで「実際のWebサイト」を開発しましたが、問題なく使用しました。さらに、POSTの使用は、何かを投稿しているときにのみ強制されます。単純なGETナビゲーションはいつでも自由に使用できます。理論的には、リソースを変更する場合にGETを使用するのは間違っていますね。
Bozho

プラス、あなたはJSFを示唆するためにも、パスカルをdownvote必要があるだろう;)
Bozho

3
問題はありませんが、これは何年も前に見た「もの」のリストのように聞こえるので、私はそれを見て驚いただけです。私の経験では、ほとんどの人はその後、それらの失敗から脱却しました。あなたがすでにこれらの専門家であれば、それらは優れた選択肢になると思いますが、専門家がプロジェクトを去った後に引き継ぐ必要があるO&Mプログラマーが心配です。これ以上IMOを学んでいる人はいない。
Manius

1
コメントのこの行は確かに少し陽気です。もちろん、JSFはWebサイトで完全に使用でき、GETとPOSTの両方をファーストクラスでサポートしています。目前の状況に最も適したものを使用してください。実際、Bozhoが示すように、リソースを変更する場合はGETを使用しないでください。それ以外の場合は、自由に変更してください。
Arjan Tijms、2011年


10

他の回答とは対照的に、私は人気のあるWebフレームワークの欠点(IMHO)を強調したいと思います。

JSF2-リリース済みで、すでに古くなっています。それでも、ほんの少しのニュース/記事/ブログの投稿/体験しかありません。私は懐疑的です。jsf 2を完全にサポートするRichfaces / Icefacesの次のメジャーリリースをまだ待っています。現在、ダウンロードできるのはアルファビルドのみです。

Struts 2-まだStrutsに依存していて、ほとんどのコードをリファクタリングしたい場合にのみ、良いことのようです。それ以外の場合:しないでください。

GWT-単一ページとjava-> javascriptアプローチは好きではありません。1つのセッションかどうかはわかりません。複数のビュー/ウィンドウを簡単に実現できます。私にとって、このフレームワークは、大規模ユーザーのシングルウィンドウのリッチインターネットアプリケーションに使用する必要があります。

Wicket-素晴らしいアプローチですが、少し冗長であり、利用可能なドキュメントが少なすぎます(アクションブックの優れた改札を除きますが、これは1.3のみをカバーしています)。また、私にとっては、その上に構築された大きなプロジェクトが不足しています。そして、私は現在、改札の道がどこに向かっているのか、あるいはそれがすでに行き止まりに追いやられているのかどうかわかりません。

Spring MVC-これはまだ試していませんが、このフレームワークを適切に使用するには、クラスパスに多くのjar(spring mess)を含める必要があります。そして、ほとんどのプロジェクトで、JSPに依存しています。そして、あなたは純粋なMVCフレームワークだけを取得します-他のすべてのもの(ajaxと他のもの)は実装/統合する必要があります。

Stripes-小さくて素敵なデザインのMVCフレームワークですが、ドキュメントが少なすぎ、コミット/コミッターが少なすぎ、リリースが少なすぎ、業界サポートが少なすぎ、メーリングリストアクティビティが少なすぎます。

私がそこにある主要なフレームワークを見逃した場合(私が意図的にTapestryを除外した場合)も興味があります。


これを処理するための最良の方法は、Python Webフレームワークが行ったことに似ています:最良のものから選択してください。例:Spring + JAX-RS
Adam Gent

GWTに関するコメントが間違っています。1つの大きなものではなく、多くの個別のページを持つのは非常に簡単です。別のページへのリンクを挿入して、別の「アクション」を開始します。
mP。

複数のウィンドウ(またはタブ)についても話します。同じセッションを同時に使用して複数のウィンドウを使用することは本当に可能ですか?
MRalwasser、2011年

1
+1なぜこの投稿は2つの否定的な声を得たのですか?これらのような懐疑的な意見は、肯定的な意見と同じくらい(それ以上ではないにしても)重要です!そして、これらは建設的なもののように思えます。
Piotr Sobczyk

8

JAX-RSで大成功しました。これは、サーブレットとポートレットの仕様以外に、ある種のJSR仕様と複数の実装を備えた唯一のJava Webフレームワークです(ただし、これは悪いことです)。

Javaの悪い点と良い点の1つは、フレームワークを選択して照合できることです(Pythonにもこの機能/問題があります)。1つのバスケットにすべての卵を入れる必要がないため、これは素晴らしいことです。

一般的なJava Webアプリケーションスタックのレシピは次のとおりです。

JavaScript / Flash +リクエスト/レスポンスの処理+依存性注入+持続性

JavaScript: JQuery、Prototype、Dojo

リクエスト/レスポンス: Spring MVC、Stripes、そして私のお気に入りのJAX-RS(ジャージー、Apache CXF)

依存性注入:春、ギス

永続性: JPA(Hibernate、Google App storage)、Hibernate、JDOなど。

また、AspectJを使用してJavaの「吸い込みを少なく」することに大きな成功を収めています。Springの@ConfigurableおよびAspectJのITDミックスインを使用すると、ドメインオブジェクトのようなRailsを取得できます(これはRooの機能には影響しませんが、これを行うためにRooを必要としません)。


4
同意する。独自のスタックを設定するのには時間がかかりますが、必要なものが正確に得られます。現在、jQuery、Jersey、Spring、JPA2を使用しています。JAX-RSは、応答を完全に制御できるため、優れています。
Brian DiCasa、2011年

6

ストライプは本当に効果的で、驚くほど軽量であることがわかりました。ストラットよりも軽量になることを目指しています。フルタイムのWeb開発者である友人から、JSFを気にする必要がないと聞いたことがありますが、私は直接の経験がなく、例(!)でそれをバックアップすることはできません。


5

Playと同じ原則に従うRESThubご覧ください。ただし、Maven 3 / Spring 3 / Jersey / jQueryなどのエンタープライズグレードのフレームワーク/ツールを再利用して実装されています。

RESThubは、完全なスタックツールキットであるため、他のフレームワークと比較して非常に破壊的ですが、サーバーサイドMVCまたはサーブレットベースのフレームワークがありません。代わりに、JAX-RS(REST)WebサービスとembeddedJに基づくJavaScriptテンプレートシステムを使用するjQuery UIベースのGUIを使用します。

サーバーはステートレスであり、クライアント側でセッションを維持するためにHTML5 sessionStorageを使用します。このアプローチは、RIAとスケーラビリティのための設計です。

一部のデモアプリケーションが提供されています(作成中であっても)。


3

JSFは素晴らしいフレームワークですが、JSF 1.2はリリースから何年もの間ビジョンを持っていませんでした。JSF 2.0は有望に見え、ajsxサポート、facelet、アノテーションサポート、デフォルトの規則(XMLが少ない)、1.2よりも簡単なコンポーネントの構築など、JSF 1.2から多くの新しいものが追加されています。

DIサポートが心配な場合は、Springともうまく統合できます。


2

私は春の推薦に続きます。私はGWTの大ファンではありません。Java-> Javascriptクロスコンパイラーはまだまだありません。私はサーバーでSpringを使用し、クライアントでjQueryを使用するAJAXアプリに取り組んでいます。技術的にはjQueryの「すぐに使える」サポートはありませんが、Spring-MVC AjaxViewの実装は非常に単純で、約25行のコードが必要です。


2

多分少し遅れるかもしれませんが、私ヴァーディンに言及しなけれなりません。プログラミングは、コンポーネントベースのアプローチにより、Javaでのみ行われます。クライアント/サーバー通信は、データ転送よりもユーザーとのやり取りに関するものであり、すべてのビジネスロジックはサーバー上に存在します。


1
私はvaadinを使用していますが、複雑なアプリケーションを構築するのには適していません。
ラダン


1

あなたが探しているのはジャヒアに近いものだと思います。GWT、マッシュアップ、メディアコンテンツなどをサポートしています。

http://www.jahia.org/cms/lang/en/home/Jahiapedia/Jahia_Templates http://www.jahia.net/downloads/jahia/jahia6.0.0/readme/index.html


いいね!これはオープンソース/エンタープライズ向けの無料ですか?これは広く使用されていますか?
コスモス

それはすべての基本的なものとコミュニティバージョンといくつかの追加などのエンタープライズバージョンがあります。この場所をチェックしてくださいjahia.com/jahia/Jahia
Syed M

1

BACKBASEポータルソフトウェア

数年前、ポータルソフトウェア「バックベース」を使用してきましたが、これはそれほど成熟していませんでした。しかし、開発が容易で良かった。



0

単なる弾丸以上のものに値するものは、プレーヤーベースのRIAフレームワークです。例 Adobe Flex + Java(もちろん、これは「サイト」が実際に「サイト」であるか「アプリケーション」のようなものであるかによって多少異なります。Flexでブログサイトを作成することはありません。)

ajax、

AJAX-as-a-a buzzwordの意味では、Flexは通常AMF(AJAXアプリで使用されるプロトコルよりも効率的なバイナリプロトコル)を使用しますが、Flexでも厳密にAJAXを行うこともできます。そのため、FlexはAJAXをサポートしていますが、「AJAXより優れている」こともサポートしています。

リッチメディアコンテンツ、マッシュアップ、

FlexはFlashの「仮想マシン」プラットフォームで実行されるため、追加する必要はほとんどありません。

テンプレートベースのレイアウト、

これが正確に何を達成しているのかはわかりませんが、Flex mxmlのように聞こえます。

検証、

もちろんサポートされていますが、ファンシーになりたい場合は、カスタム設定を行うこともできます。(あなたがする必要があるというわけではありません。)良いことは、あなたが好きなだけ洗練されたものになることができるということです-あるいはそうでないこと。

html / javaコードの最大分離

Flex / Silverlight / JavaFXのような「仮想マシン」開発アプローチを使用して、これ以上分離することはできません。これにより、プレゼンテーションコードをサーバー側のロジックおよびデータアクセスレイヤーから分離するだけでなく、それらを確実に分離できます。開発環境を「仮想化」すると、ブラウザー間の互換性、一貫したターゲットプラットフォーム、アプリケーションを壊す新しいブラウザーや新しいブラウザーのリリース、最上級のJavaのようなデバッグ機能、そしてよりプロフェッショナルで印象的な最終製品を心配する必要がなくなります。 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.