JavaでのVRaptorの紹介

1. 概要

この記事では、http://www.vraptor.org/en/[VRaptor]を見てみましょう。これは、Javaコンテキストと依存性注入技術を利用した、わ​​かりやすいシンプルで直接的なJava MVC Webフレームワークです。

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

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

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

2 Mavenの依存関係と設定

起動して実行するための簡単な方法の1つは、https://bintray.com/caelum/VRaptor4/br.com.caelum.vraptor/[公式リポジトリ]から vraptor-blank-project-distribution をダウンロードすることです。

空白のプロジェクトは、本格的なWebアプリケーションになるために具体化できるスケルトンです。

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

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

  • src/

  • pom.xml

  • README.md

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

また、 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! “。

  • " java.lang.LinkageError:loader constraint violation"に直面した場合、 その後、 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の最新バージョンhttps://search.maven.org/classic/#search%7C1%7Cg%3A%22mysql%22%20AND%20a%3A%22mysql-connector-java%22[ mysql-connector-java 、およびhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.freemarker%22%20AND%20a%3A%22freemarker%22[freemarker__]アーティファクトはMavenにあります中央です。

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

3休止状態のサポート

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

プラグインはHibernateの SessionFactory beanを実行時にCDIを介して利用可能にします。

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

VRaptorは、プロデューサーと呼ばれる手法を使用して、オブジェクトをDI管理に使用できるようにします。このhttp://www.vraptor.org/en/docs/components/[here]に関する詳細情報。

4. VRaptorでWebルートを定義する

VRaptorでは、ルート定義は単に @ Controller アノテーション付きのJavaオブジェクトであるコントローラーに存在します - Springのように。

@ 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!」に置き換えられます。

より高度な使い方はhttp://www.vraptor.org/en/docs/view-and-ajax/[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の検証 を使用して最初に検証されます。

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

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

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

<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機能がどのように達成されることができるかを見ました。

documentation には、利用可能なプラグインだけでなくフレームワークについての詳細が含まれています。

サンプルの database.sql を含む完全なソースコードは、https://github.com/eugenp/tutorials/tree/master/vraptor[Githubで利用可能]です。

前の投稿:戻るユーザー用のカスタムログインページ
次の投稿:春のCORS