Java 中 VRaptor 簡介

REST
Remote
1
11:59 AM · Dec 01 ,2025

1. 概述在本文中,我們將瞭解 VRaptor,一個簡單而直接的 Java MVC Web 框架,它利用 Java Contexts 和依賴注入技術,易於理解。

就像 Spring 一樣——它嚴重依賴註解,並且與 Hibernate 配合良好

它還包含一些有用的插件——例如國際化和單元測試。

所以,讓我們探索 VRaptor 的不同組件並創建一個示例項目。

2. Maven 依賴和設置

快速上手的一種方法是下載 vraptor-blank-project-distribution

官方倉庫

空白項目只是一個骨架,可以將其完善為完整的 Web 應用程序。

下載並解壓縮項目後,將目錄重命名為 vraptor

目錄應包含:

  • src/
  • pom.xml
  • 並且 README.md

該項目基於 Maven,並附帶 tomcat7 Maven 插件,該插件為應用程序提供 Servlet 容器。

它還附帶一個默認的 IndexController,其中只有一個方法 – index()

默認情況下,該方法渲染的視圖位於 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>

罪魁禍首是 el-api,它包含在 weld-servlet-coreweld-core-impl 中,具有 compile 範圍;這導致了依賴衝突。

我們需要添加以下依賴項,因此我們在 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-javafreemarker 可以在 Maven Central 中找到。

現在我們準備好了,讓我們創建一個簡單的博客網站。

3. Hibernate 支持

VRaptor 提供多種插件用於與數據庫交互,其中之一是 vraptor-hibernate,它與 Hibernate 4 配合使用。

該插件使 Hibernate 的 SessionFactory Bean 在運行時通過 CDI 可用。

有了該插件,我們需要一個標準的 Hibernate 配置文件——示例可以在倉庫中找到。

VRaptor 使用一種稱為 Producers 的技術,以使對象可供 DI 管理。 更多關於此處的詳情 在此處

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!” 替換。

更高級的用法在 這裏 文檔中説明。

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", "帖子已成功添加");
         result.redirectTo(IndexController.class).index();
    } else {
        result.include(
          "error", "創建帖子時出錯。請稍後再試");
        result.redirectTo(this).addForm();
    }
}

Post 對象在使用 Java Bean 驗證庫對其進行驗證,然後再使用 postDao.add() 將其持久化到數據庫。

Post 對象的字段自動從提交表單數據中填充,這些數據與視圖文件中的表單輸入字段相對應。

注意,輸入字段的名稱必須以對象名稱(小寫)進行前綴。

例如,負責添加新帖子的視圖具有以下輸入字段:post.titlepost.post,分別對應titlepost 字段,分別位於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功能是如何實現的。

文檔 包含有關框架以及可用插件的更多詳細信息。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.