1概要



Jooby


は、最も普及している

NIO Webサーバー

の上に構築された、スケーラブルで高速なマイクロWebフレームワークです。これは非常にわかりやすくモジュール化されており、現代のWebアーキテクチャに合わせて明確に設計されています。


Javascript


および


Kotlin


もサポートされています。

デフォルトでは、

Jooby




Netty、Jetty、およびUndertow


を強力にサポートしています。

この記事では、

Jooby

プロジェクトの全体的な構造と、

Jooby

を使用して簡単なWebアプリケーションを構築する方法について学習します。

** 2アプリケーションアーキテクチャ

**

単純な

Jooby

アプリケーション構造は次のようになります。

├── public
|   └── welcome.html
├── conf
|   ├── application.conf
|   └── logback.xml
└── src
|   ├── main
|   |   └── java
|   |       └── com
|   |           └── baeldung
|   |               └── jooby
|   |                   └── App.java
|   └── test
|       └── java
|           └── com
|               └── baeldung
|                   └── jooby
|                       └── AppTest.java
├── pom.xml

ここで注意しなければならないのは、

public

ディレクトリにはcss/js/htmlなどの静的ファイルを入れることができるということです。

** 3メーベン依存

**


pom.xmlに次の依存関係を追加することで、単純な

Jooby__アプリケーションを作成できます。

<dependency>
    <groupId>org.jooby</groupId>
    <artifactId>jooby-netty</artifactId>
    <version>1.1.3</version>
</dependency>


Jetty

または

Undertow

を選択したい場合は、次の依存関係を使用できます。

<dependency>
    <groupId>org.jooby</groupId>
    <artifactId>jooby-jetty</artifactId>
    <version>1.1.3</version>
</dependency>
<dependency>
    <groupId>org.jooby</groupId>
    <artifactId>jooby-undertow</artifactId>
    <version>1.1.3</version>
</dependency>


Central Maven Repository



Jooby

プロジェクトの最新バージョンを確認できます。


  • Jooby

    には専用のMavenアーキタイプもあります。

次のスクリプトを使ってサンプルプロジェクトを生成できます。

mvn archetype:generate -B -DgroupId=com.baeldung.jooby -DartifactId=jooby
-Dversion=1.0 -DarchetypeArtifactId=jooby-archetype
-DarchetypeGroupId=org.jooby -DarchetypeVersion=1.1.3

** 4アプリケーションの構築

**


4.1. サーバーの起動

組み込みサーバーを起動するには、次のコードスニペットを使用する必要があります。

public class App extends Jooby {
    public static void main(String[]args) {
        run(App::new, args);
    }
}

起動すると、サーバーはデフォルトのポート8080で動作します。

カスタムポートとカスタム

HTTPS

ポートを使用してバックエンドサーバーを構成することもできます。

{
    port( 8081 );
    securePort( 8443 );
}

** 4.2. ルータの実装

**


Jooby

でパスベースのルーターを作成するのはとても簡単です。たとえば、次のようにして、パス ‘

/login

‘のルーターを作成できます。

{
    get( "/login", () -> "Hello from Baeldung");
}

同様に、POST、PUTなどの他の

HTTP

メソッドを処理したい場合は、以下のコードスニペットを使用できます。

{
    post( "/save", req -> {
        Mutant token = req.param( "token" );
        return token.intValue();
    });
}

ここでは、リクエストからリクエストパラメータ名トークンを取得しています。デフォルトでは、すべてのリクエストパラメータは

Jooby

´s



Mutant



データ型に型キャストされています。

期待に基づいて、サポートされているプリミティブデータ型に変換できます。

次の方法で、任意のURLパラメータを確認できます。

{
    get( "/user/{id}", req -> "Hello user : " + req.param("id").value() );
    get( "/user/:id", req -> "Hello user: " + req.param("id").value() );
}

上記のどれでも使用できます。固定されたコンテンツで始まるパラメータを見つけることも可能です。たとえば、次のようにして、「

uid:」

で始まるURLパラメータを見つけることができます。

{
    get( "/uid:{id}", req -> "Hello User with id : uid" +
        req.param("id").value());
}

** 4.3. MVCパターンコントローラの実装

**

エンタープライズアプリケーションの場合、

Jooby

には、Spring MVCのような他のMVCフレームワークと非常によく似たMVC APIが付属しています。

たとえば、 ‘

/hello

‘というパスを処理できます。

@Path("/hello")
public class GetController {
    @GET
    public String hello() {
        return "Hello Baeldung";
    }
}

非常に同様に、

httpを使用して他のHTTPメソッドを処理するためのハンドラを作成することができます。/mvc/PUT.html[@PUT、]

@DELETE


など

注釈。

** 4.4. 静的コンテンツの処理

**

HTML、Javascript、CSS、画像などの静的コンテンツを提供するには、それらのファイルを

public

ディレクトリに配置する必要があります。

配置されると、ルーターから任意のURLをこれらのリソースにマッピングできます。

