Wednesday, March 9, 2011

File Upload with Servlet 3.0

Servlet 3.0 has come with bunch of exciting features. File upload is one among the new feature available in servlet 3.0.

In earlier versions of servlet, file upload required commons api. In version 3.0 this feature is embedded in servlet api itself.

Here is a example to brief on file upload in servlet 3.0

FileUploadServlet is a servlet which extends HttpServlet and overrides doPost() method. To use file upload feature of servlet 3.0,
• MultipartConfig annotation has to specified on servlet, indicating that instance of the servlet expect request that conform to the multipart/form-data MIME type.

• Request object is provided with an API request.part(fileName), to get part or form item that was received within a multipart/form-data post request.


package com.jb;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@MultipartConfig
@WebServlet(name="FileUploadServlet", urlPatterns={"/FileUploadServlet"})
public class FileUploadServlet extends HttpServlet {
   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        doPost(request, response);
    } 
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        System.out.println("do post of file upload...");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        Part part = request.getPart("fileName");
        InputStream is = part.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        FileWriter fw = new FileWriter("c:/temp/tmp.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        String line = null;
        while((line = br.readLine())!=null){
        bw.write(line);
        bw.newLine();
        }
        bw.close();
        br.close();
        out.write("File Uploaded successfully...");
        out.close();
    }
}

A jsp form to upload file to servlet is here.

No comments:

Post a Comment