泽西 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 文档