Description

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.

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 »

Code

package javaside.servlet.sample ;
 
/**
* zipservlet.java
*
*  Main class for sample servlet
*
*  @author : R. BERTHOU
*  URL    : http://www.berthou.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></head>");
                    out.println("<body><b>");
                    out.println("An error has occured while processing "+temp+"");
                    out.println("Here is the exception: "+e+"");
                    e.printStackTrace(new PrintWriter(out));
                    out.println("</body>");
                    out.println("</html>");
               }
          }
     }
}
Be Sociable, Share!