泽西 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 支持的模板引擎之一。这里我们使用两个模型变量 hello
和 world
。预计这两个变量将位于用于呈现此模板的模型中。所以让我们添加控制器
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);
}
}
你可以在这里看到我们用 hello
和 world
属性填充模型。此外,控制器方法返回要使用的视图模板的名称,在本例中为 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);
}
}
这里有三件事:
-
我们使用
packages
告诉 Jersey 扫描com.example.controller
包中用@Path
注释的类,它可以注册它。在这种情况下,它注册我们的HomeController
。 -
我们正在设置框架的基本路径来解析模板。在这种情况下,我们告诉泽西岛在
WEB-INF/jsp
中查找模板。你可以在此导演中看到上面的index.jsp
示例。同样在控制器中我们只返回模板名称index
。这将用于查找模板,通过为配置基本路径添加前缀,并为隐含的.jsp
添加后缀 -
我们需要注册处理 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 文档