JavaでのVRaptorの紹介

JavaのVRaptorの概要

1. Overview

この記事では、VRaptorについて説明します。これは、Javaコンテキストと依存性注入テクノロジーを利用し、簡単に把握できる、シンプルでわかりやすいJava MVCWebフレームワークです。

春のように–it relies heavily on annotations and works great with Hibernate

また、内部化や単体テストなど、いくつかの便利なプラグインが付属しています。

それでは、VRaptorのさまざまなコンポーネントを調べて、サンプルプロジェクトを作成しましょう。

2. Mavenの依存関係とセットアップ

起動して実行する簡単な方法の1つは、official repositoryからvraptor-blank-project-distributionをダウンロードすることです。

空白のプロジェクトは、スケルトンであり、肉体化して選択可能な本格的なWebアプリケーションになることができます。

プロジェクトをダウンロードして解凍したら、ディレクトリの名前をvraptor(またはその他の名前)に変更しましょう。

ディレクトリには以下が含まれている必要があります。

  • src/

  • pom.xml

  • およびREADME.md

プロジェクトはMavenベースであり、アプリケーションを実行するためのサーブレットコンテナを提供するtomcat7Mavenプラグインが付属しています。

また、index()という1つのメソッドしかないデフォルトのIndexControllerも付属しています。

デフォルトでは、このメソッドによってレンダリングされるビューはwebapp/WEB-INF/jsp/index/index.jspにあります–これは規則WEB-INF/jsp/controller_name/method_name.に従います

サーバーを起動するには、プロジェクトのルートからコマンドmvn tomcat7:_run_を実行します。

成功した場合、http://localhost:8080,にアクセスすると、ブラウザに「It works!! VRaptor!」と表示されます。

If we face the “java.lang.LinkageError: loader constraint violation”, then, we have to modify the following dependencies in pom.xml


    org.jboss.weld.servlet
    weld-servlet-core
    2.1.2.Final
    
        
        org.jboss.spec.javax.el
        jboss-el-api_3.0_spec
        
    


    org.jboss.weld
    weld-core-impl
    2.1.2.Final
    
       
          org.jboss.spec.javax.el
      jboss-el-api_3.0_spec
       
    

犯人は、weld-servlet-coreおよびcompileスコープのweld-core-implに含まれるel-apiです。これは依存関係の衝突につながります。

次の依存関係が必要になるので、それらをpom.xmlに含めましょう。


    br.com.caelum.vraptor
    vraptor-freemarker
    4.1.0-RC3

    mysql
    mysql-connector-java
    8.0.8-dmr



    org.freemarker
    freemarker
    2.3.27-incubating

vraptor-freemarker,mysql-connector-javaおよびfreemarkerアーティファクトの最新バージョンはMavenCentralにあります。

準備ができたので、簡単なブログサイトを作成しましょう。

3. 休止状態のサポート

VRaptorは、データベースと対話するためのさまざまなプラグインを提供します。そのうちの1つは、Hibernate 4で動作するvraptor-hibernateです。

プラグインは、実行時にCDIを介してHibernateのSessionFactoryBeanを利用できるようにします。

プラグインを配置したら、標準のHibernate構成ファイルが必要です。例はリポジトリにあります。

VRaptorは、Producersと呼ばれる手法を使用して、オブジェクトをDI管理に使用できるようにします。 このhereの詳細。

4. VRaptorでのWebルートの定義

VRaptorでは、ルート定義は、Springの場合と同様に、単に@Controllerアノテーションが付けられたJavaオブジェクトであるコントローラーに存在します。

@Pathアノテーションは、リクエストパスを特定のコントローラーにマッピングするために使用され、@Get, @Post, @Put, @Deleteおよび@Patchアノテーションは、HTTPリクエストタイプを指定するために使用されます。

ルートマッピング構成はJAX-RSの方法に似ていますが、標準を公式に実装していません。

さらに、パスを定義するときに、中括弧でパス変数を指定することができます。

@Get("/posts/{id}")

idの値は、コントローラーメソッド内でアクセスできます。

@Get("/posts/{id}")
public void view(int id) {
    // ...
}

フォームが特定のルートに送信されると、VRaptorは送信されたフォームデータをオブジェクトに自動的に入力できます。

記事の次のセクションでこれが実際に動作するのを見てみましょう。

5. ビューとテンプレートエンジン

デフォルトでは、JSPを使用してビューを実装できます。 ただし、他のテンプレートエンジンも使用できます。この記事では、Freemarkerを使用します。

デフォルトのビューディレクトリ(src / main / resources / templates)にindex.ftl and savingを作成することから始めましょう:



    
    VRaptor Blank Project


It works!! ${variable}


これで、ビューのレンダリングにFreemarkerViewクラスで定義されたビューを使用できます。

@Path("/")
public void index() {
    result.include("variable", "VRaptor!");
    result.use(FreemarkerView.class).withTemplate("index");
}

Resultオブジェクトはモデルの状態を保持します–別のページ、URL、またはコントローラーメソッドにリダイレクトするためのメソッドがあります。 CDIを使用してコントローラーに注入できます。

この例では、variableはFreemarkerによって解決されます。 したがって、index.ftl${variable}プレースホルダーは、「VRaptor!」に置き換えられます。

より高度な使用法は、hereに記載されています。

6. フォーム提出処理の例

検証を使用してフォーム送信を処理する方法を見てみましょう。

@Post("/post/add")
public void add(Post post) {
    post.setAuthor(userInfo.getUser());
    validator.validate(post);
    if(validator.hasErrors()) {
        result.include("errors", validator.getErrors());
    }
    validator.onErrorRedirectTo(this).addForm();

    Object id = postDao.add(post);

    if(Objects.nonNull(id)) {
       result.include("status", "Post Added Successfully");
         result.redirectTo(IndexController.class).index();
    } else {
        result.include(
          "error", "There was an error creating the post. Try Again");
        result.redirectTo(this).addForm();
    }
}

Postオブジェクトは、postDao.add()を使用してデータベースに永続化される前に、最初にJava bean validationを使用して検証されます。

Postオブジェクトのフィールドは、送信されたフォームデータの値から自動的に入力されます。これは、ビューファイルのフォームの入力フィールドに対応します。

入力フィールドの名前の前に、オブジェクトの名前を小文字で付ける必要があることに注意してください。

たとえば、新しい投稿の追加を担当するビューには、Post。%のフィールドtitleおよびpostに対応するpost.titleおよびpost.postの入力フィールドがあります。 (t5)sそれぞれ:



完全なadd.ftlファイルはソースコードにあります。

フォームの送信にエラーがある場合、エラーメッセージが含まれ、ユーザーは同じadd()メソッドにリダイレクトされます。

if(validator.hasErrors()) {
    result.include("errors", validator.getErrors());
}
validator.onErrorRedirectTo(this).addForm();

7. 結論

結論として、VRaptorを一目で見て、基本的なMVC機能を実現する方法を確認しました。

documentationには、フレームワークと使用可能なプラグインに関する詳細が含まれています。

サンプルdatabase.sqlを含む完全なソースコードは、over on Githubで入手できます。