페이지 접근 전 제어할 수 있는 타이밍인 필터와 쿠키객체에 대해 알아보자.


◆ Filter

JSP 또는 서블릿으로 접근하는 웹 페이지에 요청을 보내기 전 필터작업을 통해 제어할 수 있는 메서드.


▶ Filter 사용법

1. implements Filter를 구현하는 클래스를 만든다. (javax.servlet.Filter)

Init과 destroy는 서버가 켜지고 꺼질 때 작동되는 메서드이고,
필터가 해야 될 작업은 doFilter()메서드에 작성하도록 한다.
( 이클립스IDE의 기능을 통해 간편하게 Filter를 만들 수도 있다. )

2. web.xml에 등록 및 매핑
<filter>
    <filter-name>sf</filter-name>
    <filter-class>filters.SampleFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>sf</filter-name>
    <url-pattern>/filter/*</url-pattern>
</filter-mapping>
  • <url-pattern>태그에 잡아둔 경로들을 접근하게 되면 요청 전 필터의 doFilter()메서드를 거치게 된다.
    ( * 은 해당 경로안 모든 파일을 의미 )


  • 필터에 등록된 경로의 jsp파일들은 필터에서 아무 작업이 없으면 필터를 통과하지 못하게 된다.
    따라서 조건 검사 후 chain.doFilter(request, response);를 이용하여 필터를 통과시켜 준다.
    (즉 chain.doFilter() 메서드는 그냥 필터를 통과시켜주는 메서드다. )

이클립스에서 경로를 적을 때의 구분은 슬러시( / ) 또는 역 슬러시 ( \ )를 사용할 수 있지만, 역 슬러시를 사용할 때는 두 번 적어야 인식이 가능하다 ( \ )


◆ 쿠키 ( Cookie )

서버에서 생성되어 클라이언트 측 브라우저에 저장되고 관리되는 특정 데이터를 가진 파일
사이트(웹 프로젝트)마다 쿠키를 생성시키고 심어둘 수 있다
(쿠키의 용량은 약4kb이다.)

ex ) 최근 본 상품, 팝업 그만보기, 로그인 유지 등


▶ 생성되어있는 쿠키 확인하는 법

‘크롬’이나 ‘파이어폭스’등에서 f12를 누르게 되면 개발자 도구를 볼 수 있고, 이곳에서 쿠키를 확인 할 수 있다. application -> cookies


▶ 쿠키 사용법

1. 쿠키 객체 생성

쿠키또한 세션,어플리케이션과 마찬가지로 키와 벨류로 이루어져있는 Map의 형태이다.
생성자의 인자로 키와 벨류값을 지정해 줄 수 있다.

Cookie c = new Cookie("luckCookie", "1"); // String name, String value


2. 쿠키 설정

쿠키의 경로설정보다 상위경로에 있는 페이지들은 해당 쿠키를 사용할 수 없으며,
유효시간의 디폴트는 세션과 동일하다.

c.setPath(/); // 쿠키의 경로설정
c.setMaxAge(60); // 쿠키 유효시간 설정(초단위)

=> 필요 없을 시 생략 가능


3. response객체를 이용하여 쿠키등록

// 쿠키의 등록은 response객체를 통해 한다.
response.addCookie(c);
또는 response.addCookie(new Cookie(co,true));


4. request객체를 이용하여 쿠키정보 가져오기

// 쿠키는 클라이언트에 보관되어 있기 때문에 request객체를 이용하여 가져온다.
Cookie[] ar = request.getCookies();
  • 등록된 쿠키가 없다면 null을 반환하고, 쿠키는 배열로 밖에 불러올 수 없다.

쿠키의 등록은 response, 가져올 때는 request를 사용한다.


5. 접근

쿠키는 컬렉션으로 뽑아낼 수 없고, 배열로만 뽑아내기 때문에 for문을 이용하여 쿠키의 특정 메서드로 접근한다. 또는 한번 뽑아내면서 컬렉션객체를 생성하여 저장할 수도 있다.

for (Cookie c : ar) {
    String n = c.getName(); // key
    String v = c.getValue(); // value
    out.println(n + " / " + v + "<br/>");
}
  • 쿠키객체.getName() : 쿠키에 등록한 이름
  • 쿠키객체.getValue() : 쿠키에 등록한 이름에 해당하는 벨류값


▶ 쿠키의 유효시간

쿠키의 유효시간을 설정하지 않을 경우 디폴트 유효시간값은 세션과 동일한 커넥션 유지동안만이다.
따라서 브라우저가 종료되더라도 유효가 유지되게 하려면 추가로 쿠키의 유효시간을 설정해야 한다.


1. web.xml에 쿠키의 유효시간 등록 ( 전체 쿠키의 유효시간 설정 )

web.xml에 등록할 경우 쿠키의 유효시간 디폴트값을 바꿀 수 있다.

<session-config>
    <session-timeout>1</session-timeout> <!-- 분단위 -->
</session-config>


2. 쿠키객체.setMaxAge(int num); ( 쿠키하나하나 유효시간을 따로 설정 )

초단위로 쿠키의 유효시간을 설정하는 메서드
( response.add(Cookie c)하기 전에 등록해야 한다. )
또한 쿠키를 삭제할 경우에도 해당 메서드를 이용한다. ex) setMaxAge(0)

f12 개발자 도구 Cookie탭에서 exfies/Max-Age를 보면 session이라고 되어있는 데이터들은 브라우저를 끄게 되면 모두 날아가는 것이고, 시간이 설정된 데이터들은 브라우저를 꺼도 해당 시간이 만료되지 않으면 사라지지 않는다.


▶쿠키의 저장 경로

쿠키는 해당 경로와 그 하위경로로만 쿠키를 받을 수 있다. 따라서 하위 경로에 생성한 쿠키는 상위경로에서 사용할 수 없게 된다.

이를 해결하기 위해 쿠키를 생성하여 등록하기 전, 쿠키객체.setPath(“/”)를 통해 최상위 경로에 쿠키를 생성하여 모든 하위경로에서 쿠키를 사용할 수 있게 해주어야 한다.

브라우저 개발자 도구의 쿠키 탭에서 path를 보게 되면 해당 쿠키가 어느 경로에서 생성되었는지 확인할 수 있다. )

▶ JavaScript를 통한 쿠키제어

쿠키는 Java소스에서 뿐만 아니라 자바스크립트에서도 제어할 수 있다. 자세한 사항은 아래 링크를 클릭!
▶ 자바스크립트를 이용한 쿠키제어