澤西 MVC Hello World

首先,建立一個新的 Maven webapp(如何執行此操作超出了此示例的範圍)。在你的 pom.xml 中,新增以下兩個依賴項

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.25.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-mvc-jsp</artifactId>
    <version>2.25.1</version>
</dependency>

同樣在 pom 中,新增我們將在開發期間執行應用程式的 jetty-maven-plugin

<build>
    <finalName>jersey-mvc-hello-world</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <inherited>true</inherited>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>9.3.8.v20160314</version>
        </plugin>
    </plugins>
</build>

現在我們可以建立控制器了。在任何 MVC 框架中,概念通常都是相同的。你有一個模板,並使用控制器填充將用於呈現模板的模型。這裡的術語渲染用於表示通過組合模板和模型來建立最終的 HTML 頁面。例如,使用此模板

src /主/ web 應用/ WEB-INF / JSP / index.jsp

<html>
    <head>
        <title>JSP Page</title>
    </head>
    <body>
        <h1>${it.hello} ${it.world}</h1>
    </body>
</html>

這是一個 JSP 檔案。JSP 只是 Jersey 支援的模板引擎之一。這裡我們使用兩個模型變數 helloworld。預計這兩個變數將位於用於呈現此模板的模型中。所以讓我們新增控制器

package com.example.controller;

import org.glassfish.jersey.server.mvc.Viewable;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.HashMap;
import java.util.Map;

@Path("/")
public class HomeController {

    @GET
    @Produces(MediaType.TEXT_HTML)
    public Viewable index() {
        Map<String, String> model = new HashMap<>();
        model.put("hello", "Hello");
        model.put("world", "World");
        return new Viewable("/index", model);
    }
}

你可以在這裡看到我們用 helloworld 屬性填充模型。此外,控制器方法返回要使用的檢視模板的名稱,在本例中為 index。有了這個,框架知道抓住索引模板,並使用提供的模型來呈現它。

現在我們只需要配置它。使用以下內容新增 ResourceConfig 子類

package com.example;

import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.mvc.jsp.JspMvcFeature;

public class AppConfig extends ResourceConfig {

    public AppConfig() {
        packages("com.example.controller");
        property(JspMvcFeature.TEMPLATE_BASE_PATH, "/WEB-INF/jsp");
        register(JspMvcFeature.class);
    }
}

這裡有三件事:

  1. 我們使用 packages 告訴 Jersey 掃描 com.example.controller 包中用 @Path 註釋的類,它可以註冊它。在這種情況下,它註冊我們的 HomeController

  2. 我們正在設定框架的基本路徑來解析模板。在這種情況下,我們告訴澤西島在 WEB-INF/jsp 中查詢模板。你可以在此導演中看到上面的 index.jsp 示例。同樣在控制器中我們只返回模板名稱 index。這將用於查詢模板,通過為配置基本路徑新增字首,併為隱含的 .jsp 新增字尾

  3. 我們需要註冊處理 JSP 呈現的功能。如前所述,JSP 不是 Jersey 支援的唯一渲染引擎。還有一些支援開箱即用。

我們需要做的最後一件事是在 web.xml 中配置 Jersey

<filter>
    <filter-name>Jersey</filter-name>
    <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.example.AppConfig</param-value>
    </init-param>
</filter>

<filter-mapping>
    <url-pattern>/*</url-pattern>
    <filter-name>Jersey</filter-name>
</filter-mapping>

在這裡,我們只是將 Jersey 配置為使用我們的 AppConfig 類。這裡要指出的一件非常重要的事情是使用 <filter> 而不是你通常會看到的東西。使用 JSP 作為模板引擎時,這是必需的。

現在我們可以執行它了。從命令列執行 mvn jetty:run。這將執行我們之前配置的 Maven Jetty 外掛。當你看到“已啟動 Jetty Server”時,伺服器已準備就緒。轉到瀏覽器網址 http://localhost:8080/。Voila,Hello World。請享用。

有關更多資訊,請參閱適用於 MVC 模板Jersey 文件