{
    assets( "/employee" , "form.html" );
}

** 4.5. 取扱フォーム

**


Jooby’s



Request


インタフェースは、デフォルトでは手動の型キャストを使用せずにフォームオブジェクトを処理します。

フォームを介して従業員の詳細を送信する必要があるとしましょう。最初のステップで、データを保持するために使用する

Employee

Beanオブジェクトを作成する必要があります。

public class Employee {
    String id;
    String name;
    String email;

   //standard constructors, getters and setters
}

それでは、フォームを作成するためのページを作成する必要があります。

<form enctype="application/x-www-form-urlencoded" action="/submitForm"
    method="post">
    <input name="id"/>
    <input name="name"/>
    <input name="email"/>
    <input type="submit" value="Submit"/>
</form>

次に、このフォームに対処して送信されたデータを取得するためのポストハンドラを作成します。

post( "/submitForm", req -> {
    Employee employee = req.params(Employee.class);
   //...
    return "empoyee data saved successfullly";
});

ここで注意しなければならないのは、動的フォームバインディングをサポートするためには、フォーム

enctype



application/x-www-form-urlencoded

として宣言する必要があるということです。

アップロードされたファイルを取得することができます:

post( "/upload", req -> {
    Upload upload = req.file("file");
   //...
    upload.close();
});

** 4.6. フィルタの実装

**

すぐに使えるので、Jooby____はパスベースのフィルタと同様にグローバルフィルタを柔軟に定義できます。


Jooby

にfilterを実装するのは少し注意が必要です。** フィルタ用に1回、ハンドラ用にもう一度2回URLパスを設定する必要があるためです。

たとえば、「

/filter」というURLパスにフィルタを実装する必要がある場合、

このパスにフィルタを明示的に実装する必要があります。

get( "/filter", ( req, resp, chain ) -> {
   //...
    chain.next( req, resp );
});

フィルタが実装されたら、リクエストハンドラを実装する必要があります。

get("/filter", (req, resp) -> {
    resp.send("filter response");
});


4.7. セッション


Jooby

には2種類のセッション実装があります。メモリ内およびクッキーベース。

インメモリセッション管理の実装は非常に簡単です。

EhCache、Guava、HazleCast、Cassandra、Couchbase、Redis、MongoDB、

、および

Memcachedのように、

Jooby__で使用可能な任意のハイスループットセッションストアを選択できます。

たとえば、Redisベースのセッションストレージを実装するには、次のMaven依存関係を追加する必要があります。

<dependency>
    <groupId>org.jooby</groupId>
    <artifactId>jooby-jedis</artifactId>
    <version>1.1.3</version>
</dependency>

これで、セッション管理を有効にするために以下のコードスニペットを使用できます。

{
    use(new Redis());
    session(RedisSessionStore.class);

    get( "/session" , req -> {
        Session session = req.session();
        session.set("token", "value");
        return session.get("token").value();
    });
}

ここで注意すべきことは、

application.conf



Rdbis

urlを__db属性として設定できることです。

Cookieベースのセッション管理を有効にするには、

cookieSession()

を宣言する必要があります。

クッキーベースのアプローチが選択されている場合は、

application.conf

ファイルで

application.secret

プロパティを宣言する必要があります。秘密鍵。

**

インメモリベースとCookieベースの両方の方法で、

application.conf

ファイルで必要な設定パラメータを宣言する必要があります。起動時にjava/lang/IllegalStateException.html[IllegalStateException]__。

** 5テスト

**

MVCルートのテストはルートがあるクラスのための戦略に縛られているので確かに簡単です。これにより、すべてのルートに対して単体テストを簡単に実行できます。

たとえば、デフォルトURLのテストケースをすぐに作成できます。

public class AppTest {

    @ClassRule
    public static JoobyRule app = new JoobyRule(new App());

    @Test
    public void given__defaultUrl__expect__fixedString() {

        get("/").then().assertThat().body(equalTo("Hello World!"))
          .statusCode(200).contentType("text/html;charset=UTF-8");
    }
}

ここで注意しなければならないのは、

@ ClassRule

アノテーションを使用すると、すべてのテストケースでサーバーのインスタンスが1つだけ作成されるということです。テストケースごとにサーバーのインスタンスを個別に作成する必要がある場合は、静的修飾子を付けずに

@ Rule

アノテーションを使用する必要があります。


Joobyのhttps://github.com/jooby-project/jooby/blob/master/jooby/src/main/java/org/jooby/test/MockRouter.java[MockRouter]

を使用して、同じ方法:

@Test
public void given__defaultUrl__with__mockrouter__expect__fixedString()
  throws Throwable {

    String result = new MockRouter(new App()).get("/");

    assertEquals("Hello World!", result);
}


6. 結論

このチュートリアルでは、

Jooby

プロジェクトとその重要な機能について説明しました。

いつものように、完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/jooby[over on GitHub]から入手可能です。