'JSP'에 해당되는 글 2건

  1. 2008.01.16 | IE7에서의 파일(excel등) 다운로드 이상
  2. 2007.05.09 | No-Cache 설정

IE7에서의 파일(excel등) 다운로드 이상

기타 | 2008. 1. 16. 11:50
Posted by 시반

1. execCommand('SaveAs') 의 차단

 

IE6에서는 javascript로 문서를 저장시 execCommand('SaveAs')를 사용할수 있었다.
html, text뿐만 아니라 execCommand("SaveAs","false","test.xls")이런 방법으로 Table을 엑셀파일로도 저장할 수 있었던 것.
하지만 IE7부터는 execCommand등의 몇몇 메소드에 대하여 제한을 두고 있기 때문에 더이상 이런방법으로

엑셀형태로 다운로드 할 수 없게 되었다.(html,text 파일로는 저장이 된다고 하네요...)

 

 

2. context-type 설정을 통한 파일 다운로드의 제한

 

다른 방법으로 엑셀파일로 다운로드 하고자 할때 다음과 같은 헤더를 사용한다.

header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=test.xls");
header("Content-Description: PHP4 Generated Data");

 

그렇게 되면 헤더를 먼저 뿌려주고, 데이터를 출력해서 엑셀형태로 다운받게 된다.

그런데, 위와 같은 동일한 코드에서 IE6 에서는 정상적으로 다운로드 받지만,
IE7 에서는 다운받지 못하는 현상이 있다.


##########0*

 

위와 같이 다운로드를 시도하는데, 끝내 다운받지 못한다.

흐음 이부분은 해결방법이 상당히 묘하다. 그말은 딱히 정확한 원인을 알수 없다는 것이다.

정책상의 변화로 인한 파일 다운로드문제인지 다른 문제인지..

 

왜냐하면 내 경우에는 모달창에서 검색된 로그나 상태값을 엑셀로 저장하고자 할때 위와 같은

문제가 발생했지만 다른  pc에서는 이상없이 다운로드 되었기 때문이다.

모달창이 아닌 메인창에서 호출하거나 새창으로 연 경우에는 동일코드로 이상없이 작동되었다.

 

모달창의 경우엔 그외에도 새창으로 열기에서는 발생하지 않았던 ocx등의 오동작등이 보이는걸보면

모달창에 대한 정책변경이 있었던 듯 싶지만. 관련된 정보는 확인할 수 없었다.

 

한글명의 경우 XP의 IE7은 고급택스트서비스와의 충돌로 인하여 위와 같은 현상이 발생할 수도 있다고한다.

(아니면 나와 같이 3벌식을 쓰는 경우이거나..이땐 대책없다.ㅋㅋ)

즉 vista의 IE7인 경우 정상적 작동

이에 대한 해결방법은  [제어판] - [국가 및 언어] - [언어] 자세히 -

 [텍스트 서비스 및 입력언어창] - [고급] 선택 - [고급텍스트 서비스 사용안함] 선택

을 통해서 해결할 수 있다

 

3. 해결?

일단 앞서 말한바와 같이 모든 경우에 동일한 결과가 나타나지 않을 뿐더러 원인에 따라 해결방법이 있기도 없기도 하다는

점이 문제다. 2.번의 경우 jsp가 아닌 서블릿으로 처리하는 경우 대부분 이상없이 다운로드 받을 수 있었다.

아니면 jxl을 통해 파일을 생성후 다운로드 받도록 하는 방법도 생각해 볼만하다.

 

No-Cache 설정

기타 | 2007. 5. 9. 10:48
Posted by 시반

JSP에서 No-Cache 설정하는 방법

웹개발 하다보면 캐쉬된 페이지때문에 가끔 웹브라우저가 재시동하거나, 웹서버를 재시동하는 경우가 있었을 것이다. 그런 경우 캐쉬에서 불러오는 것이 아니라 항상 최신의 페이지를 보여주도록 하는 방법입니다. 데이터가 넘어가는 경우에만 '만료된 페이지입니다' 라는 메시지를 보여주게 되져

다음은 각각의 케이스별 No-Cache 설정방법입니다.

 


HTML인 경우
<META http-equiv="Expires" content="-1">
<META http-equiv="Pragma" content="no-cache">
<META http-equiv="Cache-Control" content="No-Cache">

ASP인 경우  
<%  
Response.Expires = 0  
Response.AddHeader "Pragma","no-cache"  
Response.AddHeader "Cache-Control","no-cache,must-revalidate"  
%>  

JSP인 경우  
<%  
response.setHeader("Cache-Control","no-store");  
response.setHeader("Pragma","no-cache");  
response.setDateHeader("Expires",0);  
if (request.getProtocol().equals("HTTP/1.1"))
        response.setHeader("Cache-Control", "no-cache");
%>  

PHP인 경우  
<?  
header("Pragma: no-cache");  
header("Cache-Control: no-cache,must-revalidate");  
?>



헌데 Struts Framework 사용시에는 아래와 같은 설정을 꼭 해주셔야 위의 내용이 적용이 된다고 하네요.(스트럿츠를 안써서리 잘 모르겠지만...)

 


processNoCache()는 struts-config.xml설정파일의 <controller>설정에서 nocache attribute가 true로 설정되어 있을 경우 호출된다.

만약 true라면 response객체의 header에 Pragma, Cache-Control, Expires가 추가되게 된다. 스트러츠 Framework에서는 struts-config.xml설정파일에 단지 true로 설정해주면 Cache가 적용되지 않는다.

즉 <controller nocache="true" />라는 설정을 struts-config.xml에 추가하면 끝.


 

 
블로그 이미지

시반

시반(詩伴)이란 함께 시를 짓는 벗이란 뜻을 가지고 있습니다. 함께 나눌수 있는 그런 공간이길 바라며...

카테고리

분류 전체보기 (233)
개발 이야기 (73)
WEB2.0 (57)
DB2 (24)
MySQL (6)
오라클 (26)
기타 (44)
취미 (0)
잡담 (2)