java.lang.IllegalStateException: getOutputStream() has already bee...
2009/11/13 17:18 - dev.log/errorApplicationDispatcher[/cmp] Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:599)
error가 일어난 이유는?
답안) jsp파일에서 getOutputStream()을 대신해서 getWriter()를 호출!
추가설명:
이 익셉션은 jsp 페이지에서 OutputStream을 사용했을 때 발생한다.
jsp는 servlet으로 변환될 때 자동적으로 write객체가 존재하는데
OutputStream을 가져온다면 당연히 혼선(?)으로 익셉션이 난다.
정식적으로는 jsp페이지에서 OutputStream을 쓰는것 자체가 안되는것이다.
OuptputStream은 .java 즉 Servlet에서 사용하는것이 옳으며, jsp에는 getWriter()라는 친구를
사용해야 한다.
하지만!
굳이 jsp페이지에서 써야 할경우
1) response.getWriter()
2) try {
out.clear(); //out--> jsp자체 객체
out=pageContext.pushBody(); //out--> jsp자체 객체
OutputStream out = response.getOutputStream();
요런식으로 OutputStream객체를 생성하기 전에
jsp자체의 out객체를 비워주고 <body>태그 바깥으로 밀어내야(??) 한다.
출처 : http://cafe.naver.com/javabegin/2
댓글을 달아 주세요
java.lang.IllegalStateException: getOutputStream() has already been called for this response
해결방안: response.getOutputStream()
->response.getWriter()
를 사용합니다.
이외 궁금사항은 seoulde@korea.com
그리고 소스..
BufferedReader inP = null;
BufferedWriter osP = null;
ArrayList<Object> al = null;
java.sql.ResultSet rs = null;
java.io.File file = null;
String fileDirectory ="";
String fileName= "";
try{
file = new java.io.File(fileDirectory+fileName);
if(file.exists()){
/**
* URLEncoder.encode("파일명","변환형식");
* @parameters : 다운로드시 한글 변환을 시킨다.
*/
//URLEncoder.encode(revFileName, "UTF-8");
String client= request.getHeader("User-Agent");
try {
inP= new BufferedReader(new FileReader( file));
response.reset();
if(client.indexOf("MSIE 5.5") != -1){
response.setHeader("Content-Type", "doesn/matter;charset=UTF-8;");
response.setHeader("Content-Disposition", "filename="+URLEncoder.encode(fileName, "UTF-8"));
}else{
response.setHeader("Content-Type", "application/octet-stream;charset=UTF-8;");
response.setHeader ("Content-Disposition", "attachment; filename="+URLEncoder.encode(fileName, "UTF-8"));
}
response.setHeader ("Content-Length", ""+file.length());
response.setHeader("Pragma", "no-cache;");
response.setHeader("Expires", "-1;");
osP = new BufferedWriter(response.getWriter());
char b[] = new char[(int)file.length()];
int leng = 0;
while((leng=inP.read(b))!= -1){
osP.write(b, 0, leng);
osP.flush();
}
}
} catch(Exception e) {
}finally{
osP.flush();
if(inP !=null) try{inP.close();}catch(Exception ex){}
if(osP !=null) try{osP.close();}catch(Exception ex){}
}
}
}catch(Exception e11){}