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();
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");
이렇게 바꾸었다.
잘된다.
씐난다!~ ^^
'Write > Problem&Solution' 카테고리의 다른 글
Location.href (0) | 2014.01.10 |
---|---|
톰캣(Tomcat) 구동시 Multiple Contexts have a path of 에러 (0) | 2012.12.13 |
대용량 처리시 POI사용시 얼마나 올라가다가 에러날까? (0) | 2011.12.06 |
ibatis(mybatis)에서 HashMap을 이용한 동적인 쿼리문 반복 처리시 (0) | 2011.11.03 |
administrator 사용자로 호스트 접속 실패: ERROR: Wrong password for user (0) | 2011.10.10 |