Day71 Java프로그래밍 기초(HTTP)
Web 보관소
1. Web 보관소의 종류
- ServletContext : 웹 애플리케이션이 실행되는 동안 모든 서블릿과 JSP가 공유할 수 있는 저장 공간
- HttpSession : 각 사용자가 웹 애플리케이션에 접속할 때마다 생성되는 사용자별 세션
- ServletRequest : 클라이언트가 서버에 요청을 보낼 때 해당 요청과 관련된 정보를 저장하고 전달하는 객체
2. Web 보관소에 값 저장하기
1) ServletContext
- 애플리케이션이 시작될 때 생성되고 종료될 때까지 유지된다.
- 모든 사용자와 요청에 대해 공유한다.
주로 애플리케이션 수준의 설정 정보, 데이터베이스 연결 정보 등을 저장한다.
1 2
ServletContext ctx = getServletContext(); ctx.setAttribute("key","value");
2) HttpSession
- 사용자별로 생성되고, 각 사용자는 고유한 세션 ID를 가진다.
- 세션은 일정 시간 동안 유지되며, 세션 만료 시간이 지나거나 사용자가 로그아웃하면 삭제된다.
주로 사용자 인증 정보나 개인화된 정보를 저장한다.
1 2
HttpSession session = request.getSession(); session.setAttribute("key","value");
3) ServletRequest
- HTTP 요청마다 새로운 ServletRequest 객체가 생성된다.
- 요청에 관련된 데이터(예: 폼 데이터, 쿼리 스트링 파라미터)를 저장하고 관리한다.
다른 서블릿이나 JSP로 요청을 전달할 때, 데이터를 함께 전달하는 데 사용할 수 있다.
1
request.setAttribute("key","value");
3. Web보관소에서 값 꺼내기
- 각 보관소를 호출 한뒤
getAttribute("key")
를 호출하면 된다. forward 와 include 해서 다른 Servlet에 위임하여도 모두 호출 가능하다.
1 2 3
String value = (String) ctx.getAttribute("key") String value = (String) session.getAttribute("key") String value = (String) request.getAttribute("key")
Cookie
1. 쿠키의 정의
- 웹서버가 웹브라우저에게 맡기는 데이터이다.
- 응답할 때 응답 헤더에 포함시켜 보낸다.
- 웹브라우저는 응답헤더로 받은 쿠키 데이터를 보관하고 있다가 지정된 URL을 요청할 때 요청 헤더에 포함시켜 웹 서버에게 쿠키를 다시 보낸다.
2. 클라이언트에 쿠키 보내기
- 클라이언트가 요청한 Servlet에서 쿠키이름과 값으로 생성한다.
- 쿠키의 유효기간을 설정하지 않으면 웹브라우저가 종료될 때 까지 유지된다. 웹브라우저를 종료하면 유효기간이 지정되지 않은 쿠키는 모두 삭제된다.
- 쿠키의 사용범위를 지정하지 않으면 현재 경로에 한정한다.
- 쿠키를 보낼 때의 URL이 /ex10/s1 이라면, 웹브라우저는 /ex10/* 경로를 요청할 때만 웹서버에게 쿠키를 보낸다.
값은 반드시 문자열이어야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Cookie c1 = new Cookie("name", "hong"); Cookie c2 = new Cookie("age", "20"); Cookie c3 = new Cookie("working", "true"); // => 또한 값은 반드시 ISO-8859-1 이어야 한다. // 만약 UTF-8을 보내고 싶다면 URL 인코딩 같은 기법을 사용하여 // ASCII 코드화시켜 보내야 한다. Cookie c4 = new Cookie("name2", "홍길동"); Cookie c5 = new Cookie("name3", URLEncoder.encode("홍길동", "UTF-8")); // 쿠키를 응답 헤더에 포함시키기 response.addCookie(c1); response.addCookie(c2); response.addCookie(c3); response.addCookie(c4); response.addCookie(c5);
3. 서버에 쿠키 받기
- 쿠키를 배열로 한번에 받아서 추출해야한다.
쿠키가 없을 때의 return값은 null이기 때문에 사용전에 유효성 검증을 해야한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Cookie[] cookies = request.getCookies(); response.setContentType("text/plain;charset=UTF-8"); PrintWriter out = response.getWriter(); if (cookies != null) { for (Cookie c : cookies) { // 쿠키 값이 'URL 인코딩'한 값이라면 // 개발자가 직접 디코딩 해서 사용해야 한다. // 쿠키 값에 대해서는 서버가 자동으로 디코딩 해주지 않는다. out.printf("%s=%s,%s\n", c.getName(), c.getValue(), URLDecoder.decode(c.getValue(), "UTF-8")); } }
4. 쿠키 유효기간 설정하기
- 유효기간을 설정하지 않으면 웹브라우저가 실행되는 동안에만 웹서버에게 쿠키를 보낸다.
- 웹 브라우저는 메모리에 쿠키를 보관한다.
유효기간을 설정하면 웹브라우저를 종료해도 삭제되지 않는다. 단 유효기간이 지나면 웹서버에 보내지 않고 삭제한다.
1 2 3 4 5 6 7 8 9 10
Cookie c1 = new Cookie("v1", "aaa"); Cookie c2 = new Cookie("v2", "bbb"); c2.setMaxAge(30); // 쿠키를 보낸 이후 30초 동안만 유효 Cookie c3 = new Cookie("v3", "ccc"); c3.setMaxAge(60); // 쿠키를 보낸 이후 60초 동안만 유효 response.addCookie(c1); response.addCookie(c2); response.addCookie(c3);
5. 쿠키 사용범위 설정하기
- 쿠키의 사용 범위를 지정하지 않으면 쿠키를 발행한 URL 범위에 한정된다. 같은 URL로 요청할 때만 쿠키를 보낸다.
쿠키를
/ex10/s21
에서 발행햇다면 클라이언트가 쿠키를 보내는 범위는/ex10/*
이다.1 2 3 4 5 6 7 8 9 10 11
Cookie c1 = new Cookie("v1", "aaa"); Cookie c2 = new Cookie("v2", "bbb"); c2.setPath("/ex10/a"); Cookie c3 = new Cookie("v3", "ccc"); c3.setPath("/"); response.addCookie(c1); response.addCookie(c2); response.addCookie(c3);
6. 세션 생성
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.