서블릿 출력 스트림을 닫아야합니까?
중복 가능성 :
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
'program tip' 카테고리의 다른 글
DateTime 'Z'형식 지정자는 어디에 있습니까? (0) | 2020.12.31 |
---|---|
Liskov 대체 원칙-재정의 / 가상 방법 없음? (0) | 2020.12.31 |
Why is an HTML element rather than an HTML entity? (0) | 2020.12.31 |
git 브랜치 : gh-pages (0) | 2020.12.31 |
Java Micro ORM 해당 (0) | 2020.12.31 |