You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ni...@apache.org on 2004/07/26 13:31:06 UTC

svn commit: rev 30712 - in avalon/trunk/planet/facilities/http: impl/src/etc impl/src/main/org/apache/avalon/http/impl spi/src/main/org/apache/avalon/http

Author: niclas
Date: Mon Jul 26 04:31:06 2004
New Revision: 30712

Added:
   avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/SystemMimeTypes.java   (contents, props changed)
   avalon/trunk/planet/facilities/http/spi/src/main/org/apache/avalon/http/MimeTypes.java   (contents, props changed)
Modified:
   avalon/trunk/planet/facilities/http/impl/src/etc/default-server.xml
   avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/HttpContextImpl.java
   avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/NcsaRequestLog.java
   avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/ResourceHandler.java
Log:
Static content is finally served.

Modified: avalon/trunk/planet/facilities/http/impl/src/etc/default-server.xml
==============================================================================
--- avalon/trunk/planet/facilities/http/impl/src/etc/default-server.xml	(original)
+++ avalon/trunk/planet/facilities/http/impl/src/etc/default-server.xml	Mon Jul 26 04:31:06 2004
@@ -28,11 +28,15 @@
     
   <component name="server" class="org.apache.avalon.http.impl.HttpServerImpl" />
   
+  <component name="mimetypes" class="org.apache.avalon.http.impl.SystemMimeTypes" />
+  
   <component name="context" class="org.apache.avalon.http.impl.HttpContextImpl" >
     <configuration>
       <context-path>/niclas/testing</context-path>
     </configuration>
   </component>
+  
+  
 <!--  
   <component name="security-handler" class="org.apache.avalon.http.impl.SecurityHandler" >
     <parameters>

Modified: avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/HttpContextImpl.java
==============================================================================
--- avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/HttpContextImpl.java	(original)
+++ avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/HttpContextImpl.java	Mon Jul 26 04:31:06 2004
@@ -44,6 +44,7 @@
 
 import org.apache.avalon.http.HttpContextService;
 import org.apache.avalon.http.HttpService;
+import org.apache.avalon.http.MimeTypes;
 
 import org.mortbay.http.Authenticator;
 import org.mortbay.http.HttpContext;
@@ -65,8 +66,13 @@
     private Logger      m_Logger;
     private boolean     m_Graceful;
     private File        m_TemporaryDir;
+    private File        m_ResourceBase;
+    private int         m_MaxCacheSize;
+    private int         m_MaxCachedFilesize;
+    
     private ClassLoader m_ClassLoader;
     private RequestLog  m_RequestLog;
+    private MimeTypes   m_MimeTypes;
     
     public HttpContextImpl()
     {
@@ -110,6 +116,8 @@
     /**
      * @avalon.dependency type="org.apache.avalon.http.HttpService"
      *                    key="server"
+     * @avalon.dependency type="org.apache.avalon.http.MimeTypes"
+     *                    key="mimetypes"
      * @avalon.dependency type="org.mortbay.http.Authenticator"
      *                    key="authenticator" optional="true"
      * @avalon.dependency type="org.mortbay.http.UserRealm"
@@ -136,6 +144,8 @@
         } 
         
         m_RequestLog = (RequestLog) man.lookup( "request-log" );
+        
+        m_MimeTypes = (MimeTypes) man.lookup( "mimetypes" );
     }
 
     public void parameterize( Parameters params )
@@ -167,6 +177,13 @@
     
         Configuration welcomeFiles = conf.getChild( "welcome-files" );
         configureWelcomeFiles( welcomeFiles );
+        
+        String resourceBase = conf.getChild( "resource-base").getValue( "." );
+        m_ResourceBase = new File( resourceBase );
+        
+        m_MaxCachedFilesize = conf.getChild( "max-cached-filesize" ).getValueAsInteger( -1 );
+        
+        m_MaxCacheSize = conf.getChild( "max-cache-size" ).getValueAsInteger( -1 );
     }
     
     private void configureAttributes( Configuration conf )
@@ -206,10 +223,17 @@
     }
 
     public void initialize()
+        throws ConfigurationException
     {
         m_HttpContext.setClassLoader( m_ClassLoader );
         m_HttpContext.setTempDirectory( m_TemporaryDir );
         m_HttpContext.setRequestLog( m_RequestLog );
+        m_HttpContext.setResourceBase( m_ResourceBase.getAbsolutePath() );
+        if( m_MaxCacheSize > 0 )
+            m_HttpContext.setMaxCacheSize( m_MaxCacheSize );        
+        if( m_MaxCachedFilesize > 0 )
+            m_HttpContext.setMaxCachedFileSize( m_MaxCachedFilesize );        
+        m_HttpContext.setMimeMap( m_MimeTypes.getExtensionMap() );
     }
         
     public void start()

Modified: avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/NcsaRequestLog.java
==============================================================================
--- avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/NcsaRequestLog.java	(original)
+++ avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/NcsaRequestLog.java	Mon Jul 26 04:31:06 2004
@@ -33,7 +33,7 @@
 /** Wrapper for the Jetty NCSA request logger.
  *
  * @avalon.component name="http-ncsa-log" lifestyle="singleton"
- * @avalon.service type="org.mortbay.http.RequestLog" lifestyle="singleton"
+ * @avalon.service type="org.mortbay.http.RequestLog"
  */
 public class NcsaRequestLog extends NCSARequestLog
     implements RequestLog, Parameterizable, Startable

Modified: avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/ResourceHandler.java
==============================================================================
--- avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/ResourceHandler.java	(original)
+++ avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/ResourceHandler.java	Mon Jul 26 04:31:06 2004
@@ -45,7 +45,7 @@
 
 /**
  * @avalon.component name="http-resource-handler" lifestyle="singleton"
- * @avalon.server    type="org.mortbay.http.HttpHandler"
+ * @avalon.service   type="org.mortbay.http.HttpHandler"
  */
 public class ResourceHandler 
     extends org.mortbay.http.handler.ResourceHandler 
@@ -167,4 +167,4 @@
         super.handleGet( request, response, pathInContext, pathParams, resource );
     }
 
