sitelink1  
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownloadTest extends HttpServlet {

  /**
   *
   */
  private static final long serialVersionUID = 1L;

  public void doPost(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException
{
    doGet(req, res);
  }

  public void doGet(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException
{

    String id = req.getParameter("id");
    String pass = req.getParameter("pass");

    if (id.equals("down") && pass.equals("test")) {
      try {
        sendFile(req, res, "D:/TEST.xls");
      } catch (Exception e) {
        // Logger.err.println("File Download is failed : "+e);
      }
    } else {
      res.setContentType("text/html;charset=euc-kr");
      PrintWriter out = res.getWriter();
      out.println("<html><body><center>");
      out.println("invalid user information!!");
      out.println("</center></body></html>");
    }
  }

  /**
   * <pre>
   *      파일을 전송하는 메소드.
   * <br>
   *      파일의 절대 경로를 인자값으로 받아 파일을 전송한다.
   * <br>
   * String s = &quot;c:/jdk1.3.1/bin/javac.exe&quot;;
   * sendFile(s);
   * </pre>
   *
   * @param String
   *          path - 파일의 절대 경로
   * @return void
   * @exception java.lang.Exception
   */
  public void sendFile(HttpServletRequest request,
      HttpServletResponse response, String path) throws Exception
{
    this.sendFile(request, response, new File(path));
  }

  /**
   * <pre>
   *      파일을 전송하는 메소드
   *      &lt;b&gt;response를 reset()하기 때문에 Cookie 변경 등의 작업을 수행해서는 안된다.&lt;/b&gt;
   * </pre>
   */
  public void sendFile(HttpServletRequest request,
      HttpServletResponse response, File f) throws Exception
{

    InputStream in = null;
    OutputStream out = null;
    try {
      // File f = new File(path);
      if (!f.exists() || f.isDirectory()) {
        // Logger.err.println("File Not Exists :"+f.getAbsolutePath());
        return;
      }
      // Logger.debug.println("Download File:"+f.getAbsolutePath());
      in = new FileInputStream(f);

      // 쿠키 등의 정보를 지우므로 이전에 세팅을 해서는 안된다.
      response.reset();
      // Logger.debug.println("f.getName():"+f.getName());

      // Logger.debug.println("FileDonwload called:"+f.getName());
      String contentType = "Content-type: application/x-ms-download";

      response.setContentType(contentType);
      response.setHeader("Content-Disposition", "attachment; filename=""
          + new String(f.getName().getBytes(), "Shift_JIS") + """);
      response.setHeader("Content-Length", "" + f.length());

      out = response.getOutputStream();
      byte[] dd = new byte[4096];
      int leng = 0;
      while ((leng = in.read(dd)) > 0) {
        out.write(dd, 0, leng);
      }

    } finally {
      if (in != null)
        try {
          in.close();
        } catch (Exception e) {
        }
      if (out != null)
        try {
          out.close();
        } catch (Exception e) {
        }
    }
  }
}