You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by bu...@apache.org on 2013/01/23 19:41:27 UTC

svn commit: r847678 - in /websites/staging/felix/trunk/content: ./ documentation/subprojects/apache-felix-http-service.html

Author: buildbot
Date: Wed Jan 23 18:41:27 2013
New Revision: 847678

Log:
Staging update by buildbot for felix

Modified:
    websites/staging/felix/trunk/content/   (props changed)
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-http-service.html

Propchange: websites/staging/felix/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Wed Jan 23 18:41:27 2013
@@ -1 +1 @@
-1437613
+1437617

Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-http-service.html
==============================================================================
--- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-http-service.html (original)
+++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-http-service.html Wed Jan 23 18:41:27 2013
@@ -67,11 +67,6 @@
       </div>
 
       
-      <div class="tip">
-           This page is a translated version of <a href="/site/apache-felix-http-service.html" target="felix_cwiki">/site/apache-felix-http-service.html</a>. In case of
-           doubt you might want to refer to the old page.
-      </div>
-      
       
       <h1>Apache Felix HTTP Service</h1>
       <div class="toc">
@@ -105,7 +100,7 @@
 <li>org.apache.felix.http.bundle - All in one bundle that includes all of the above.</li>
 <li>org.apache.felix.http.proxy - Proxy that is needed inside WAR when deployed inside an application server. </li>
 </ul>
-<p>So, in most cases you could just use <em>org.apache.felix.http.bundle</em> and forget about all the other ones.</p>
+<p>So, in most cases you could just use <strong>org.apache.felix.http.bundle</strong> and forget about all the other ones.</p>
 <h2 id="using-the-httpservice">Using the HttpService</h2>
 <p>The main components provided by the Apache Felix HTTP Service bundle are:</p>
 <ul>
@@ -113,30 +108,30 @@
 <li><code>HttpContext</code> - Additional (optional) component to handle authentication, resource and mime type mappings</li>
 </ul>
 <p>Servlets created for the OSGi HTTP service don't need to have any reference to the OSGi specification (they only need to conform to the Servlet specification), like in the example:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">HelloWorld</span> <span class="n">extends</span> <span class="n">HttpServlet</span>
