Bookstore Example

This example demonstrates how to connect JSP pages to resources. The example is copied from the Bookstore example presented by the Stapler project that provides a way to staple URIs to Java classes to build RESTful Web applications such as Hudson.

A bookstore Web application is presented that is capable of presenting books, CDs and tracks of CDs.

Contents

The example consists of four web resources implemented by the following:

com.sun.jersey.samples.bookstore.resources.Bookstore
The bookstore resource that returns a list of items, either CDs or Books. The resource dynamically references a Book or CD resource using the getItem method that is annotated with Path. The Book and CD resource both inherit from the Item class and thus the resources can be managed ploymorphically.
com.sun.jersey.samples.bookstore.resources.Book
The book resource that has a title and an author.
com.sun.jersey.samples.bookstore.resources.CD
The CD resource that has a title, author and a list of tracks. The resource dynamically references the Track resource using the getTrack method that is annotated with Path.
com.sun.jersey.samples.bookstore.resources.Track
The Tracks resource that has a name and the length of the track.

The mapping of the URI path space is presented in the following table:

URI path Resource class HTTP methods JSP page
/ Bookstore GET /com/sun/jersey/samples/bookstore/resources/Bookstore/index.jsp
/count Bookstore GET /com/sun/jersey/samples/bookstore/resources/Bookstore/count.jsp
/time Bookstore GET /com/sun/jersey/samples/bookstore/resources/Bookstore/time.jsp
/items/{itemid} Book, CD GET /com/sun/jersey/samples/bookstore/resources/Book/index.jsp,
/com/sun/jersey/samples/bookstore/resources/CD/index.jsp
/items/{itemid}/tracks/{num} Track GET /com/sun/jersey/samples/bookstore/resources/Track/index.jsp

Running the Example

Bookmark example runs on Glassfish V3 application server (http://glassfish.dev.java.net), which can be run as an embedded container.

Run the example as follows:

Build and deploy the project by executing maven 2 from the project directory

mvn glassfish:run

Goto the URL:

http://localhost:8080/Bookstore/

How it works

This example shows how to support polymorphism of resources and JSP pages. Hence it is possible to add another resource, such as a DVD resource with associated JSP pages, which extends Item without having to change the logic of Bookstore or the existing JSP pages.

JSP pages are associated with resource classes. Such JSP pages are resolved by converting the fully qualified class name of the resource class into a path and appending last path segment of the request URI path to that path. For example, when a GET is performed on the URI path "/" then the path to the JSP page is "/com/sun/jersey/samples/bookstore/resources/Bookstore/", and in this case since the last path segment is empty "index.jsp" is appended to the path. Then the request us forwarded to the JSP page at that path. Similarly when a GET is performed on the URI path "/count" then the path to the JSP page is "/com/sun/jersey/samples/bookstore/resources/Bookstore/count.jsp".

The JSP variable "it" is set to the instance of Bookstore so that the index.jsp, or count.jsp, has access to the Bookstore instance as a Java bean.

If a resource class inherits from another resource class then it will automatically inherit the JSPs from the super class.

A JSP page may also include JSPs using the inheritance mechanism, for example the index.jsp page associated with the Book resource class includes a footer.jsp page whoose location is specified by the super class, Item.