Please Enable JavaScript!
Gon[ Enable JavaScript ]

cannot call getWriter() after getOutputStream() 에러

자바(JAVA)
반응형

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

바꿔주면 된다. 아무것도 넘기지 않는것이다.


반응형
Posted by 녹두장군1
,