program tip

서블릿 출력 스트림을 닫아야합니까?

radiobox 2020. 12. 31. 08:09
반응형

서블릿 출력 스트림을 닫아야합니까?


중복 가능성 :
HttpServletResponse.getOutputStream () /. getWriter ()에서 .close ()를 호출해야합니까?

HttpServletResponse.getOutputStream () (또는 getWriter () 또는 입력 스트림)을 닫을 책임이 있습니까? 아니면 컨테이너에 남겨 두어야합니까?

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException {
    OutputStream o = response.getOutputStream();
    ... 
    o.close(); //yes/no ?
}

실제로 그렇게 할 필요가 없습니다.

기본 규칙 :을 사용하여 직접 생성 / 열지 new SomeOutputStream()않았다면 직접 닫을 필요가 없습니다. 예를 들어 a new FileOutputStream("c:/foo.txt")인 경우 분명히 직접 닫아야합니다.

일부 사람들이 여전히 그렇게하는 이유 는 응답 본문에 더 이상 기록되지 않도록 하기 위한 것입니다. 이런 일이 발생 IllegalStateException하면 앱 서버 로그 에이 발생 하지만 클라이언트에 영향을 미치지 않으므로 클라이언트는 여전히 적절한 응답을받습니다. 이것은 또한 언뜻보기에 볼 수없는 요청-응답 체인의 잠재적 인 문제를 발견하는 더 쉬운 디버그입니다. 예를 들어, 다른 무언가가 체인의 더 아래쪽에있는 응답 본문에 더 많은 데이터를 추가하고 있습니다.

스타터들 사이에서 볼 수있는 또 다른 이유 는 응답 본문에 더 많은 데이터가 기록되는 것을 막고 싶었 기 때문 입니다. JSP가 응답에서 잘못된 역할을 할 때 자주 볼 수 있습니다. 그들은 IllegalStateException로그 s를 무시합니다 . 이 특별한 목적이 나쁘다것은 말할 필요도 없습니다 .


닫을 필요가 없습니다. 그렇게하면 기본적으로 클라이언트에 대한 응답을 종료합니다. 스트림을 닫은 후에는 다음 요청이있을 때까지 클라이언트에 다른 것을 보낼 수 없습니다. 스트림을 열지 않았으므로 닫을 필요가 없습니다.

참조 URL : https://stackoverflow.com/questions/1829784/should-i-close-the-servlet-outputstream

반응형