Jersey 2 with MVC JSP Config


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>

 

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.