Servlet : zipservlet
[ Home Page | ]
 

Index

  • Nous supposons dans cet exemple que vous connaissez ce qu'est une servlet. Pour plus d'informations sur ce sujet vous pouvez également consulter : une introduction aux servlets, servlet tutorial, or Java tutorial (Tous ces liens sont sur JavaSoft).

  • Cette petite servlet vous permet de recevoir dans un fichier zip le contenu d'une URL donnée en paramètre. Nous vous montrons donc comment créer et envoyer un fichier zip à l'utilisateur.
    Utilisez le formulaire ci dessous pour tester cette servlet.

  • Exemple :
    Donnez une URL :


  • Téléchargement du binaire et du code source : zipservlet.zip
  • Le principe de fonctionnement :
    • Saisie de l'URL a lire / validation du formulaire
    • ,
    • Activation de la servlet ( doGet )
    • Lecture du parametre ( url )
    • Ouverture de la connection ( url.openConnection() )
    • Lecture des données dans un tableau de bytes
    • Création du "fichier" zip ( zout = new ZipOutputStream )
    • Ajout d'un fichier à l'archive "zip" ( zout.putNextEntry )
    • Retour de l'archive "zip"
package javaside.servlet.sample ; 

//****************************************************************************** 
// ----------------------------------------------------------- 
// zipservlet.java 
// ----------------------------------------------------------- 
//   Main class for sample servlet 
// ----------------------------------------------------------- 
// Author : R. BERTHOU 
// E-Mail : rbl@berthou.com 
// URL    : http://www.javaside.com/ 
// ----------------------------------------------------------- 
// Ver  * Author     *  DATE    * Description 
// ....................DD/MM/YY............................... 
// 1.00 * R.BERTHOU  * 12/01/01 * 
//****************************************************************************** 

import java.io.*; 

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.util.zip.*; 
import java.net.*; 
import java.util.*; 

public class zipservlet extends HttpServlet { 

     public void doGet (HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException 
     { 
          byte b[]=new byte[300000]; 

          URL url; 
          String temp; 

          ByteArrayOutputStream bout=new ByteArrayOutputStream(); 
          ZipOutputStream zout=new ZipOutputStream(bout); 
          ServletOutputStream out = res.getOutputStream(); 
          ServletContext servletContext = getServletContext(); 

          if ((temp=req.getParameter("url"))!=null) 
          { 
               try { 
                    url=new URL(temp); 
                    URLConnection uc = url.openConnection(); 

                    DataInputStream input = new DataInputStream(uc.getInputStream()); 

                    int numRead=0; 
                    int size=0; 

                    while (numRead != -1) { 
                         numRead = input.read(b,size,20000); 
                         size+=numRead; 
                    } 

                    zout.putNextEntry(new ZipEntry("file.html")); 
                    zout.write(b,0,size); 
                    zout.closeEntry(); 
                    zout.finish(); 
                    String zip=bout.toString(); 

                    res.setContentType("application/zip"); 
                    res.setHeader("Content-Disposition","inline; filename=output.zip;"); 

                    out.println(zip); 
                    out.flush(); 

               } 
               catch (Exception e) 
               { 
                    res.setContentType("text/html"); 
                    out.println("<html><head><title>Error</title></head>"); 
                    out.println("<body><b>"); 
                    out.println("An error has occured while processing "+temp+"<br>"); 
                    out.println("Here is the exception: <br>"+e+"<br>"); 
                    e.printStackTrace(new PrintWriter(out)); 
                    out.println("</body>"); 
                    out.println("</html>"); 
               } 
          } 
     } 
}



Copyright © 1996..1999, R. BERTHOU. Tous droits réservés.
Dernière modification le : Dimanche 26 Aout 2001 09H31