Java Servlet Programing Laungage

Java Servlet Projects

Servlet Project 3

adplus-dvertising
Create an application for convert a simple file into compress (zip) file through servlet
Previous Home Next

In this program, a simple file is convert into compressed format like .zip. Two jar file required for such operation.

  • Apache - commons- fileupload-io-1.2.2.jar (here)
  • Apache - commons-io-2.1.jar (here)

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet>
      <servlet-name>ZipServlet</servlet-name>
      <servlet-class>r4r.Servlet.ZipServlet</servlet-class>
    </servlet>
	<servlet-mapping>
        <servlet-name>ZipServlet</servlet-name>
        <url-pattern>/ZipServlet</url-pattern>
    </servlet-mapping>
	 <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

Index.jsp

<%-- 
    Document   : index.jsp
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
      <meta http-equiv="Content-Type" 
	         content="text/html; charset=UTF-8">
        <title>r4r.co.in-servlet</title>
    </head>
    <body>
      <form>
        <h1>Access Servlet by servlet's Name!</h1>
        <a href="ZipServlet">ZipServlet</a>
        </form>
    </body>
</html>

Servlet Program

/*
 * Save as a ZipServlet.java
 */
package r4r.Servlet;
import java.io.*;
import java.util.*;
import java.util.logging.*;
import java.util.zip.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;

/**
 *
 * @author R4R
 */
public class ZipServlet extends HttpServlet {

 private static final String DIR_PATH = "c:/Temp";
                     //Folder path
 private static final int MAX_SIZE = 1 * 1024 * 1024;
                //1 MB size fix

 protected void processRequest
	 (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  try {
/* TODO output your page here */
out.println("<html>");
out.println("<head>");
out.println("<title>" 
	         + getServletInfo() + "</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet ZipServlet at " 
	         + request.getContextPath() + "</h1>");
out.println("<form action=\"ZipServlet\" method=\
          "POST\" enctype=\"multipart/form-data\">");
out.println("Select File:<input type=\"file\" name=\
       "myFile\" value=\"\" width=\"60\"/><br/>");
out.println("<input type=\"submit\
            " value=\"Process Request\" />");
out.println("<input type=\"reset\
        " value=\"Reset\"/>");
out.println("</form>");
out.println("</body>");
out.println("</html>");
  } finally {
out.close();
  }
 }

 @Override
 protected void doGet
 (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
  processRequest(request, response);
 }

 @Override
 protected void doPost
 (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();

  try {
File fileDirectory = new File(DIR_PATH);
//Check given directory is exit or not 
if (!fileDirectory.exists()) {
 fileDirectory.mkdir();  //directory not exit? create it
} else if (!fileDirectory.isDirectory()) {
 out.println(HttpServletResponse.SC_NOT_FOUND 
	 + "Directory not found on " + DIR_PATH + " Path");
}

//check the request make from "multipart/form-data"
boolean isMultipartContent = 
	 ServletFileUpload.isMultipartContent(request);
if (isMultipartContent) {

 //handle incoming request and limit its size
 DiskFileItemFactory factory = new DiskFileItemFactory();
 ServletFileUpload fileUpload = new ServletFileUpload(factory);
 fileUpload.setSizeMax(MAX_SIZE); //set maximum allowed size(bytes)

 //store the incomming request into list
 List<FileItem> items = fileUpload.parseRequest(request);
 Iterator<FileItem> iterator = items.listIterator();
 while (iterator.hasNext()) {
  FileItem fileItem = iterator.next();

  //incoming request must not be in compress format
  if (!fileItem.getContentType()
	  .equals("application/x-zip-compressed")) {
//Create a zip folder into the Directory
File zipFile = new File
(fileDirectory, FilenameUtils.getBaseName(fileItem.getName()) + ".zip");
zipFile.createNewFile();
ZipOutputStream zipOutStream = 
	        new ZipOutputStream(new FileOutputStream(zipFile));

// Create a zipEntery(file inside into zip folder)
ZipEntry zipEntry =
	  new ZipEntry(FilenameUtils.getName(fileItem.getName()));
zipOutStream.putNextEntry(zipEntry);
DataOutputStream dataOutStream =
 new DataOutputStream(new BufferedOutputStream(zipOutStream));

//write data into file 
byte[] bs = fileItem.get();
for (int i = 0; i < bs.length; i++) {
 byte b = bs[i];
 //convert data into char before write
 dataOutStream.writeChar((char) b);
}
// free resource
dataOutStream.flush();
zipOutStream.closeEntry();
dataOutStream.close();

// send response(information) to client
out.println("Zip file <b>"
 + zipFile.getName() + "</b> write on <b><I>" + DIR_PATH +
							 " </I></b> path<BR>");
out.println("File name: <b>" + zipEntry.getName() + "</b><BR>");
out.printf
	("Acctual File size <b>(%d)</b> bytes", dataOutStream.size());
out.printf("<BR>Compressed File size <b>(%d)</b> bytes",
	         zipEntry.getCompressedSize());
  } else {
response.sendError(HttpServletResponse.SC_NOT_ACCEPTABLE,
	"Processing File already in compressed mode");
  }
 }
} else {
 response.sendError
	 (HttpServletResponse.SC_BAD_REQUEST, "Request must be multipart");
}
  } catch (FileUploadException ex) {
Logger.getLogger(ZipServlet.class.getName()).log(Level.SEVERE,
  "FileUploadException generate while processing request", ex);
  } finally {
out.flush(); //free resource
out.close();
  }
 }

 @Override
 public String getServletInfo() {
  return "r4r.co.in-ZipServlet";
 }
}				
Output of Program
Previous Home Next