Getting a Jersey 2 webapp put together can be a challenge when you keep running into Jersey 1 configuration examples and tutorials from long ago. It gets even more complicated when you add jsps for views. There isn’t a single way to complete the configuration and setup, but this is one that “works for me”.
pom.xml:
<properties> <jerseyVer>2.25.1</jerseyVer> </properties>
... <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>${jerseyVer}</version> </dependency> <dependency> <groupId>org.glassfish.jersey.ext</groupId> <artifactId>jersey-mvc</artifactId> <version>${jerseyVer}</version> </dependency> <dependency> <groupId>org.glassfish.jersey.ext</groupId> <artifactId>jersey-mvc-jsp</artifactId> <version>${jerseyVer}</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-multipart</artifactId> <version>${jerseyVer}</version> </dependency>
web.xml:
<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>com.foo.test.jersey.CustomResourceConfig</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/v2/*</url-pattern> </servlet-mapping>
CustomResourceConfig.java:
import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.server.mvc.jsp.JspMvcFeature; public class CustomResourceConfig extends ResourceConfig { public CustomResourceConfig() { packages("com.foo.test"); //register(LoggingFilter.class); register(JspMvcFeature.class); register(MultiPartFeature.class); property(JspMvcFeature.TEMPLATE_BASE_PATH, "/WEB-INF/jsp"); } }
UiController:
import org.glassfish.jersey.server.mvc.Viewable; import javax.ws.rs.GET; import javax.ws.rs.Path; @Path("/") public class UiController { @GET public Viewable index() { return home(); } @GET @Path("home") public Viewable home() { return new Viewable("/home.jsp"); } @GET @Path("login") public Viewable login() { return new Viewable("/login.jsp"); } }
WEB-INF/jsp/home.jsp:
<h1>Hello World</h1>