29
Sep
Servlet : zipservlet
Author: rberthou
This article aims at presenting how to create a servlet that sends a zip file to the user. We create here a html page with a form where you can enter an url. The servlet will get the content of this url (only the html page, not the images or other frames), create a zip file with it, and send you the file.
This example can be used as a basis to do various things.
- Sending a file with a servlet
This involves two headers: Content-Type and Content-Disposition. The content type is set to “application/zip”. The other one is used to specify the filename used by the browser when it starts downloading the file.
res.setContentType("application/zip");
res.setHeader("Content-Disposition","inline; filename=output.zip;");
This header replace “res.setHeader(“Content-Disposition”,”attachment; filename=output.zip;”);” (not work with IE5)
In this example, we create a zip file. We’ll discuss later on how to create such files. As soon as we get a byte array with the zip file, we are ready to send it.
We simply call out.println(zip) to send the file.
li>Creating a zip file Have you ever noticed the java.util.zip package ?
Basically, a zip file is created by adding ZipEntries to a ZipOutputStream.
Once we have create a ZipEntry with a file name, we are ready to write an array of byte to the ZipOutputStream. Then we close the entry, finish the work with a call to finish(). We finally get a String containing the zipped file.
zout.putNextEntry(new ZipEntry("file.html"));
zout.write(b,0,size);
zout.closeEntry();
zout.finish();
String zip=bout.toString();
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>");
}
}
}
} |
4 Responses pour"Servlet : zipservlet"
Hey,
its a nice post. was very useful when I was googling especially for the “fileName” part ;).
Thanks. keep up the good work.
Cheers,
Raghavan alias Saravanan M.
Maintain the great weblog with this particular post sort, I’m sure lots of folks this way.
thank you
I will be routinely doing a search online concerning articles that could aid myself. Thank you !
Ajouter une réponse