java.lang.lllegalStateException : strict servlet API : cannot call getWriter() after getOutputStream()
getWriter() 에러는 stream 객체에 쓰기 에러가 난것이다.
왜 에러가 났을까 미리 상상을 해보자면 연결객체에 파일이나 데이터를 다 쓰기도 전 닫혀버려
더 이상 전달할수 없는 경우라고 예상할수 있다. 네트웍이면 socket을 닫아버렸다던지 파일이면
파일스트림을 close() 해버렸을 것이다.
나의 경우는 getWriter() 함수 실행전에 java.net.SocketException : Connection reset by peer:
socket write error 에러가 났었다. 소켓이 닫힌후에 getWriter 을 한 것이다.
파일 다운로드 하는 소스에서 에러가 난 것인데 소스는 다음과 같다.
out = response.getOutputStream();
while ((numRead = in.read(b) != -1)){
out.write(b, 0, numRead);
}
out.flush();
위의 소스가 진행되고 control 에서 HttpServletResponse 에 객체를 넘길 때 에러가 나는 것이다
이것은 control 에서 아래와 같이 return mav 를 해서 발생하는 것인데 이미 out.flush() 실행하여
파일 다운로드 창이 뜨고 다운이 다 되면 창이 닫힌다. 창이 닫히면 response stream 객체의
연결이 끊기게 된다. 연결이 끊긴 상태에서 return mav 로 데이터를 전달하니까 getWriter()
에러가 나는것이다.
public ModelAndView downloadFile(HttpServletRequest request, HttpServletResponse response)
throws Exception{
…
ModelAndView mav = new ModelAndView();
return mav;
}
에러가 난다고 해서 크게 문제되는건 아니지만 그래도 없앨려면 control 의 리턴값을 null로
바꿔주면 된다. 아무것도 넘기지 않는것이다.
'자바(JAVA)' 카테고리의 다른 글
JAVA 에서 데이터 교환을 위해 JSON 사용하기 (0) | 2010.07.20 |
---|---|
google SMTP 를 이용해서 java 에서 Email 보내기 테스트 (1) | 2010.07.19 |
Spring 에서 트랜잭션 설정시 NoClassDefFoundError TransactionManager 에러 (0) | 2010.07.18 |
PreparedStatement 사용한 like % 쿼리 문자열 합치기 (0) | 2010.07.06 |
(5) HSQLDB 과 Spring framework - DBUnit 테스트 환경을 만들어 본다. (0) | 2009.09.09 |
(4) HSQLDB 과 Spring Framework - spring framework 에서 hsqldb 연동테스트 (0) | 2009.09.05 |
(3) HSQLDB 과 Spring Framework - eclipse 의 DB Explorer 를 통한 데이타확인 (0) | 2009.09.05 |
(2) HSQLDB 과 Spring Framework - eclipse 와 Ant 를 이용한 테이블 생성,입력 (0) | 2009.09.05 |