Write/Problem&Solution

파일(엑셀) 다운로드시 두번?!?!?!

GNUNIX 2011. 12. 8. 19:20

Database(DB)의 내용을 엑셀(Excel)파일로 다운로드(Download)할 수 있도록 만들고 있었다.
한 jsp페이지에서 DB에 접속하여 데이터를 받아오면서 엑셀형식으로 돌돌 말아서 던져준다.


File file = new File(UPLOAD_ABS_PATH_WINDOW);
if(!file.exists()){
   file.mkdirs();
  }
file = new File(UPLOAD_ABS_PATH_WINDOW+"scs2xls"+lcIndex+".xls");
if(!file.exists()){
  file.createNewFile();
}
FileOutputStream stream = new FileOutputStream(file);
 
wb.write(stream);
stream.close();

response.setHeader("Content-Disposition", "filename=scs2xls"+lcIndex+".xls");
response.setContentType("application/vnd.ms-excel");

byte b[] = new byte[1024];
  
BufferedInputStream fin = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());

int read=0;
while((read=fin.read(b))!=-1){
   outs.write(b, 0, read);
  }
outs.flush();
fin.close();
outs.close();

out.clear();

그런데 이상하고도 크리티컬할 문제를 발견했다.
페이지를 두번 돈다?!

Log기록을 보니 SQL Query를 두번 때린다.
페이지 처음부터 끝까지 한번 더 도는것을 발견했다!!!!

전 페이지로부터 POST방식으로 날라온 Parameter를 받는데 두번째에는 null값이다.
파일 다운로드에는 문제가 없지만 DB에서 날라오는 데이터가 크거나 많거나 할 경우 두번 쿼리를 때리고 두번 날아오게 되기 때문에  엄청 치명적이다.
그리고 기능상 문제는 없지만 두번 돌면서 파라메터의 null값때문에 에러 나는 에러를 눈뜨고 가만 놔둘 수 가 없다.


결론은.
response에서 'attachment'를 뺀적이 있는데 그것을 다시 넣어주니 문제가 없어졌다 *_*

response.setHeader("Content-Disposition", "filename=scs2xls"+lcIndex+".xls");

위에서

response.setHeader("Content-Disposition", "attachment;filename=scs2xls"+lcIndex+".xls");

이렇게 바꾸었다.

잘된다.
씐난다!~ ^^