Author: fmeschbe
Date: Tue Jan 27 20:06:00 2009
New Revision: 738209

URL: http://svn.apache.org/viewvc?rev=738209&view=rev
Log:
SLING-736 Hardwire the SlingMainServlet to the root (/) and ensure
the proper setting of the pathInfo and the servletPath

Modified:
    
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java
    
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java

Modified: 
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java?rev=738209&r1=738208&r2=738209&view=diff
==============================================================================
--- 
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java
 (original)
+++ 
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java
 Tue Jan 27 20:06:00 2009
@@ -59,12 +59,20 @@
         SlingHttpServletRequest {
 
     private final RequestData requestData;
+    private final String pathInfo;
     private String responseContentType;
 
     public SlingHttpServletRequestImpl(RequestData requestData,
             HttpServletRequest servletRequest) {
         super(servletRequest);
         this.requestData = requestData;
+        
+        // prepare the pathInfo property
+        String pathInfo = servletRequest.getServletPath();
+        if (servletRequest.getPathInfo() != null) {
+            pathInfo = pathInfo.concat(servletRequest.getPathInfo());
+        }
+        this.pathInfo = pathInfo;
     }
 
     /**
@@ -273,6 +281,25 @@
     }
 
     /**
+     * Always returns the empty string since the actual servlet registered with
+     * the servlet container (the HttpService actually) is registered as if
+     * the servlet path is "/*".
+     */
+    @Override
+    public String getServletPath() {
+        return "";
+    }
+    
+    /**
+     * Returns the part of the request URL without the leading servlet context
+     * path.
+     */
+    @Override
+    public String getPathInfo() {
+        return pathInfo;
+    }
+    
+    /**
      * A <code>UserPrincipal</code> ...
      */
     private static class UserPrincipal implements Principal, Serializable {

Modified: 
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java?rev=738209&r1=738208&r2=738209&view=diff
==============================================================================
--- 
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
 (original)
+++ 
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
 Tue Jan 27 20:06:00 2009
@@ -87,7 +87,6 @@
  * The <code>SlingMainServlet</code> TODO
  * 
  * @scr.component immediate="true" metatype="no"
- * @scr.property name="sling.root" value="/" private="true"
  * @scr.property name="service.vendor" value="The Apache Software Foundation"
  * @scr.property name="service.description" value="Sling Servlet"
  * @scr.reference name="Filter" interface="javax.servlet.Filter"
@@ -100,6 +99,12 @@
     private static final Logger log = 
LoggerFactory.getLogger(SlingMainServlet.class);
 
     /**
+     * The registration path for the SlingMainServlet is hard wired to always
+     * be the root, aka "<code>/</code>" (value is "/").
+     */
+    private static final String SLING_ROOT = "/";
+
+    /**
      * The name of the product to report in the {...@link #getServerInfo()} 
method
      * (value is "ApacheSling").
      */
@@ -150,8 +155,6 @@
 
     private SlingFilterChainHelper innerFilterChain = new 
SlingFilterChainHelper();
 
-    private String slingRoot;
-
     private SlingAuthenticator slingAuthenticator;
 
     private static final String INCLUDE_COUNTER = 
"Sling.ScriptHelper.include.counter";
@@ -610,15 +613,6 @@
             configuration.put(String.valueOf(key), componentConfig.get(key));
         }
 
-        // get the web manager root path
-        Object wmr = configuration.get("sling.root");
-        this.slingRoot = (wmr instanceof String) ? (String) wmr : null;
-        if (this.slingRoot == null) {
-            this.slingRoot = "/";
-        } else if (!this.slingRoot.startsWith("/")) {
-            this.slingRoot = "/" + this.slingRoot;
-        }
-
         // ensure the servlet name
         if (!(configuration.get("servlet-name") instanceof String)) {
             configuration.put("servlet-name", PRODUCT_NAME + " "
@@ -633,8 +627,8 @@
         try {
             Dictionary<String, String> servletConfig = 
toStringConfig(configuration);
 
-            this.httpService.registerServlet(this.slingRoot, this,
-                servletConfig, this);
+            this.httpService.registerServlet(SLING_ROOT, this, servletConfig,
+                this);
 
             log.info("{} ready to serve requests", this.getServerInfo());
 
@@ -669,7 +663,7 @@
     protected void deactivate(ComponentContext componentContext) {
 
         // first of all, we have to unregister
-        httpService.unregister(this.slingRoot);
+        httpService.unregister(SLING_ROOT);
 
         destroyFilters(innerFilterChain);
         destroyFilters(requestFilterChain);


Reply via email to