서블릿에서 세션 관리 개발

이 태스크 정보

코딩 예 SessionSample.java와 결합된 이 정보는 사용자 고유의 서블릿에서 세션을 구현할 수 있는 프로그래밍 모델을 제공합니다.

프로시저

  1. HttpSession 오브젝트 확보

    세션을 확보하려면 Java™ Servlet 3.0 API에서 javax.servlet.http.HttpServletRequest 오브젝트의 getSession 메소드를 사용하십시오.

    처음 HttpSession 오브젝트를 확보할 때, 세션 관리는 세 가지 방법(쿠키, URL 재작성 또는 SSL(Secure Socket Layer) 정보) 중 하나를 사용하여 세션 추적을 설정합니다.
    더 이상 사용되지 않는 기능: SSL ID를 사용하는 세션 추적은 WebSphere® Application Server 버전 7.0에서 더 이상 사용되지 않습니다. 쿠키를 사용하도록 세션 추적을 구성하거나 URL 재작성을 사용하도록 애플리케이션을 수정할 수 있습니다.

    세션 관리가 쿠키를 사용한다고 가정하십시오. 그러한 상황에서, 세션 관리는 고유한 세션 ID를 사용하며 일반적으로 이를 쿠키로 브라우저에 다시 전송합니다. 이 사용자의 각 후속 요청(같은 브라우저에서)은 세션 ID가 들어 있는 쿠키를 전달하며 세션 관리 기능은 사용자의 기존 HttpSession 오브젝트를 찾는 데 이 ID를 사용합니다.

    샘플 코드의 1단계에서는, HttpSession 오브젝트가 아직 존재하지 않는 경우 작성되도록 부울(작성)을 true로 설정합니다. (서블릿 2.3 API를 사용하는 경우, 부울이 없는 javax.servlet.http.HttpServletRequest.getSession() 메소드는 기본값이 true로 설정되며 이 사용자에 대해 세션이 아직 존재하지 않는 경우 세션을 작성합니다.)

  2. 세션에서 사용자 정의 데이터를 저장하고 검색하십시오.

    세션이 설정된 후에는 사용자 정의 데이터를 세션에 추가하거나 검색할 수 있습니다. HttpSession 오브젝트에는 임의의 Java 오브젝트를 추가, 검색 및 제거할 수 있는 메소드가 있으며 이는 java.util.Dictionary에 있는 메소드와 유사합니다.

    코드 예의 2단계에서, 서블릿은 HttpSession에서 정수 오브젝트를 읽어, 이를 늘리고 다시 기록합니다. 임의의 이름을 사용하여 HttpSession 오브젝트의 값을 식별할 수 있습니다. 코드 예는 이름 sessiontest.counter를 사용합니다.

    HttpSession 오브젝트가 사용자가 액세스할 수 있는 서블릿 사이에서 공유되므로, 충돌을 피하기 위해 사이트 전역의 이름 규칙 채택을 고려하십시오.

  3. 선택사항: HttpSession 오브젝트의 데이터를 포함하는 HTML 응답 페이지를 출력하십시오.
  4. 세션 중에 조치를 수행하는 사용자에게 피드백을 제공하십시오. 조치가 발생했음을 알리는 HTML 코드를 클라이언트 브라우저에 전달할 수 있습니다.
    예를 들어 코드 샘플의 3단계에서 서블릿은 사용자에게 리턴되는 웹 페이지를 생성하고 세션 중에 사용자가 해당 웹 페이지를 방문할 때마다 sessiontest.counter의 값을 표시합니다.
  5. 선택사항: 리스너에게 알리십시오.
    세션이 종료하려고 준비하고 무효화할 때 javax.servlet.http.HttpSessionBindingListener 인터페이스를 구현하는 세션에 저장된 오브젝트를 알립니다. 이러한 통지로 사용자는 세션 중에 작성된 데이터 변경사항을 데이터베이스에 영구적으로 저장하는 등의 사후 세션 처리를 수행할 수 있습니다.
    참고: Java Platform, Enterprise Edition 7과의 호환성을 위해 세션이 무효화될 때 세션 관리 기능으로 세션의 속성을 제거해야 합니다. 이 요구사항으로 인해 HttpSessionBindingListener.valueUnbound() 메소드가 두 번 호출될 수 있습니다. 중복 호출을 막으려면 세션이 무효화되기 전에 애플리케이션 내에서 세션 속성을 명시적으로 제거하십시오.
  6. 세션을 종료합니다.
    다음을 사용하여 세션을 종료할 수 있습니다.
    • 지정된 시간 동안 세션이 활동하지 않으면 세션 관리 기능을 사용하여 자동으로 종료합니다. 관리자는 세션을 무효화시킨 후 경과된 시간을 지정하는 방법을 제공합니다.
    • 세션 오브젝트에서 서블릿을 코딩하여 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>");    
   }
}