澤西 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 文件