
Rife2は、最新のJavaでWebアプリケーションを迅速かつ楽に作成するためのフルスタックの、非推論のフレームワークです。
Rife2は、2002年から2010年にかけて人気があった元のRifeフレームワークの基礎の上に構築されています。それ以来、世界とJavaは変化し、元のRife APIの多くは最終的に純粋なJava、no-xml、no yamlに置き換えられ、タイプセーフの表現コードのみを残しました。
Rife2は、オリジナルの機能のほとんどを保存し、フットプリントのほんの一部で、以前よりもさらに開発者の生産性を高めます。 Rife2は、多くのJava会議で最初のJavaチャンピオンでありスピーカーの1人であるGeert Bevinによって作成されています。
ヒント: IntellijのアイデアをIDEとして使用する場合は、Rife2 Ideaプラグインをインストールすることを検討してください。
これにより、コーディングエクスペリエンスが大幅に向上します。
これは簡単なチュートリアルであり、完全なドキュメントにはさらに多くの情報が含まれています。
rife2 javadocsは、さらに多くの詳細を記録してドキュメントを補完します。
よくある質問は、「なぜ他の人気のあるフレームワークよりもrife2を選ぶのか」ということです。
簡単な答えは、 Rife2が異なるということです。小さなチームでWebアプリケーションをすばやく作成するように設計されています。それは挑戦しており、常にステータスに挑戦します。 SpringやJEEなどのエンタープライズレベルのフレームワークを置き換えることではありませんが、エンタープライズアプリケーションに使用しました。 Rife2は、通常スクリプト言語で書くWebアプリケーション用のJavaプラットフォームのパワーを活用します。生産性と保守性が重要であるため、作業の90%が努力の10%で完了し、必要な場所で他のJavaライブラリやフレームワークと統合できることがわかります。
Rife2には、20年後も他の場所では見つからない機能があります。
Webの継続、双方向テンプレートエンジン、Bean中心のメタデータシステム、依存関係のないフルスタック、メタデータ駆動型SQLビルダー、コンテンツ管理フレームワーク、完全なローカリゼーションサポート、リソース抽出、永続的なクロンのようなスケジュール、継続ベースのワークフローエンジン。
これらの機能のほとんどは時の試練に耐えてきましたが、20年後もWebアプリケーション開発のための素晴らしい選択であることが証明されています。 Rife2は、何十年もの経験から学び、これらの元の機能をさまざまな方法で改善しています。
Rife2には、他の人に採用されている機能もありますが、通常、フルスタック全体の緊密な統合の利便性がありません。
たとえば、コンテナー外テストは、HTMLを解析することなく、結果のテンプレートの構造を分析することができます。認証システムは、フルスタックの他のすべての部分から構築され、Webアプリケーションにシームレスに統合されます。 SVG、SQL)、...など。
Rife2は赤い丸薬で、ウサギの穴がどれほど深くなるかを示す準備ができています。
これはHello Worldサイトから始める方法です。
public class HelloWorld extends Site {
public void setup () {
get ( "/hello" , c -> c . print ( "Hello World" ));
}
public static void main ( String [] args ) {
new Server (). start ( new HelloWorld ());
}
} mainメソッドは、統合された埋め込まれたJettyサーバーをスピンアップして、すぐにコーディングを開始できるようにします。同じHelloWorldクラスをweb.xmlにパラメーター値として追加できます。これは、開発と生産の間のコードに絶対的な変更を必要とする必要があります。
コンテナー外テストは、rife2の一流の市民であり、 Siteクラスと直接対話して、サーブレットコンテナをスピンアップすることなく、完全なリクエストと応答の相互作用をシミュレートします。
これは、上記の例をJunit 5でテストする方法です。
class HelloTest {
@ Test void verifyHelloWorld () {
var m = new MockConversation ( new HelloWorld ());
assertEquals ( "Hello World" , m . doRequest ( "/hello" ). getText ());
}
}Webアプリケーション開発の最も脆弱な側面の1つは、リンクとURLをテキストリテラルとして入力することです。ルートが変更されたとき、またはアプリケーションをさまざまなWebアプリケーションコンテキストに展開したときに、それらが正しいままであることを保証することはありません。 Rife2のルーティングAPIを使用すると、すべてのアプリケーションリンクを、努力することなく正しく生成できます。
以前のHello Worldルートに向かうHTMLリンクを含む新しいルートを追加しましょう。
setup()メソッド内でルートを作成する必要はないことがわかりますが、 Siteの構造の一部として作成して、ルートをフィールドに保存できるようにすることもできます。
public class HelloLink extends Site {
Route hello = get ( "/hello" , c -> c . print ( "Hello World" ));
Route link = get ( "/link" , c -> c . print ( "<a href='" + c . urlFor ( hello ) + "'>Hello</a>" ));
public static void main ( String [] args ) {
new Server (). start ( new HelloLink ());
}
}これをテストすることができます。
class HelloTest {
@ Test void verifyHelloLink () {
var m = new MockConversation ( new HelloLink ());
assertEquals ( "Hello World" , m . doRequest ( "/link" )
. getParsedHtml (). getLinkWithText ( "Hello" )
. follow (). getText ());
}
}Rife2を作成した主な推進力は、Rifeのユニークなテンプレートエンジンでした。
Rife2のテンプレートには、2つの主要な概念が含まれています。
Javaコードは、ブロックを割り当てて追加し、データを値に配置することにより、最終レイアウトを作成します。上記のHelloLink例をテンプレートで書き直しましょう。
この例では、Javaではテンプレート操作はまだ行われていません。
代わりに、 {{v route:hello/}} valueタグを導入します。これは、アクティブSiteでそのフィールド名で使用できるルートのURLに自動的に置き換えられます。
public class HelloTemplate extends Site {
Route hello = get ( "/hello" , c -> c . print ( "Hello World" ));
Route link = get ( "/link" , c -> c . print ( c . template ( "HelloTemplate" )));
public static void main ( String [] args ) {
new Server (). start ( new HelloTemplate ());
}
} HelloTemplate.htmlで:
<!DOCTYPE html >
< html lang =" en " >
< body >
< a href =" {{v route:hello/}} " > Hello </ a >
</ body >
</ html >Rife2は、最適化されたbytecodeを生成することにより、テンプレートをJavaクラスに内部的に変換することに注意してください。
これは、開発中に飛行中に発生します。生産のために、テンプレートは事前にコンパイルされ、非常に速くすることができます。
この例をもう少し変更し、 getとpostの両方に応答できる単一のルートを作成しましょう。
getリクエストには、クリックするボタンが1つあるフォームが表示されます。postリクエストはフォームの提出を受け取り、 Hello Worldを表示します。 public class HelloForm extends Site {
Route hello = route ( "/hello" , c -> {
var t = c . template ( "HelloForm" );
switch ( c . method ()) {
case GET -> t . setBlock ( "content" , "form" );
case POST -> t . setBlock ( "content" , "text" );
}
c . print ( t );
});
public static void main ( String [] args ) {
new Server (). start ( new HelloForm ());
}
} HelloForm.htmlで:
<!DOCTYPE html >
< html lang =" en " >
< body >
<!--v content/-->
<!--b form-->
< form action =" {{v route:action:hello/}} " method =" post " name =" hello " >
<!--v route:inputs:hello/-->
< input type =" submit " name =" Submit " >
</ form >
<!--/b-->
<!--b text--> < p id =" greeting " > Hello World </ p > <!--/b-->
</ body >
</ html >注:
route:上記の値タグはroute:action:およびroute:inputs:、クエリ文字列パラメーターの代わりにパラメーターの非表示のHTMLフォーム入力を生成します。
テンプレートにはすべてのピースが含まれていることがわかります。両方のページを作成します。
contentformという名前のブロックtextJavaでは、表示したいものに応じて、どちらのブロックを値に割り当てます。
もう1つの利点は、Rife2のテンプレートタグがHTMLコメントであり、完全に見えないことです。これにより、通常どおりHTMLデザインで作業し、通常のブラウザでテンプレートファイルをプレビューできます。
最後に、この機能のテストを含めましょう。
class HelloTest {
@ Test void verifyHelloForm () {
var m = new MockConversation ( new HelloForm ());
var r = m . doRequest ( "/hello" ). getParsedHtml ()
. getFormWithName ( "hello" ). submit ();
assertEquals ( "Hello World" , r . getParsedHtml ()
. getDocument (). body ()
. getElementById ( "greeting" ). text ());
}
}最後まで読んでくれてありがとう!
これは、あなたの食欲をそそるための簡単な紹介であり、Rife2には、多くの例と実用的な説明が記載された包括的で読みやすいマニュアルが付属しています。
ご質問、提案、アイデア、またはチャットしたい場合は、フォーラムに投稿するか、Discordに参加してください。
詳細については、完全なドキュメントとrife2 javadocsをご覧ください。