티스토리 뷰
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<h1>Cookie 전송!</h1>");
out.close();
// 쿠키생성
Cookie c1 = new Cookie("id","guest");
Cookie c2 = new Cookie("code","1004");
Cookie c3 = new Cookie("subject","java");
// 쿠키 유효시간 설정(초)
// 유효시간==0 => 쿠키 삭제
// 유효시간==(음수값) 또는 default => 브라우저 동료됨과 동시에 삭제
c1.setMaxAge(60*60*60);
c2.setMaxAge(60);
c3.setMaxAge(60*60*3);
// 쿠키 전송(Client로)
response.addCookie(c1);
response.addCookie(c2);
response.addCookie(c3);
처음에 쿠키 생성 예제를 위와 같이 작성하였다.
out.close() 메서드가 PrintWriter 출력스트림을 close 하는 것이라고 생각해서 "Cookie 전송" 이라는 응답을 출력하고 바로 닫아주었다.
그리고 쿠키 생성 후 response를 통해 쿠키를 저장하는 데에는 PrintWriter 출력스트림이 필요없을 것이라고 생각하였다. 하지만 out.close를 해줘버리면 response가 응답하는 스트림을 모두 닫아버린다는 것을 알게되었다. 따라서 out.close는 맨마지막에 해주니 문제가 해결되었다.
[펌]
http://www.silverwolf.co.kr/java/9924
PrintWriter는 사실 ServletOutputStream을 둘러싼(wrap) 것입니다. 즉 PrintWriter는 내부에 ServletOutputStream에 대한 참조를 가지고 있으며, 작업을 ServletOutputStream에게 부탁합니다. 사실 클라이언트에 대한 출력스트림은 오직 하나 밖에 없습니다. PrintWriter는 이 스트림에다가 좀더 쓰기 쉽게, 문자를 쉽게 핸들링할 수 있는 메소드들로 ServletOutputStream을 꾸민 것으로 생각하면 됩니다.
'Jsp&Servlet' 카테고리의 다른 글
Session 관련 메서드들 (0) | 2017.01.24 |
---|---|
Cookie를 통한 방문 횟수 조회 (0) | 2017.01.24 |
Cookie와 HttpSession (0) | 2017.01.23 |
Connection, Statement, ResultSet 의 close 문제 (0) | 2017.01.23 |
ServletContext, HttpSession, HttpServletRequest 차이점 (0) | 2017.01.23 |