Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

As a result of the service.registerResources("/static", "/etc/www", null) code, all the files available under /etc/www will be exposed under /static (f.i. http://localhost:8080/static/001.jpgImage Removed will render the /etc/www/001.jpg). However, the example above can be simplistic in practice; the HttpContext object is the solution to customize the resource handling.

...

  • Deploy org.apache.felix.http.proxy jar file inside the web applicaiton (WEB-INF/lib).
  • In a startup listener (like ServletContextListener) set the BundleContext as a servlet context attribute (see example).
  • Define org.apache.felix.http.proxy.ProxyServlet inside your web.xml and register it to serve on all requests /* (see example).
  • Define org.apache.felix.http.proxy.ProxyListener as a <listener> in your web.xml to allow HTTP Session related events to be forwarded (see the section of Servlet API Event forwarding below and example).
  • Be sure to add javax.servlet;javax.servlet.http;version=2.5 to OSGi system packages ((org.osgi.framework.system.packages).
  • Deploy org.apache.felix.http.bridge (or org.apache.felix.http.bundle) inside the OSGi framework.

...

  • org.apache.felix.http.jettyEnabled - True to enable jetty as the http container. The default is false.
  • org.apache.felix.http.whiteboardEnabled - True to enable the whiteboard implementation. The default is false.

Examples

The Jetty based implementation supports the following Jetty specific configuration as of Http Service Jetty Bundle 2.4:

  • org.apache.felix.http.host - Host name or IP Address of the interface to listen on. The default is null causing Jetty to listen on all interfaces.
  • org.apache.felix.http.context_path - The Servlet Context Path to use for the Http Service. If this property is not configured it defaults to "/". This must be a valid path starting with a slash and not ending with a slash (unless it is the root context).
  • org.apache.felix.http.timeout - Connection timeout in milliseconds. The default is 60000 (60 seconds).
  • org.apache.felix.http.session.timeout - Allows for the specification of the Session life time as a number of minutes. This property serves the same purpose as the session-timeout element in a Web Application descriptor. The default is zero for no timeout at all.
  • org.mortbay.jetty.servlet.SessionCookie - Name of the cookie used to transport the Session ID. The default is JSESSIONID.
  • org.mortbay.jetty.servlet.SessionURL - Name of the request parameter to transport the Session ID. The default is jsessionid.
  • org.mortbay.jetty.servlet.SessionDomain - Domain to set on the session cookie. The default is null.
  • org.mortbay.jetty.servlet.SessionPath - The path to set on the session cookie. The default is the configured session context path (/).
  • org.mortbay.jetty.servlet.MaxAge - The maximum age value to set on the cookie. The default is -1.
  • org.apache.felix.http.jetty.headerBufferSize - Size of the buffer for request and response headers. Default is 16KB.
  • org.apache.felix.http.jetty.requestBufferSize - Size of the buffer for requests not fitting the header buffer. Default is 8KB.
  • org.apache.felix.http.jetty.responseBufferSize - Size of the buffer for responses. Default is 24KB.

Servlet API Events

The Servlet API defines a number of EventListener interfaces to catch Servlet API related events. As of HTTP Service 2.1.0 most events generated by the servlet container are forwarded to interested service. To be registered to receive events services must be registered with the respective EventListener interface:

Interface

Description

javax.servlet.ServletContextAttributeListener

Events on servlet context attribute addition, change and removal.

javax.servlet.ServletRequestAttributeListener

Events on request attribute addition, change and removal.

javax.servlet.ServletRequestListener

Events on request start and end.

javax.servlet.http.HttpSessionAttributeListener

Events on session attribute addition, change and removal. To receive such events in a bridged environment, the ProxyLister must be registered with the servlet container. See the Using the Servlet Bridge section above.

javax.servlet.http.HttpSessionListener

Events on session creation and destroyal. To receive such events in a bridged environment, the ProxyLister must be registered with the servlet container. See the Using the Servlet Bridge section above.

Of the defined EventListener interfaces in the Servlet API, the javax.servlet.ServletContextListener events are actually not support. For one thing they do not make much sense in an OSGi environment. On the other hand they are hard to capture and propagate. For example in a bridged environment the contextInitialized event may be sent before the framework and any of the contained bundles are actually ready to act. Likewise the contextDestroyed event may come to late.

Servlet Context Notes

ServletContext instances are managed internally by the Http Service implementation. For each HttpContext instance used to register one or more servlets and/or resources a corresponding ServletContext instance is created. These ServletContext instances is partly based on the single ServletContext instance received from the Servlet Container — either embedded Jetty or some external Servlet Container when using the Http Service Bridge — and partly based on the provided HttpContext instance:

Method(s)

Based on ...

getContextPath, getContext, getMajorVersion, getMinorVersion, getServerInfo

Servlet Containers ServletContext

getResourcePaths

Bundle.getEntryPaths of the bundle using the Http Service

getResource, getResourceAsStream

HttpContext.getResource

getMimeType

HttpContext.getMimeType

getRequestDispatcher, getNamedDispatcher, getInitParameter, getServlet, getRealPath

Always return null

getInitParameterNames, getServlets, getServletNames

Always returns empty Enumeration

getAttribute, getAttributeNames, setAttribute, removeAttribute

By default maintained for each ServletContext managed by the Http Service. If the org.apache.felix.http.shared_servlet_context_attributes framework property is set to true these methods are actually based on the ServletContext provided by the servlet container and thus attributes are shared amongst all ServlectContext instances, incl. the ServletContext provided by the servlet container

Examples

A set of simple examples illustrating the A set of simple examples illustrating the various features are available.

Maven Artifacts

...