ラットパック-タレント

歎史的に、GroovyはRubyから倚くの利点を埗おいたす。 たず第䞀に、もちろんGrailsRailsから、SpockSpecから、そしおどこかGradleBuildrからですが、誰も認識したせんが。 今日は、別の賢明な「愚かな」こず-WebフレヌムワヌクRatpackに぀いお説明したす。
画像
シナトラの廃止されたRatpack。これに぀いおは、たずえばここにあるように、Habréに曞かれおいたす 。
私の意芋では、Sinatraの䞻な利点は、才胜のある歌手であり、フレヌムワヌクの開発で最も䜿いやすく、すぐに䜿えるこずです。 いく぀かの簡単なペヌゞを䜜成するには、それらを倉曎しお結果をオンザフラむで確認し、数時間でかなり重芁なWebサむトに動的なコンテンツを積み䞊げたす-これがたさにSinatraが発明したものです。 これは、「ファット」レヌルに察する䞀皮の答えです。 たったく同じ圹割「肥満」のGrailsぞの答えで、SinatraはGrooveに移行したした。

今回は、GrooveコミュニティがSinatraを最初に匕き裂いたわけではないこずを蚀わなければなりたせん。 最初はScalatraを䜿甚したScalaでしたええ、「肥満」プレむの答え。 私の知る限り、名前をうわさのように芋せず、意味によっお関連性を探すずいう決定は、最初に行われ、ロックのバヌゞョンの名前の音に恐ろしい:)

RatpackはRat Packずしおロシア語に翻蚳されおおり、シナトラずの぀ながりは、 フランクシナトラが出䌚ったパヌティヌだずいうこずです。

Javaはどこにありたすか

さお、ここで、それは私には思えたす、すべおが明確です。 か぀お軜量のRoRがあったRubyや、Grooveず圌のGrailsがあったJavaずは異なり、Javaには䞻流の「軜量」フレヌムワヌクがありたせんでした*。 JSFやWicketのようなかさばるサヌバヌ偎コンポヌネントフレヌムワヌク、たたはもちろんコンポヌネントモンスタヌよりも軜いがMVCに最もシンプルなペヌゞの報酬を芁求するMVCフレヌムワヌクがありたす。 もちろん、ここではSpring MVCずStruts2に぀いお説明しおいたす。 そしお、開発サむクルが非垞に遅いこのすべおが「蚀葉を倉えたしたか 再起動」 Brrr

antonarhipovが正しく指摘 したように、JerseyやRESTletなどのREST APIのフレヌムワヌクを䜿甚できたすが、これは、私の意芋では悪甚です。

Sparkず呌ばれるJavaのSinatraクロヌンがすでにあるので、なぜそれを䜿甚しないのですか これにはいく぀かの理由がありたす。

い぀ものように、JavaプログラマヌにずっおのGrooveの利点は、圌らが居心地が良いこずです。 Javaコヌドの99は倉曎なしでGroovesで機胜するため、GrooveフレヌムワヌクたたはツヌルをJavaプログラマヌがすぐに䜿甚できたす。
ratpackの状況はさらに良いです-開発者は、開発のどの段階でもGrooveを䜿甚せずに玔粋なJavaで蚘述できるように特別な努力をしたした。 したがっお、Grooveに぀いお䜕も知らずに開始し、Ratpackの機胜をゆっくりず自分で発芋しお、Grooveで曞き始めおください。 この蚘事の1぀の䟋は、Javaで100蚘述されおいたす。 最初の段階で誰がこのグルビアのシャヌマニズムに興味がないのか、最埌の䟋に盎接ひねりたす。 残りはここから始たりたす

Hello World

たあ、Hello、Worldから始める必芁があるず思いたすよね 完党なratpack Webアプリケヌションは次のようになりたす。
@GrabResolver('http://oss.jfrog.org/artifactory/libs-snapshot') //(1) @Grab('org.ratpack-framework:ratpack-groovy:0.9.0-SNAPSHOT') import static org.ratpackframework.groovy.RatpackScript.ratpack ratpack { //(2) handlers { get { response.send 'Hello, world!' //(3) } } } 

それだけです 正盎に。 これをファむルたずえばratpack.groovyに曞き蟌み、 groovy ratpack.groovyで実行しgroovy ratpack.groovy 。
INFO: Ratpack started for localhost:5050
玠盎に進む localhost:5050 localhost:5050ず予想されるものが芋぀かりたす

曞いたものを芋おみたしょう
  1. この手順では、無料のオヌプン゜ヌスアカりントArtifactoryから必芁なラむブラリをすべおダりンロヌドしたす
  2. このアプリケヌション宣蚀は、ハンドラヌずモゞュヌルで構成されたす
  3. これはgetハンドラヌです。 パラメヌタがないため、ルヌトURLを呌び出すこずで機胜したす。 ここで、Hello Worldを返すように䟝頌したす。

別のハンドラヌを远加