-}
\ No newline at end of file
+}

Added: avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/SystemMimeTypes.java
==============================================================================
--- (empty file)
+++ avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/SystemMimeTypes.java	Mon Jul 26 04:31:06 2004
@@ -0,0 +1,123 @@
+/* 
+ * Copyright 2004 Apache Software Foundation
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ * 
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.avalon.http.impl;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.apache.avalon.framework.activity.Initializable;
+
+import org.apache.avalon.framework.parameters.ParameterException;
+import org.apache.avalon.framework.parameters.Parameterizable;
+import org.apache.avalon.framework.parameters.Parameters;
+
+import org.apache.avalon.http.MimeTypes;
+
+/**
+ * @avalon.component name="mimetypes" lifestyle="singleton"
+ * @avalon.service  type="org.apache.avalon.http.MimeTypes"
+ */
+public class SystemMimeTypes
+    implements Parameterizable, Initializable, MimeTypes
+{
+    private String m_Filename;
+    private HashMap m_MimeTypeToExtMap;
+    private HashMap m_ExtToMimeTypeMap;
+    
+    public SystemMimeTypes()
+    {
+    }
+    
+    public void parameterize( Parameters params )
+        throws ParameterException
+    {
+        m_Filename = params.getParameter( "filename", "/etc/mime.types" );
+    }
+    
+    public void initialize()
+        throws Exception
+    {
+        m_MimeTypeToExtMap = new HashMap();
+        m_ExtToMimeTypeMap = new HashMap();
+        
+        FileInputStream fis = null;
+        InputStreamReader isr = null;
+        BufferedReader in = null;
+        try
+        {
+            fis = new FileInputStream( m_Filename );
+            isr = new InputStreamReader( fis );
+            in = new BufferedReader( isr );
+            
+            String line;
+            while( (line = in.readLine() ) != null )
+            {
+                processLine( line );
+            }
+        } finally
+        {
+            if( in != null )
+                in.close();
+            if( isr != null )
+                isr.close();
+            if( fis != null )
+                fis.close();
+        }
+    }
+
+    public Map getExtensionMap()
+    {
+        return m_ExtToMimeTypeMap;
+    }
+    
+    public String getMimeType( String extension )
+    {
+        return (String) m_ExtToMimeTypeMap.get( extension );
+    }
+    
+    public String[] getExtensions( String mimetype )
+    {
+        return (String[]) m_MimeTypeToExtMap.get( mimetype );
+    }
+    
+    private void processLine( String line )
+    {
+        if( "".equals( line ) )
+            return;
+
+        StringTokenizer st = new StringTokenizer( line, " ", false );
+        String mimetype = st.nextToken();
+        ArrayList exts = new ArrayList();        
+        while( st.hasMoreTokens() )
+        {
+            String extension = st.nextToken();
+            exts.add( extension );
+            m_ExtToMimeTypeMap.put( extension, mimetype );
+        }
+        String[] extensions = new String[ exts.size() ];
+        exts.toArray( extensions );
+        m_MimeTypeToExtMap.put( mimetype, exts );
+    }
+} 

Added: avalon/trunk/planet/facilities/http/spi/src/main/org/apache/avalon/http/MimeTypes.java
==============================================================================
--- (empty file)
+++ avalon/trunk/planet/facilities/http/spi/src/main/org/apache/avalon/http/MimeTypes.java	Mon Jul 26 04:31:06 2004
@@ -0,0 +1,32 @@
+/* 
+ * Copyright 2004 Apache Software Foundation
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ * 
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.avalon.http;
+ 
+import java.util.Map;
+
+
+public interface MimeTypes
+{
+
+    Map getExtensionMap();
+    
+    String getMimeType( String extension );
+    
+    String[] getExtensions( String mimetype );
+    
+}
\ No newline at end of file

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org