이 태스크 정보
코딩 예 SessionSample.java와 결합된 이 정보는
사용자 고유의 서블릿에서 세션을 구현할 수 있는 프로그래밍 모델을 제공합니다.
프로시저
- HttpSession 오브젝트 확보
세션을 확보하려면 Java™
서블릿 3.0 API에 있는 javax.servlet.http.HttpServletRequest 오브젝트의
getSession 메소드를 사용하십시오.
처음 HttpSession 오브젝트를 확보할 때, 세션 관리는
세 가지 방법(쿠키, URL 재작성 또는 SSL(Secure Socket Layer) 정보) 중 하나를 사용하여 세션 추적을
설정합니다.
제거된 기능: SSL ID를 사용하는 세션 추적은
WebSphere® Application Server 버전 7.0에서
더 이상 사용되지 않습니다. 쿠키를
사용하도록 세션 추적을 구성하거나 URL 재작성을 사용하도록 애플리케이션을 수정할 수 있습니다.
depfeat
세션 관리가 쿠키를 사용한다고 가정하십시오. 그러한 상황에서, 세션 관리는
고유한 세션 ID를 사용하며 일반적으로 이를 쿠키로 브라우저에 다시 전송합니다. 이 사용자의
각 후속 요청(같은 브라우저에서)은 세션 ID가 들어 있는 쿠키를 전달하며 세션 관리 기능은 사용자의
기존 HttpSession 오브젝트를 찾는 데 이 ID를 사용합니다.
샘플 코드의 1단계에서는,
HttpSession 오브젝트가 아직 존재하지 않는 경우 작성되도록 부울(작성)을 true로
설정합니다. (서블릿 2.3 API를 사용하는 경우, 부울이 없는
javax.servlet.http.HttpServletRequest.getSession() 메소드는 기본값이
true로 설정되며 이 사용자에 대해 세션이 아직 존재하지 않는 경우
세션을 작성합니다.)
- 세션에서 사용자 정의 데이터를 저장하고 검색하십시오.
세션이 설정된 후에는
사용자 정의 데이터를 세션에 추가하거나 검색할 수 있습니다. HttpSession 오브젝트에는 임의의 Java 오브젝트를 추가, 검색
및 제거할 수 있는 메소드가 있으며 이는 java.util.Dictionary에 있는 메소드와 유사합니다.
코드 예의 2단계에서, 서블릿은 HttpSession에서 정수 오브젝트를 읽어, 이를
늘리고 다시 기록합니다. 임의의 이름을 사용하여
HttpSession 오브젝트의 값을 식별할 수 있습니다. 코드 예는 이름 sessiontest.counter를 사용합니다.
HttpSession 오브젝트가 사용자가 액세스할 수
있는 서블릿 사이에서 공유되므로, 충돌을
피하기 위해 사이트 전역의 이름 규칙 채택을 고려하십시오.
- (선택적) HttpSession 오브젝트의 데이터가 들어 있는 HTML 응답 페이지 출력
- 세션 중에 조치를 수행하는 사용자에게 피드백을 제공하십시오. 조치가 발생했음을 알리는
HTML 코드를 클라이언트 브라우저에 전달할 수 있습니다. 예를 들어, 코드 샘플의 3단계에서 서블릿은 사용자에게 리턴되는
웹 페이지를 생성하고 세션 중에 사용자가 해당 웹 페이지를 방문할 때마다
sessiontest.counter의 값을 표시합니다.
- (선택적) 리스너에게 알립니다. 세션이 종료하려고 준비하고 무효화할 때 javax.servlet.http.HttpSessionBindingListener 인터페이스를
구현하는 세션에 저장된 오브젝트를 알립니다.
이러한 통지로 사용자는 세션 중에 작성된 데이터 변경사항을 데이터베이스에 영구적으로
저장하는 등의 사후 세션 처리를 수행할 수 있습니다.
- 세션을 종료합니다. 다음을 사용하여 세션을 종료할 수 있습니다.
- 지정된 시간 동안 세션이 활동하지 않으면 세션 관리 기능을 사용하여 자동으로
종료합니다. 관리자는 세션을 무효화시킨 후 경과된 시간을 지정하는 방법을 제공합니다.
- 세션 오브젝트에서 서블릿을 코딩하여 invalidate() 메소드를 호출합니다.
예
import java.io.*;
import java.util.*;
import javax.Servlet.*;
import javax.servlet.http.*;
public class SessionSample extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Step 1: Get the Session object
boolean create = true;
HttpSession session = request.getSession(create);
// Step 2: Get the session data value
Integer ival = (Integer)
session.getAttribute ("sessiontest.counter");
if (ival == null) ival = new Integer (1);
else ival = new Integer (ival.intValue () + 1);
session.setAttribute ("sessiontest.counter", ival);
// Step 3: Output the page
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Session Tracking Test</title></head>");
out.println("<body>");
out.println("<h1>Session Tracking Test</h1>");
out.println ("You have hit this page " + ival + " times" + "<br>");
out.println ("Your " + request.getHeader("Cookie"));
out.println("</body></html>");
}
}