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>");
}
}
}
} |
Très bonne source.
Par contre l’url passée en paramètre ne peut être qu’un fichier html à ce que je vois et la page ne peut dépassée 300000 octets soit 300 Ko, ce qui peut être limitant.
Rien de bien grave, facilement modifiable à la main.
Merci pour ce petit ^bout de code bien pratique ^^
Oui pour des raisons de simplicité, le but de ce source est de proposer un exemple d’utilisation. C’est une base pour réaliser un développement plus complexe.
Ajouter une réponse