-<span class="p">{</span>
-  <span class="nv">@Override</span>
-  <span class="n">protected</span> <span class="n">void</span> <span class="n">doGet</span><span class="p">(</span><span class="n">HttpServletRequest</span> <span class="n">req</span><span class="p">,</span> <span class="n">HttpServletResponse</span> <span class="n">resp</span><span class="p">)</span> <span class="n">throws</span> <span class="n">ServletException</span><span class="p">,</span> <span class="n">IOException</span> 
-  <span class="p">{</span>
-    <span class="n">resp</span><span class="o">.</span><span class="n">getWriter</span><span class="p">()</span><span class="o">.</span><span class="nb">write</span><span class="p">(</span><span class="s">&quot;Hello World&quot;</span><span class="p">);</span>      
-  <span class="p">}</span> 
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">HelloWorld</span> <span class="kd">extends</span> <span class="n">HttpServlet</span>
+<span class="o">{</span>
+  <span class="nd">@Override</span>
+  <span class="kd">protected</span> <span class="kt">void</span> <span class="nf">doGet</span><span class="o">(</span><span class="n">HttpServletRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpServletResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">ServletException</span><span class="o">,</span> <span class="n">IOException</span> 
+  <span class="o">{</span>
+    <span class="n">resp</span><span class="o">.</span><span class="na">getWriter</span><span class="o">().</span><span class="na">write</span><span class="o">(</span><span class="s">&quot;Hello World&quot;</span><span class="o">);</span>      
+  <span class="o">}</span> 
+<span class="o">}</span>
 </pre></div>
 
 
 <p>To register a Servlet and map it to a URI, you need to retrieve the <code>HttpService</code> and call its <code>registerServlet</code> method:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">Activator</span> <span class="n">implements</span> <span class="n">BundleActivator</span>
-<span class="p">{</span>
-  <span class="n">public</span> <span class="n">void</span> <span class="n">start</span><span class="p">(</span><span class="n">BundleContext</span> <span class="n">context</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> 
-  <span class="p">{</span>
-    <span class="n">ServiceReference</span> <span class="n">sRef</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="n">getServiceReference</span><span class="p">(</span><span class="n">HttpService</span><span class="o">.</span><span class="n">class</span><span class="o">.</span><span class="n">getName</span><span class="p">());</span>
-    <span class="k">if</span> <span class="p">(</span><span class="n">sRef</span> <span class="o">!=</span> <span class="n">null</span><span class="p">)</span>
-    <span class="p">{</span>
-      <span class="n">HttpService</span> <span class="n">service</span> <span class="o">=</span> <span class="p">(</span><span class="n">HttpService</span><span class="p">)</span> <span class="n">context</span><span class="o">.</span><span class="n">getService</span><span class="p">(</span><span class="n">sRef</span><span class="p">);</span>
-      <span class="n">service</span><span class="o">.</span><span class="n">registerServlet</span><span class="p">(</span><span class="s">&quot;/hello&quot;</span><span class="p">,</span> <span class="k">new</span> <span class="n">HelloWorld</span><span class="p">(),</span> <span class="n">null</span><span class="p">,</span> <span class="n">null</span><span class="p">);</span>
-    <span class="p">}</span>
-  <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Activator</span> <span class="kd">implements</span> <span class="n">BundleActivator</span>
+<span class="o">{</span>
+  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">start</span><span class="o">(</span><span class="n">BundleContext</span> <span class="n">context</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> 
+  <span class="o">{</span>
+    <span class="n">ServiceReference</span> <span class="n">sRef</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getServiceReference</span><span class="o">(</span><span class="n">HttpService</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">());</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">sRef</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span>
+    <span class="o">{</span>
+      <span class="n">HttpService</span> <span class="n">service</span> <span class="o">=</span> <span class="o">(</span><span class="n">HttpService</span><span class="o">)</span> <span class="n">context</span><span class="o">.</span><span class="na">getService</span><span class="o">(</span><span class="n">sRef</span><span class="o">);</span>
+      <span class="n">service</span><span class="o">.</span><span class="na">registerServlet</span><span class="o">(</span><span class="s">&quot;/hello&quot;</span><span class="o">,</span> <span class="k">new</span> <span class="n">HelloWorld</span><span class="o">(),</span> <span class="kc">null</span><span class="o">,</span> <span class="kc">null</span><span class="o">);</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
@@ -151,109 +146,113 @@
 <p>The Servlet alias must begin with a slash and must not end with a slash. When a request is processed, the HTTP Service will try to exact match the requested URI with a registered Servlet. If not existent, it will remove the last '/' in the URI and everything that follows, and try to match the remaining part, and so on.</p>
 <p>An additional configuration Map can be optionally specified; if present, all the parameters contained will be copied in the ServletContext object. </p>
 <p>Finally, an HttpContext object can be optionally specified to handle authentication, mime type and resource mapping. The <code>HttpContext</code> interface is quite simple:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">interface</span> <span class="n">HttpContext</span>
-<span class="p">{</span>
-  <span class="n">String</span> <span class="n">getMimeType</span><span class="p">(</span><span class="n">java</span><span class="o">.</span><span class="n">lang</span><span class="o">.</span><span class="n">String</span> <span class="n">name</span><span class="p">);</span> <span class="sr">//</span><span class="n">Returns</span> <span class="n">the</span> <span class="n">mime</span> <span class="n">type</span> <span class="n">of</span> <span class="n">the</span> <span class="n">specified</span> <span class="n">resource</span>
-  <span class="n">URL</span> <span class="n">getResource</span><span class="p">(</span><span class="n">java</span><span class="o">.</span><span class="n">lang</span><span class="o">.</span><span class="n">String</span> <span class="n">name</span><span class="p">);</span>   <span class="sr">//</span><span class="n">Returns</span> <span class="n">the</span> <span class="n">URL</span> <span class="n">to</span> <span class="n">retrieve</span> <span class="n">the</span> <span class="n">specified</span> <span class="n">resource</span>
-  <span class="n">boolean</span> <span class="n">handleSecurity</span><span class="p">(</span><span class="n">HttpServletRequest</span> <span class="n">request</span><span class="p">,</span> <span class="n">HttpServletResponse</span> <span class="n">response</span><span class="p">);</span> <span class="sr">//</span><span class="n">Manages</span> <span class="n">security</span> <span class="k">for</span> <span class="n">the</span> <span class="n">specified</span> <span class="n">request</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">HttpContext</span>
+<span class="o">{</span>
+  <span class="n">String</span> <span class="nf">getMimeType</span><span class="o">(</span><span class="n">java</span><span class="o">.</span><span class="na">lang</span><span class="o">.</span><span class="na">String</span> <span class="n">name</span><span class="o">);</span> <span class="c1">//Returns the mime type of the specified resource</span>
+  <span class="n">URL</span> <span class="nf">getResource</span><span class="o">(</span><span class="n">java</span><span class="o">.</span><span class="na">lang</span><span class="o">.</span><span class="na">String</span> <span class="n">name</span><span class="o">);</span>   <span class="c1">//Returns the URL to retrieve the specified resource</span>
+  <span class="kt">boolean</span> <span class="nf">handleSecurity</span><span class="o">(</span><span class="n">HttpServletRequest</span> <span class="n">request</span><span class="o">,</span> <span class="n">HttpServletResponse</span> <span class="n">response</span><span class="o">);</span> <span class="c1">//Manages security for the specified request</span>
+<span class="o">}</span>
 </pre></div>
 
 
 <p>The use of a custom HttpContext is typical when you want to serve static contents with the HTTP Service. Let's see first the simplest example of resource registration (without <code>HttpContext</code>)</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">Activator</span> <span class="n">implements</span> <span class="n">BundleActivator</span>
-<span class="p">{</span>
-  <span class="n">public</span> <span class="n">void</span> <span class="n">start</span><span class="p">(</span><span class="n">BundleContext</span> <span class="n">context</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> 
-  <span class="p">{</span>
-    <span class="n">ServiceReference</span> <span class="n">sRef</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="n">getServiceReference</span><span class="p">(</span><span class="n">HttpService</span><span class="o">.</span><span class="n">class</span><span class="o">.</span><span class="n">getName</span><span class="p">());</span>
-    <span class="k">if</span> <span class="p">(</span><span class="n">sRef</span> <span class="o">!=</span> <span class="n">null</span><span class="p">)</span>
-    <span class="p">{</span>
-      <span class="n">HttpService</span> <span class="n">service</span> <span class="o">=</span> <span class="p">(</span><span class="n">HttpService</span><span class="p">)</span> <span class="n">context</span><span class="o">.</span><span class="n">getService</span><span class="p">(</span><span class="n">sRef</span><span class="p">);</span>
-      <span class="n">service</span><span class="o">.</span><span class="n">registerResources</span><span class="p">(</span><span class="s">&quot;/static&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/www&quot;</span><span class="p">,</span> <span class="n">null</span><span class="p">);</span>
-    <span class="p">}</span>
-  <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Activator</span> <span class="kd">implements</span> <span class="n">BundleActivator</span>
+<span class="o">{</span>
+  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">start</span><span class="o">(</span><span class="n">BundleContext</span> <span class="n">context</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> 
+  <span class="o">{</span>
+    <span class="n">ServiceReference</span> <span class="n">sRef</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getServiceReference</span><span class="o">(</span><span class="n">HttpService</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">());</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">sRef</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span>
+    <span class="o">{</span>
+      <span class="n">HttpService</span> <span class="n">service</span> <span class="o">=</span> <span class="o">(</span><span class="n">HttpService</span><span class="o">)</span> <span class="n">context</span><span class="o">.</span><span class="na">getService</span><span class="o">(</span><span class="n">sRef</span><span class="o">);</span>
+      <span class="n">service</span><span class="o">.</span><span class="na">registerResources</span><span class="o">(</span><span class="s">&quot;/static&quot;</span><span class="o">,</span> <span class="s">&quot;/etc/www&quot;</span><span class="o">,</span> <span class="kc">null</span><span class="o">);</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
-<p>As a result of the <code>service.registerResources("/static", "/etc/www", null)</code> code, all the files available under <code>/etc/www</code> will be exposed under <code>/static</code> (f.i.  http://localhost:8080/static/001.jpg 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.</p>
-<p>For instance, you can set the define more complex URI to file mappings overriding the <code>HttpContext.getResource</code> method, or the correct mime type implementing the method <code>HttpContext.getMimeType</code> like in the example:</p>
-<div class="codehilite"><pre><span class="sr">//</span><span class="o">....</span>
-
-<span class="n">public</span> <span class="n">String</span> <span class="n">getMimeType</span><span class="p">(</span><span class="n">String</span> <span class="n">file</span><span class="p">)</span> 
-<span class="p">{</span>  
-  <span class="k">if</span> <span class="p">(</span><span class="n">file</span><span class="o">.</span><span class="n">endsWith</span><span class="p">(</span><span class="s">&quot;.jpg&quot;</span><span class="p">)</span>
-  <span class="p">{</span>  
-    <span class="k">return</span> <span class="s">&quot;image/jpeg&quot;</span><span class="p">;</span>  
-  <span class="p">}</span> 
-  <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">file</span><span class="o">.</span><span class="n">endsWith</span><span class="p">(</span><span class="s">&quot;.png&quot;</span><span class="p">))</span> 
-  <span class="p">{</span>  
-    <span class="k">return</span> <span class="s">&quot;image/png&quot;</span><span class="p">;</span>  
-  <span class="p">}</span> 
+<p>As a result of the <code>service.registerResources("/static", "/etc/www", null)</code> code, all the files
+available under <code>/etc/www</code> will be exposed under <code>/static</code> (e.g. <code>http://localhost:8080/static/001.jpg</code>
+will render the <code>/etc/www/001.jpg</code>). However, the example above can be simplistic in practice; the
+<code>HttpContext</code> object is the solution to customize the resource handling.</p>
+<p>For instance, you can set the define more complex URI to file mappings overriding the
+<code>HttpContext.getResource</code> method, or the correct mime type implementing the method <code>HttpContext.getMimeType</code> like in the example:</p>
+<div class="codehilite"><pre><span class="c1">//....</span>
+
+<span class="kd">public</span> <span class="n">String</span> <span class="nf">getMimeType</span><span class="o">(</span><span class="n">String</span> <span class="n">file</span><span class="o">)</span> 
+<span class="o">{</span>  
+  <span class="k">if</span> <span class="o">(</span><span class="n">file</span><span class="o">.</span><span class="na">endsWith</span><span class="o">(</span><span class="s">&quot;.jpg&quot;</span><span class="o">)</span>
+  <span class="o">{</span>  
+    <span class="k">return</span> <span class="s">&quot;image/jpeg&quot;</span><span class="o">;</span>  
+  <span class="o">}</span> 
+  <span class="k">else</span> <span class="nf">if</span> <span class="o">(</span><span class="n">file</span><span class="o">.</span><span class="na">endsWith</span><span class="o">(</span><span class="s">&quot;.png&quot;</span><span class="o">))</span> 
+  <span class="o">{</span>  
+    <span class="k">return</span> <span class="s">&quot;image/png&quot;</span><span class="o">;</span>  
+  <span class="o">}</span> 
   <span class="k">else</span> 
-  <span class="p">{</span>  
-    <span class="k">return</span> <span class="s">&quot;text/html&quot;</span><span class="p">;</span>  
-  <span class="p">}</span>  
-<span class="p">}</span>
+  <span class="o">{</span>  
+    <span class="k">return</span> <span class="s">&quot;text/html&quot;</span><span class="o">;</span>  
+  <span class="o">}</span>  
+<span class="o">}</span>
 
-<span class="sr">//</span><span class="o">....</span>
+<span class="c1">//....</span>
 </pre></div>
 
 
 <p>If you implement a customized HttpContext object, don't forget to specify it as third parameter of the <code>registerResources</code> method invocation:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">Activator</span> <span class="n">implements</span> <span class="n">BundleActivator</span>
-<span class="p">{</span>
-  <span class="n">public</span> <span class="n">void</span> <span class="n">start</span><span class="p">(</span><span class="n">BundleContext</span> <span class="n">context</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> 
-  <span class="p">{</span>
-    <span class="n">ServiceReference</span> <span class="n">sRef</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="n">getServiceReference</span><span class="p">(</span><span class="n">HttpService</span><span class="o">.</span><span class="n">class</span><span class="o">.</span><span class="n">getName</span><span class="p">());</span>
-    <span class="k">if</span> <span class="p">(</span><span class="n">sRef</span> <span class="o">!=</span> <span class="n">null</span><span class="p">)</span>
-    <span class="p">{</span>
-      <span class="n">HttpService</span> <span class="n">service</span> <span class="o">=</span> <span class="p">(</span><span class="n">HttpService</span><span class="p">)</span> <span class="n">context</span><span class="o">.</span><span class="n">getService</span><span class="p">(</span><span class="n">sRef</span><span class="p">);</span>
-      <span class="n">HttpContext</span> <span class="n">myHttpContext</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MyHttpContext</span><span class="p">());</span>
-      <span class="n">service</span><span class="o">.</span><span class="n">registerResources</span><span class="p">(</span><span class="s">&quot;/static&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/www&quot;</span><span class="p">,</span> <span class="n">myHttpContext</span><span class="p">);</span>
-    <span class="p">}</span>
-  <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Activator</span> <span class="kd">implements</span> <span class="n">BundleActivator</span>
+<span class="o">{</span>
+  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">start</span><span class="o">(</span><span class="n">BundleContext</span> <span class="n">context</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> 
+  <span class="o">{</span>
+    <span class="n">ServiceReference</span> <span class="n">sRef</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getServiceReference</span><span class="o">(</span><span class="n">HttpService</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">());</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">sRef</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span>
+    <span class="o">{</span>
+      <span class="n">HttpService</span> <span class="n">service</span> <span class="o">=</span> <span class="o">(</span><span class="n">HttpService</span><span class="o">)</span> <span class="n">context</span><span class="o">.</span><span class="na">getService</span><span class="o">(</span><span class="n">sRef</span><span class="o">);</span>
+      <span class="n">HttpContext</span> <span class="n">myHttpContext</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MyHttpContext</span><span class="o">());</span>
+      <span class="n">service</span><span class="o">.</span><span class="na">registerResources</span><span class="o">(</span><span class="s">&quot;/static&quot;</span><span class="o">,</span> <span class="s">&quot;/etc/www&quot;</span><span class="o">,</span> <span class="n">myHttpContext</span><span class="o">);</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
 <h2 id="using-the-exthttpservice">Using the ExtHttpService</h2>
 <p>To be able to register filters, it is possible to get hold of <code>org.apache.felix.http.api.ExtHttpService</code>. This is exported by both jetty and the bridged implementation. Let's see the simplest example of a filter registration.</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">Activator</span> <span class="n">implements</span> <span class="n">BundleActivator</span>
-<span class="p">{</span>
-  <span class="n">public</span> <span class="n">void</span> <span class="n">start</span><span class="p">(</span><span class="n">BundleContext</span> <span class="n">context</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> 
-  <span class="p">{</span>
-    <span class="n">ServiceReference</span> <span class="n">sRef</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="n">getServiceReference</span><span class="p">(</span><span class="n">ExtHttpService</span><span class="o">.</span><span class="n">class</span><span class="o">.</span><span class="n">getName</span><span class="p">());</span>
-    <span class="k">if</span> <span class="p">(</span><span class="n">sRef</span> <span class="o">!=</span> <span class="n">null</span><span class="p">)</span>
-    <span class="p">{</span>
-      <span class="n">ExtHttpService</span> <span class="n">service</span> <span class="o">=</span> <span class="p">(</span><span class="n">ExtHttpService</span><span class="p">)</span> <span class="n">context</span><span class="o">.</span><span class="n">getService</span><span class="p">(</span><span class="n">sRef</span><span class="p">);</span>
-      <span class="n">service</span><span class="o">.</span><span class="n">registerFilter</span><span class="p">(</span><span class="k">new</span> <span class="n">HelloWorldFilter</span><span class="p">(),</span> <span class="s">&quot;/hello/.*&quot;</span><span class="p">,</span> <span class="n">null</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">null</span><span class="p">);</span>
-    <span class="p">}</span>
-  <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Activator</span> <span class="kd">implements</span> <span class="n">BundleActivator</span>
+<span class="o">{</span>
+  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">start</span><span class="o">(</span><span class="n">BundleContext</span> <span class="n">context</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> 
+  <span class="o">{</span>
+    <span class="n">ServiceReference</span> <span class="n">sRef</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getServiceReference</span><span class="o">(</span><span class="n">ExtHttpService</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">());</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">sRef</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span>
+    <span class="o">{</span>
+      <span class="n">ExtHttpService</span> <span class="n">service</span> <span class="o">=</span> <span class="o">(</span><span class="n">ExtHttpService</span><span class="o">)</span> <span class="n">context</span><span class="o">.</span><span class="na">getService</span><span class="o">(</span><span class="n">sRef</span><span class="o">);</span>
+      <span class="n">service</span><span class="o">.</span><span class="na">registerFilter</span><span class="o">(</span><span class="k">new</span> <span class="n">HelloWorldFilter</span><span class="o">(),</span> <span class="s">&quot;/hello/.*&quot;</span><span class="o">,</span> <span class="kc">null</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="kc">null</span><span class="o">);</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
 <h2 id="using-the-whiteboard">Using the Whiteboard</h2>
 <p>The whiteboard implementation simplifies the task of registering servlets and filters. A servlet (or filter) can be registered by exporting it as a service. The whiteboard implementation detects all <code>javax.servlet.Servlet</code>, <code>javax.servlet.Filter</code> and <code>org.osgi.service.http.HttpContext</code> services with the right service properties. Let us illustrate the usage by registering a servlet:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">Activator</span> <span class="n">implements</span> <span class="n">BundleActivator</span>
-<span class="p">{</span>
-  <span class="n">private</span> <span class="n">ServiceRegistration</span> <span class="n">registration</span><span class="p">;</span>
-
-  <span class="n">public</span> <span class="n">void</span> <span class="n">start</span><span class="p">(</span><span class="n">BundleContext</span> <span class="n">context</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> 
-  <span class="p">{</span>
-    <span class="n">Hashtable</span> <span class="n">props</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Hashtable</span><span class="p">();</span>
-    <span class="n">props</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s">&quot;alias&quot;</span><span class="p">,</span> <span class="s">&quot;/hello&quot;</span><span class="p">);</span>
-    <span class="n">props</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s">&quot;init.message&quot;</span><span class="p">,</span> <span class="s">&quot;Hello World!&quot;</span><span class="p">);</span>
-
-    <span class="n">this</span><span class="o">.</span><span class="n">registration</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="n">registerService</span><span class="p">(</span><span class="n">Servlet</span><span class="o">.</span><span class="n">class</span><span class="o">.</span><span class="n">getName</span><span class="p">(),</span> <span class="k">new</span> <span class="n">HelloWorldServlet</span><span class="p">(),</span> <span class="n">props</span><span class="p">);</span>
-  <span class="p">}</span>
-
-  <span class="n">public</span> <span class="n">void</span> <span class="n">stop</span><span class="p">(</span><span class="n">BundleContext</span> <span class="n">context</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> 
-  <span class="p">{</span>
-    <span class="n">this</span><span class="o">.</span><span class="n">registration</span><span class="o">.</span><span class="n">unregister</span><span class="p">();</span>
-  <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Activator</span> <span class="kd">implements</span> <span class="n">BundleActivator</span>
+<span class="o">{</span>
+  <span class="kd">private</span> <span class="n">ServiceRegistration</span> <span class="n">registration</span><span class="o">;</span>
+
+  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">start</span><span class="o">(</span><span class="n">BundleContext</span> <span class="n">context</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> 
+  <span class="o">{</span>
+    <span class="n">Hashtable</span> <span class="n">props</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Hashtable</span><span class="o">();</span>
+    <span class="n">props</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;alias&quot;</span><span class="o">,</span> <span class="s">&quot;/hello&quot;</span><span class="o">);</span>
+    <span class="n">props</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;init.message&quot;</span><span class="o">,</span> <span class="s">&quot;Hello World!&quot;</span><span class="o">);</span>
+
+    <span class="k">this</span><span class="o">.</span><span class="na">registration</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">registerService</span><span class="o">(</span><span class="n">Servlet</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">(),</span> <span class="k">new</span> <span class="n">HelloWorldServlet</span><span class="o">(),</span> <span class="n">props</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">stop</span><span class="o">(</span><span class="n">BundleContext</span> <span class="n">context</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> 
+  <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">registration</span><span class="o">.</span><span class="na">unregister</span><span class="o">();</span>
+  <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
@@ -275,13 +274,14 @@
 <li><code>contextId</code> - Id of context to be referenced by a servlet or filter service.</li>
 </ul>
 <h2 id="using-the-servlet-bridge">Using the Servlet Bridge</h2>
-<p>The servlet bridge is used if you want to use the Http service inside a WAR deployed on a 3rd part applicaiton server. A little setup is needed for this to work:</p>
+<p>The servlet bridge is used if you want to use the HTTP service inside a WAR deployed on a 3rd part
+applicaiton server. A little setup is needed for this to work:</p>
 <ul>
-<li>Deploy <code>org.apache.felix.http.proxy</code> jar file inside the web applicaiton (WEB-INF/lib). </li>
-<li>In a startup listener (like ServletContextListener) set the BundleContext as a servlet context attribute (see <a href="http://svn.apache.org/repos/asf/felix/trunk/http/samples/bridge/src/main/java/org/apache/felix/http/samples/bridge/StartupListener.java">example</a>).</li>
+<li>Deploy <code>org.apache.felix.http.proxy</code> jar file inside the web applicaiton (<code>WEB-INF/lib</code>). </li>
+<li>In a startup listener (like <code>ServletContextListener</code>) set the BundleContext as a servlet context attribute (see <a href="http://svn.apache.org/repos/asf/felix/trunk/http/samples/bridge/src/main/java/org/apache/felix/http/samples/bridge/StartupListener.java">example</a>).</li>
 <li>Define <code>org.apache.felix.http.proxy.ProxyServlet</code> inside your <code>web.xml</code> and register it to serve on all requests <code>/*</code> (see <a href="http://svn.apache.org/repos/asf/felix/trunk/http/samples/bridge/src/main/webapp/WEB-INF/web.xml">example</a>).</li>
 <li>Define <code>org.apache.felix.http.proxy.ProxyListener</code> as a <code>&lt;listener&gt;</code> in your <code>web.xml</code> to allow HTTP Session related events to be forwarded (see the section of Servlet API Event forwarding below and <a href="http://svn.apache.org/repos/asf/felix/trunk/http/samples/bridge/src/main/webapp/WEB-INF/web.xml">example</a>).</li>
-<li>Be sure to add <code>javax.servlet;javax.servlet.http;version=2.5</code> to OSGi system packages ((<code>org.osgi.framework.system.packages</code>).</li>
+<li>Be sure to add <code>javax.servlet;javax.servlet.http;version=2.5</code> to OSGi system packages (<code>org.osgi.framework.system.packages</code>).</li>
 <li>Deploy <code>org.apache.felix.http.bridge</code> (or <code>org.apache.felix.http.bundle</code>) inside the OSGi framework.</li>
 </ul>
 <p>A detailed example can be found <a href="http://svn.apache.org/repos/asf/felix/trunk/http/samples/bridge">here</a>.</p>
@@ -440,7 +440,7 @@
 <span class="nt">&lt;/dependency&gt;</span>
 </pre></div>
       <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;">
-        Rev. 1437613 by fmeschbe on Wed, 23 Jan 2013 18:32:20 +0000
+        Rev. 1437617 by fmeschbe on Wed, 23 Jan 2013 18:41:19 +0000
       </div>
       <div class="trademarkFooter"> 
         Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project