Next, we need to update web.xml
to specify
the servlets, listeners and filters needed for Restful
Objects. You'll find that some of these are shared with
HTML viewer.
To start with, we have the boilerplate DTD reference and
<displayname>
:t
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"[]> <web-app> <display-name>Restful Objects</display-name> ... </web-app>
There is one context parameter to add:
<web-app> ... <context-param> <param-name>javax.ws.rs.Application</param-name> <param-value>org.starobjects.restful.viewer.RestfulApplication</param-value> </context-param> ... </web-app>
This is used by RestEasy to defines the supported resources.
Next, filters.
<web-app> ... <filter> <filter-name>NakedObjectsSessionFilter</filter-name> <filter-class>org.nakedobjects.webapp.NakedObjectsSessionFilter</filter-class> <init-param> <param-name>authenticationSessionLookupStrategy</param-name> <param-value>org.starobjects.restful.viewer.authentication.AuthenticationSessionLookupStrategyExtended</param-value> </init-param> </filter> <filter> <filter-name>NakedObjectsStaticContentFilter</filter-name> <filter-class>org.nakedobjects.webapp.NakedObjectsSessionFilter</filter-class> </filter> ... </web-app>
The NakedObjectsSessionFilter
is used to
ensure that there is an authentication session in place. As you might
infer from its <init-param>
, the mechanism it
does to lookup this authentication session is pluggable. The one
specified will fake a session if running in EXPLORATION mode. But,
again, more on this in Section 5.4, “Authentication”.
The NakedObjectsStaticContentFilter
is
used to decorate any static resources (Javascript, CSS or images) so
that they are cached client-side.
The mappings for these two filters are:
<web-app> ... <filter-mapping> <filter-name>NakedObjectsSessionFilter</filter-name> <url-pattern>*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>NakedObjectsStaticContentFilter</filter-name> <url-pattern>*.js</url-pattern> </filter-mapping> <filter-mapping> <filter-name>NakedObjectsStaticContentFilter</filter-name> <url-pattern>*.css</url-pattern> </filter-mapping> <filter-mapping> <filter-name>NakedObjectsStaticContentFilter</filter-name> <url-pattern>*.png</url-pattern> </filter-mapping> <filter-mapping> <filter-name>NakedObjectsStaticContentFilter</filter-name> <url-pattern>*.jpg</url-pattern> </filter-mapping> <filter-mapping> <filter-name>NakedObjectsStaticContentFilter</filter-name> <url-pattern>*.gif</url-pattern> </filter-mapping> ... </web-app>
Two listeners are required, one for Restful Objects/Naked Objects and one for RestEasy. These both bootstrap the respective libraries:
<web-app> ... <listener> <listener-class>org.nakedobjects.webapp.NakedObjectsWebAppBootstrapper</listener-class> </listener> <listener> <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> </listener> ... </web-app>
Finally, we have the servlets:
<web-app> ... <servlet> <servlet-name>RestEasyDispatcher</servlet-name> <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> </servlet> <servlet> <servlet-name>ResourceServlet</servlet-name> <servlet-class>org.nakedobjects.webapp.servlets.ResourceServlet</servlet-class> </servlet> ... </web-app>
The main servlet is RestEasy's
HttpServletDispatcher
servlet, that handles all
inbound requests. In addition though we configure a Naked Objects'
ResourceServlet
to serve up Javascript, CSS and
images (the same as those decorated by the
NakedObjectsStaticContentFilter
).
The mappings for these servlets are:
<web-app> ... <servlet-mapping> <servlet-name>RestEasyDispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ResourceServlet</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ResourceServlet</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ResourceServlet</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ResourceServlet</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ResourceServlet</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> </web-app>