ratpack.groovyに別のハンドラヌを远加したす。
 ratpack { handlers { get { response.send 'Hello, world!' } get('habr'){ response.send 'Hello, habr!' //   } } } 

ファむルを保存し、ブラりザで localhost:5050/habr localhost:5050/habr 、お楜しみください。

再起動したすか いや、これは私たちのためではありたせん。 誰がすごい バネ仕掛けよくやった 。
ダむナミズムを远加

速床ず関心を远加したす。 コヌド
 ratpack { handlers { get('hello/:username') { response.send "Hello, ${pathTokens.username}" } } } 

結果

たあ、たたはそう。 コヌド
 ratpack { handlers { get('hello') { response.send "Hello, ${request.queryParams.username}" } } } 

結果

テンプレヌトを接続したす

さらに倚くの興味深い機胜に蚀及できたすが、この蚘事はすでに短くはありたせん。玔粋なJavaの䟋ですので、テンプレヌトの操䜜を芋おみたしょう。 たずえば、Groovyテンプレヌトを䜿甚したす。
テンプレヌトはtemplatesディレクトリにありたす。 そこに保存したす。たずえば、次の内容のindex.htmlを保存したす。
 <html> <head> <title>${model.title}</title> </head> <body> <h5>${model.content}</h5> <br/> <img src="http://habr.habrastorage.org/post_images/9a5/14b/49a/9a514b49a2017e50f386f154c8cb0da2.png"/> </body> </html> 

ハンドラヌを含むスクリプトは次のようになりたす。
 @GrabResolver('http://oss.jfrog.org/artifactory/libs-snapshot') @Grab('org.ratpack-framework:ratpack-groovy:0.9.0-SNAPSHOT') import static org.ratpackframework.groovy.RatpackScript.ratpack import static org.ratpackframework.groovy.Template.groovyTemplate ratpack { handlers { get { render groovyTemplate("index.html", title: '   Ratpack', content: ' :') } } } 

新しい静的むンポヌトを確認しおください。
結果が期埅されたす。

誰がJavaを埅っおいたしたか それらがありたす

実行するスクリプトはありたせんので、お埅ちください。 ディレクトリ構造、モゞュヌル、アセンブリファむルを備えた深刻なアプリケヌションがありたす。
䟝存性泚入は、Guice、netty䞊のWebサヌバヌ、gradleでビルドおよび実行し、Springを䜿甚しお再起動したす。
行こう
プロゞェクト構造

ratpack.propertiesファむルは、 HandlerFactory ハンドラヌの取埗元を瀺したす。
 handlerFactory=example.HandlerFactory 

example.HandlerFactoryクラスは、圓然、ハンドラヌのファクトリです。 Hello, %username%のみがありHello, %username% 。
 package example; import ... public class HandlerFactory implements org.ratpackframework.launch.HandlerFactory { public Handler create(LaunchConfig launchConfig) { return chain(new Action<Chain>() { public void execute(Chain chain) { chain.add(get("hello/:username", new Handler() { public void handle(Context context) { Map<String, String> pathTokens = context.getPathTokens(); context.getResponse().send("Hello from Java, " + pathTokens.get("username")); } })); } }); } } 

はい、Java 8は傷぀きたせん。
ここのすべおはGroovyバヌゞョンに䌌おいたす-ハンドラヌをhello /ナヌザヌ名パスに远加し、 context.getPathTokens()からパスの動的郚分の倀を取埗したす。

タスクのrunを開始し、タスクclasses倉曎を再コンパむルしたす別のりィンドりで、 run停止する必芁はありたせん。

結果


正盎なずころ、Javaの䟋はあたり魅力的ではありたせんでした。 積み重ねられたクラスずディレクトリ。これらすべおがGrooveの4行で蚘述できる堎合。 なぜですか
Javaの利点は、耇雑さずサむズの増倧から始たりたす。 突然、クラスずパッケヌゞぞの分離、ハヌドタむピング、およびテストする胜力が、ファむルず行の数よりもはるかに重芁になりたす。 これらの利点を確認するには、こちらのより完党なRatpack Javaアプリケヌションの䟋をご芧ください 。 私が話しおいるメリットを理解しおいただけるず思いたす。

おわりに

圓然、これらは非垞に基本的なものです。圓然、Ratpackには、今瀺したものよりもはるかに倚くの利点がありたす。 これらは、Guiceモゞュヌル、サヌビス、MongoDBおよびGORMずの統合です。

ハンドラヌ、モゞュヌル、およびサヌビスにJavaクラスを䜿甚するず、䞭皋床の耇雑さのモゞュヌル匏で簡単にテスト可胜なアプリケヌションを䜜成できたす。
Groovyスクリプトを䜿甚するず、単玔な「ひざたずき」なものをはるかに高速に開発でき、印象的な結果が埗られたす。

このフレヌムワヌクに興味を持っおいただけたこずを願っおいたす。 ご芧のずおり、最初のバヌゞョンでもただリリヌスされおいないので間もなく、ミッションクリティカルなアプリケヌションを曞き盎す必芁はありたせんが、それに泚意を払い、次のバヌゞョンをビルドしおみる䟡倀がありたす。䞍気味なホヌムペヌゞ」

PS

続行する堎合は、コメントを蚘入しおください。
個人的にRatpackず話したり、他の興味深いこずを聞きたい堎合は、8月31日にJUGに来おください 。

Source: https://habr.com/ru/post/J190452/


All Articles