|
* 강좌를 시작하기전에.....
기본적인 session을 사용하는 방법에 대해서 강의 합니다. 따라서 session 을 처음 접하시는 분들을 위한 강좌입니다. 본 강좌 내용을 토대로 약간만 응용을 한다면, Log-in, Shopping-cart 등을 쉽게 제작 가능 하리라 생각 됩니다.
* Session 이란 무엇인가?
요즘 대부분의 웹사이트에는 회원으로 가입하고, 로그인하여 사용 할 수 있도록 구현되어 있습니다. 한번 로그인을 하면 로그아웃을 하기 전까지 대부분의 메뉴에서 사용자를 인식하고, 그에 맞게 처리를 하도록 하고 있습니다.
즉, 무엇인가 서버와 사용자간의 연결이 되었다는 의미이죠. 그러한 방법으로 '로그인' 이라는 방법을 사용하는 것입니다. 사실 로그인이라는 개념은 유닉스에서 처음 사용된 개념인데, 웹사이트에서 사용되는 로그인은 단지 사용자 정보를 '세션'에 저장하기 위한 방법에 불과합니다. (이해 비해 유닉스의 로그인은 로그인 하지 않으면 아예 접근 조차 불가능하죠)
또 다른 예로, 쇼핑카트(장바구니)를 예로 들 수 있습니다. 우리 쇼핑몰에서 물건을 선택해서 장바 구니에 담아 두면 신기 하게도 담아둔 물건이 계속 남아 있게 되죠 ^^ 어때요? 신기 하지 않습니까? ㅡㅡa
즉, 세션이란 서버(웹사이트)와 클라이언트(사용자)간의 연결임과 동시에, 사용자의 행동 정보(?)를 저장하는 임시공간인 것입니다.
사용자가 JSP페이지에 접근 하게 되면 서블릿 엔진은 유일한 세션ID를 하나 부여하게 됩니다. 그리고 그 세션의 유효 시간은 사용자의 마지막 요청(request)가 있은 후부로부터 기본적으로 30분간 입니다. (물론 변경 가능합니다)
아래와 같은 문장이 자동으로 포함되어 JSP페이지 내에서 따로 세션객체를 생성할 필요는 없습니다.
HttpSession session=pageContext.getSession(); // 자동으로 정의 됨
* Session 에 값 저장하기
session은 javax.servlet.http.HttpSession 에 의해서 정의 되어 있습니다. API 문서를 보시면 여러가지 메소드들이 있으나 우선은 가장 기본적인 메소드 몇개만 알아 보도록 하겠습니다.
자.. 그럼 세션에 값을 저장해 보도록 하겠습니다.
session.setAttribute(String name, Object value);
간혹 putValue()라는 메소드를 사용하여 설명하는 책들이 있는데, puValue는 deprecated되었으므로 사용하지 않기를 권장합니다.
session 에서 name과 value 는 1:1 대응입니다. name은 String 형으로 들어 가고 value는 Object형 이어야만 합니다. 즉 int, double, char 등의 primitive 형은 사용할수가 없다는 것입니다. 따라서 int type의 5의 값을 가지는 데이터는 아래와 같은 객체로 변경시켜 줍니다.
Integer value=new Integer(5); // int type의 5라는 값을 가지는 객체
자바기초이론을 모르는 분위 위해서 잠시 설명하자면, 자바의 모든 객체는 Object 개체를 자동으로 상속받게됩니다. 부모 객채의 type으로 자식 객체를 나타낼수 있으로 Object type을 사용하면 모든 객체를 reference 할 수 있습니다. 위와 같은 경우 session 에 object type으로 저장이 됨으로 저장된 값을 사용하려면 다시 적절한 type 으로 캐스팅하면 됩니다. 그 방법은 아래에서 설명하도록 하겠습니다.
※ 동일한 이름으로 세션에 저장하게 되면, 항상 덮어 씌워 집니다.
* Session 에 저장된 값 사용하기
먼저 예제 소스를 살펴 보겠습니다.
|
Enumeration e=session.getAttributeNames();
String name="";
while(e.hasMoreElements()){
name=(String)e.nextElement();
out.print(name + " = " + ((Integer)session.getAttribute(name)).intValue());
}
|
처음부터 너무 어려운거 아닌지 모르겠군요.. 첫번째 라인부터 살표 봅시다.. 먼서 Enumeration 이라는 객체는 java.util 패키지에 정의 되어 있으므로 사용하려면 java.util.* or java.util.Enumeration 을 import 시켜야 합니다.
Enumeration 객체는 다른 객체들을 저장 하는 객체로 객체로, Vector와는 달리 단순히 저장만을 하게 되며, 만약 Session 에 저장된 데이터가 변경되면 다시 Enumeration 객체로 반환 해야 합니다. (추가 할수는 없음)
getAttributeNames()는 세션의 이름들을 Enumeration type으로 반환하여 줍니다. while 문의 조건을 살표 보면 hasMoreElements() 를 사용하였습니다. 이 메소드는 현재 Element를 포함하고 있는지 검사 하여, boolean 형태의 데이터로 리턴하여 줍니다.
자.. 가장 중요한 getAttribute() 메소드를 살펴 봅시다. 이 메소드는 nextElement() 에 의해서 받아온 name을 이용하여, 세션에 저장되어 있는 값(value)를 꺼내 오게 됩니다. 현재 저장되어 있는 형식이 Integer type의 데이터임으로 Integer 형식으로 먼저 캐스팅을 한뒤(Integer) inValue()메소드를 사용하여 int type으로 바꾸어 줍니다.
위와 같은 형식으로 loop를 돌리면서 저장된 값을 찾아 온다면, 쇼핑카트를 만들고 그 리스트를 출력하는데 유용하게 사용될 것이라 생각 됩니다.
|