페이지 접근 전 제어할 수 있는 타이밍인 필터와 쿠키객체에 대해 알아보자.
◆ Filter
JSP 또는 서블릿으로 접근하는 웹 페이지에 요청을 보내기 전 필터작업을 통해 제어할 수 있는 메서드.
▶ Filter 사용법
1. implements Filter를 구현하는 클래스를 만든다. (javax.servlet.Filter)
Init과 destroy는 서버가 켜지고 꺼질 때 작동되는 메서드이고,
필터가 해야 될 작업은 doFilter()메서드에 작성하도록 한다.
( 이클립스IDE의 기능을 통해 간편하게 Filter를 만들 수도 있다. )
2. web.xml에 등록 및 매핑
- <url-pattern>태그에 잡아둔 경로들을 접근하게 되면 요청 전 필터의 doFilter()메서드를 거치게 된다.
( * 은 해당 경로안 모든 파일을 의미 )
- 필터에 등록된 경로의 jsp파일들은 필터에서 아무 작업이 없으면 필터를 통과하지 못하게 된다.
따라서 조건 검사 후 chain.doFilter(request, response);를 이용하여 필터를 통과시켜 준다.
(즉 chain.doFilter() 메서드는 그냥 필터를 통과시켜주는 메서드다. )
이클립스에서 경로를 적을 때의 구분은 슬러시( / ) 또는 역 슬러시 ( \ )를 사용할 수 있지만, 역 슬러시를 사용할 때는 두 번 적어야 인식이 가능하다 ( \ )
◆ 쿠키 ( Cookie )
서버에서 생성되어 클라이언트 측 브라우저에 저장되고 관리되는 특정 데이터를 가진 파일
사이트(웹 프로젝트)마다 쿠키를 생성시키고 심어둘 수 있다
(쿠키의 용량은 약4kb이다.)
ex ) 최근 본 상품, 팝업 그만보기, 로그인 유지 등
▶ 생성되어있는 쿠키 확인하는 법
‘크롬’이나 ‘파이어폭스’등에서 f12를 누르게 되면 개발자 도구를 볼 수 있고, 이곳에서 쿠키를 확인 할 수 있다. application -> cookies
▶ 쿠키 사용법
1. 쿠키 객체 생성
쿠키또한 세션,어플리케이션과 마찬가지로 키와 벨류로 이루어져있는 Map의 형태이다.
생성자의 인자로 키와 벨류값을 지정해 줄 수 있다.
2. 쿠키 설정
쿠키의 경로설정보다 상위경로에 있는 페이지들은 해당 쿠키를 사용할 수 없으며,
유효시간의 디폴트는 세션과 동일하다.
=> 필요 없을 시 생략 가능
3. response객체를 이용하여 쿠키등록
4. request객체를 이용하여 쿠키정보 가져오기
- 등록된 쿠키가 없다면 null을 반환하고, 쿠키는 배열로 밖에 불러올 수 없다.
쿠키의 등록은 response, 가져올 때는 request를 사용한다.
5. 접근
쿠키는 컬렉션으로 뽑아낼 수 없고, 배열로만 뽑아내기 때문에 for문을 이용하여 쿠키의 특정 메서드로 접근한다. 또는 한번 뽑아내면서 컬렉션객체를 생성하여 저장할 수도 있다.
- 쿠키객체.getName() : 쿠키에 등록한 이름
- 쿠키객체.getValue() : 쿠키에 등록한 이름에 해당하는 벨류값
▶ 쿠키의 유효시간
쿠키의 유효시간을 설정하지 않을 경우 디폴트 유효시간값은 세션과 동일한 커넥션 유지동안만이다.
따라서 브라우저가 종료되더라도 유효가 유지되게 하려면 추가로 쿠키의 유효시간을 설정해야 한다.
1. web.xml에 쿠키의 유효시간 등록 ( 전체 쿠키의 유효시간 설정 )
web.xml에 등록할 경우 쿠키의 유효시간 디폴트값을 바꿀 수 있다.
2. 쿠키객체.setMaxAge(int num); ( 쿠키하나하나 유효시간을 따로 설정 )
초단위로 쿠키의 유효시간을 설정하는 메서드
( response.add(Cookie c)하기 전에 등록해야 한다. )
또한 쿠키를 삭제할 경우에도 해당 메서드를 이용한다. ex) setMaxAge(0)
f12 개발자 도구 Cookie탭에서 exfies/Max-Age를 보면 session이라고 되어있는 데이터들은 브라우저를 끄게 되면 모두 날아가는 것이고, 시간이 설정된 데이터들은 브라우저를 꺼도 해당 시간이 만료되지 않으면 사라지지 않는다.
▶쿠키의 저장 경로
쿠키는 해당 경로와 그 하위경로로만 쿠키를 받을 수 있다. 따라서 하위 경로에 생성한 쿠키는 상위경로에서 사용할 수 없게 된다.
이를 해결하기 위해 쿠키를 생성하여 등록하기 전, 쿠키객체.setPath(“/”)를 통해 최상위 경로에 쿠키를 생성하여 모든 하위경로에서 쿠키를 사용할 수 있게 해주어야 한다.
브라우저 개발자 도구의 쿠키 탭에서 path를 보게 되면 해당 쿠키가 어느 경로에서 생성되었는지 확인할 수 있다. )
▶ JavaScript를 통한 쿠키제어
쿠키는 Java소스에서 뿐만 아니라 자바스크립트에서도 제어할 수 있다. 자세한 사항은 아래 링크를 클릭!
▶ 자바스크립트를 이용한 쿠키제어