1 file download jsp header #
response.setHeader("Content-Disposition", "attachment;filename=gimslab.com.xls"); response.setHeader("Content-Description", "JSP Generated Data");
2 include 방법 두 가지 #
- 컴파일시 파일포함 - 정적 인클루드
<%@ include file="relativeURL" %>
- 실행시 결과 포함 - 동적 인클루드
<jsp:include page="relativeURL" flush="true" />
4 jsp코딩시 줄바꿈문자가 자동으로 들어가는 현상에 관해 #
작성자:kikistyle@gmail.com 작성일:20040211수091805 얼마전 시스템에서 이상한 현상 하나를 발견했다. jsp에 관한 문제였다. 그 jsp는 파일 다운로드를 수행하는 놈이었다. 만약에 서버상에 a.hwp라는 파일이 있고 사이즈가 100byte였다면 이 jsp를 통해서 그 파일을 다운로드 받으면 사이즈가 101byte가 되는 것이었다. 모든 파일이 서버상의 실제 파일보다 1byte커지게 다운로드가 되는 것이었다. 신기해서 해당 jsp의 컴파일된 java소스를 봤더니 마지막에 out.print("\n"); 이것이 붙어 있는것이다. 아하 이것때매 그랬구나 해서 해당 jsp를 vi로 열어봤다. 근데 마지막에는 전혀 그런게 없었다. %>로 정확히 끝나고 있었고 새 라인도 없었다. %>를 마지막으로 더 이상 어떠한 문자도 없었다. 그래서 vi로 새 파일을 만들어봤다. 그랬더니 항상 마지막에 \n 문자가 붙는것이 발견되었다. 물론 vi로 열었을때는 마지막라인의 그 문자는 줄바꿈 효과를 보여주지 않고 있었다. 그렇다면 vi로는 위와 같은 jsp코딩은 못하게 되는것인가... echo x > a 이렇게 수행하면 파일 a의 사이즈는 얼마가 될까? 1 이라고 예상을 했으나 2가 된다. 자동으로 파일끝에 \n이 붙어버리는 것이다. vi 도 마찬가지 유닉스에 대해 모르는것이 더 많은 나는 여러가지 꼼수를 생각하다가 결국엔 마지막 라인의 \n문자를 지워버리는 방법을 선택했다. 만약에 위와같은 jsp에서 마지막에 한 개의 \n이라도 들어가버리면 jsp컨테이너는 해당 jsp를 컴파일할때 마지막에 out.print("\n")을 붙여버린다. 그러므로 해당 jsp를 vi로 편집할때는 마지막 라인 쓰지말고 파일을 저장하고 빠져나온다. 예를 들면 a.jsp라는 파일을 vi로 만들고 있고 end of file %> 라는 줄로 끝나는 파일을 만들고 싶은경우 위의 마지막줄은 쓰지말고 마지막줄 바로 전까지만 코딩을 하고 저장하고 빠져나온다. 그리고 마지막 라인은 약간 특이한 방법으로 추가를 해준다. 이렇게 echo 'end of file %>' | tr -d '\r\n' >> a.jsp 이렇게 하면 마지막라인의 줄바꿈문자는 없어진 상태로 a.jsp가 만들어진다. 이렇게 만들어진 jsp는 컴파일된 java를 열어보면 마지막에 out.print("\n")이 없다. 간단히 메모하려고 했는데 길어졌다.