ZipBrowser Example

The following example illustrates the use of the Request, Response, and Query objects. The example uses the java.util.zip package to implement a Java CFX called ZipBrowser, which is a zip file browsing tag.

The tag's archive attribute specifies the fully qualified path of the zip archive to browse. The tag's name attribute must specify the query to return to the calling page. The returned query contains three columns: Name, Size, and Compressed.

For example, to query an archive at the path C:\logfiles.zip for its contents and output the results, you use the following CFML code:

<cfx_ZipBrowser

      archive="C:\logfiles.zip"

      name="LogFiles" >



<cfoutput query="LogFiles">

#Name#,  #Size#, #Compressed# <BR>

</cfoutput>    

The Java implementation of ZipBrowser is as follows:

import com.allaire.cfx.* ;

import java.util.Hashtable ;

import java.io.FileInputStream ;

import java.util.zip.* ;



public class ZipBrowser implements CustomTag 

{

   public void processRequest( Request request, Response response ) 

      throws Exception

   {

      // validate that required attributes were passed

      if (  !request.attributeExists( "ARCHIVE" ) ||

            !request.attributeExists( "NAME" ) )

      {

         throw new Exception( 

            "Missing attribute (ARCHIVE and NAME are both " +

            "required attributes for this tag)" ) ;

      }

   // get attribute values

      String strArchive = request.getAttribute( "ARCHIVE" ) ;      

      String strName = request.getAttribute( "NAME" ) ;       

   

  // create a query to use for returning the list of files

      String[] columns = { "Name", "Size", "Compressed" } ;

      int iName = 1, iSize = 2, iCompressed = 3 ;

      Query files = response.addQuery( strName, columns ) ;  

      

  // read the zip file and build a query from its contents

      ZipInputStream zin = 

         new ZipInputStream( new FileInputStream(strArchive) ) ;     

      ZipEntry entry ;

      while ( ( entry = zin.getNextEntry()) != null )

      {

         // add a row to the results

         int iRow = files.addRow() ;

         

         // populate the row with data

         files.setData( iRow, iName, 

            entry.getName() ) ;

         files.setData( iRow, iSize, 

            String.valueOf(entry.getSize()) ) ;

         files.setData( iRow, iCompressed, 

            String.valueOf(entry.getCompressedSize()) ) ;

         

         // finish up with entry

         zin.closeEntry() ;

      }



      // close the archive

      zin.close() ;

   }  

}



Banner.Novgorod.Ru