1.概要

この記事では、 VRaptor を紹介します。これは、Javaコンテキストと依存性注入テクノロジーを利用し、理解しやすい、シンプルでわかりやすいJavaMVCWebフレームワークです。

Springと同じように– アノテーションに大きく依存し、Hibernateでうまく機能します。

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

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

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

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

空白のプロジェクトは、肉付けして本格的なWebアプリケーションとして選択できるスケルトンにすぎません。

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

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

  • src /
  • pom.xml
  • およびREADME.md

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

また、デフォルトの IndexController が付属しており、 index()という1つのメソッドしかありません。

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

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

成功した場合、私たちが訪問した場合 http:// localhost:8080、 ブラウザには「 できます!! VRaptor! 「。

「java.lang.LinkageError:ローダー制約違反」に直面した場合、pom.xmlの次の依存関係を変更する必要があります。

<dependency>
    <groupId>org.jboss.weld.servlet</groupId>
    <artifactId>weld-servlet-core</artifactId>
    <version>2.1.2.Final</version>
    <exclusions>
        <exclusion>
	    <groupId>org.jboss.spec.javax.el</groupId>
	    <artifactId>jboss-el-api_3.0_spec</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.jboss.weld</groupId>
    <artifactId>weld-core-impl</artifactId>
    <version>2.1.2.Final</version>
    <exclusions>
       <exclusion>
          <groupId>org.jboss.spec.javax.el</groupId>
  	  <artifactId>jboss-el-api_3.0_spec</artifactId>
       </exclusion>
    </exclusions>
</dependency>

原因は、compileスコープのweld-servlet-coreおよびweld-core-implに含まれているel-apiです。 これにより、依存関係の衝突が発生します。

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

<dependency>
    <groupId>br.com.caelum.vraptor</groupId>
    <artifactId>vraptor-freemarker</artifactId>
    <version>4.1.0-RC3</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.8-dmr</version>
</dependency>

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.27-incubating</version>
</dependency>

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

これで準備が整いました。簡単なブログサイトを作成しましょう。

3. Hibernateサポート

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

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

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

VRaptorは、プロデューサーと呼ばれる手法を使用して、オブジェクトをDI管理に使用できるようにします。 この詳細はこちら

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を使用します。

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

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>VRaptor Blank Project</title>
</head>
<body>
It works!! ${variable}
</body>
</html>

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

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

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

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

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

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 BeanValidationを使用して検証されます。

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

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

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

<input type="text" class="form-control" placeholder="Title" 
  id="title" name="post.title" required />

<textarea rows="10" class="form-control" placeholder="Post" 
  id="post" name="post.post" required></textarea>

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

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

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

7. 結論

結論として、VRaptorを一目で見て、基本的なMVC機能をどのように実現できるかを見てきました。

ドキュメントには、フレームワークと利用可能なプラグインに関する詳細が含まれています。

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