Better handling of "application root"

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@668621 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java b/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
index 972375f..55f38fb 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
@@ -38,6 +38,7 @@
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.apache.commons.fileupload.servlet.ServletRequestContext;
+import org.apache.felix.webconsole.internal.Util;
 import org.apache.felix.webconsole.internal.servlet.OsgiManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -56,7 +57,7 @@
         + "<html>"
         + "<head>"
         + "<meta http-equiv=\"Content-Type\" content=\"text/html; utf-8\">"
-        + "<link rel=\"icon\" href=\"res/imgs/favicon.ico\">"
+        + "<link rel=\"icon\" href=\"{15}/res/imgs/favicon.ico\">"
         + "<title>{0} - {12}</title>"
         + "<script src=\"{15}/res/ui/admin.js\" language=\"JavaScript\"></script>"
         + "<script language=\"JavaScript\">"
@@ -67,6 +68,8 @@
         + "ABOUT_MEM=\"{7} KB\";"
         + "ABOUT_USED=\"{8} KB\";"
         + "ABOUT_FREE=\"{9} KB\";"
+        + "appRoot = \"{15}\";"
+        + "pluginRoot = appRoot + \"/{16}\";"
         + "</script>"
         + "<link href=\"{15}/res/ui/admin.css\" rel=\"stylesheet\" type=\"text/css\">"
         + "</head>"
@@ -171,15 +174,14 @@
         long totalMem = Runtime.getRuntime().totalMemory() / 1024;
         long usedMem = totalMem - freeMem;
 
-        String appRoot = request.getContextPath() + request.getServletPath();
-
         String header = MessageFormat.format( HEADER, new Object[]
             { adminTitle, adminVersion, System.getProperty( "java.runtime.version" ),
                 System.getProperty( "java.runtime.name" ), System.getProperty( "java.vm.name" ),
                 System.getProperty( "java.vm.version" ), System.getProperty( "java.vm.info" ), new Long( totalMem ),
                 new Long( usedMem ), new Long( freeMem ), vendorWeb, productName, getTitle(), productWeb, vendorName,
-                appRoot } );
+                ( String ) request.getAttribute( OsgiManager.ATTR_APP_ROOT ), getLabel() } );
         pw.println( header );
+
         return pw;
     }
 
@@ -195,7 +197,7 @@
         }
 
         boolean disabled = false;
-
+        String appRoot = ( String ) request.getAttribute( OsgiManager.ATTR_APP_ROOT );
         Map labelMap = ( Map ) request.getAttribute( OsgiManager.ATTR_LABEL_MAP );
         if ( labelMap != null )
         {
@@ -216,7 +218,7 @@
                 }
                 else
                 {
-                    map.put( labelMapEntry.getValue(), "<a href='" + labelMapEntry.getKey() + "'>"
+                    map.put( labelMapEntry.getValue(), "<a href='" + appRoot + "/" + labelMapEntry.getKey() + "'>"
                         + labelMapEntry.getValue() + "</a></li>" );
                 }
             }
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java
index 2aeaff9..7d194ba 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java
@@ -41,6 +41,7 @@
 import org.apache.felix.bundlerepository.R4Package;
 import org.apache.felix.webconsole.internal.BaseWebConsolePlugin;
 import org.apache.felix.webconsole.internal.Util;
+import org.apache.felix.webconsole.internal.servlet.OsgiManager;
 import org.json.JSONException;
 import org.json.JSONWriter;
 import org.osgi.framework.Bundle;
@@ -304,11 +305,10 @@
 
         PrintWriter pw = response.getWriter();
 
-        String appRoot = request.getContextPath() + request.getServletPath();
+        String appRoot = (String) request.getAttribute( OsgiManager.ATTR_APP_ROOT );
         pw.println( "<script src='" + appRoot + "/res/ui/bundles.js' language='JavaScript'></script>" );
 
         Util.startScript( pw );
-        pw.println( "var appRoot = '" + appRoot + "';" );
         pw.println( "var bundleListData = " );
         JSONWriter jw = new JSONWriter( pw );
         try