Tomcat에서 세션의 관리 메커니즘을 자세히 설명하십시오.
1. 요청 프로세스 중에 세션 작업 :
간단한 설명 : 요청 프로세스 중에 먼저 요청에서 SessionID 정보를 구문 분석 한 다음 SessionID를 요청의 매개 변수 목록에 저장하십시오. 그런 다음 요청에서 세션을 받으면 SessionID가 존재하면 ID를 기반으로 세션 풀에서 세션을 얻게됩니다. SessionID가 존재하지 않거나 세션이 실패한 경우 새 세션을 생성하고 세션 정보를 세션 풀에 다음 사용하기 위해 세션 풀에 넣으십시오.
(1) SessionID 구문 분석 프로세스 타이밍 다이어그램 :
개요 : 먼저, 사용자는 HTTP 요청을 보내 http11processor로 전달한 다음 http11processor를 통해 Coyoteadapter로 전달합니다. Coyoteadapter는 코요테 프레임 워크가 org.apache.catalina.connector.request에 캡슐화 한 org.apache.coyote.request를 조정하는 어댑터입니다 (이전에 요약 된이 프로세스에 대해서는 별다른 말을하지 않음). 변환 후 ParsePathParameters 방법이 경로 매개 변수의 쿠키 정보를 구문 분석하도록 호출됩니다 (브라우저에서 쿠키가 비활성화되기 때문에 쿠키 정보가 URL로 다시 작성됩니다). 먼저 URL에서 SessionID를 구문 분석하십시오. 그런 다음 ParsessessionCookiesId가 호출됩니다. 이것은 쿠키에서 SessionID를 구문 분석하고 요청에 저장하는 것입니다 (ParsePathParameters 및 ParsessessionCookiesId 메서드. 호출 프로세스 중에는 명백한 XOR 논리가 보이지 않습니다. 즉, 둘 다 실행되지는 않지만 문제가 없습니까? 실제로 문제가 없다고 생각하십시오. 문제). SessionID에 구문 분석하고 요청에 넣습니다. SessionID의 논리를 구문 분석해도 괜찮습니다.
다음 주요 코드가 게시됩니다.
ParsePathParameters 메소드 (URL 재 작성) :
PS : 표시된 부분은 URL에서 구문 분석 변수입니다. 그런 다음 요청 매개 변수 목록에 넣습니다.
ParsessessionCookiesId 메서드 (쿠키에서 구문 분석 세션) :
추신 : 위의 태그는 쿠키에서 SessionID를 얻는 것입니다. SessionConfig.getSessionCookiename (Context)으로 호출하여 첫 번째 태그를 보면 Default SessionId의 키가 표시됩니다. 이 키는 SessionConfig에 정의되며 그 값은 jssessionID입니다.
(2) 요청에서 세션을 얻는 과정은 기본적으로 위에서 설명한대로입니다. 그런 다음 서블릿에서 세션을 얻는 과정을 살펴보십시오.
개요 : AppServlet은 우리가 스스로를 정의하는 서블릿입니다. 우리가 Reqest를 통해 세션을 얻을 때, 호출되는 httpservletrequest (인터페이스)는 실제로 requestfacade (org.apache.catalina.connector.request를 캡슐화하는 정장)입니다. 요청의 특정 논리는 컨텍스트 컨테이너의 getmanger 메소드를 호출하여 세션 관리자를 얻는 것입니다 (세션 관리자의 세부 사항은 아래에 설명되어 있음). SessionID가 구문 분석되면 Session Object Pool에서 해당 세션을 얻기 위해 FindSession 메소드가 호출됩니다. 그렇지 않으면 SessionID가 존재하지 않으면 세션을 세션 객체 풀에 재현하고 배치해야합니다.
다음 주요 코드가 게시됩니다.
클래스 클래스 requestFacade의 getSession 방법 :
클래스 요청의 getSession 방법 :
클래스 요청의 dogetsession 방법 :
PS : 첫 번째 태그는 SessionID를 기반으로 세션 객체 풀에서 세션 정보를 얻는 것입니다. 두 번째 태그는 SessionID를 구문 분석하지 않고 새 세션 객체를 만드는 것입니다.
이것은 새로운 세션을 만듭니다. 이 시점에는 새로운 SessionID의 생성이 포함됩니다. SessionID를 생성하기위한 논리적 키 코드는 Class SessionID Generator의 GeneratesESSionID 메소드에 정의됩니다.
위는 서블릿을 얻는 세션 과정입니다. 다음 세부 사항은 Tomcat이 세션을 관리하는 방법, 즉 세션 관리자의 지식을 요약합니다.
2. 세션 관리 메커니즘
세션 관리자 정의 : 세션 관리자 구성 요소는 세션 개체 생성 및 파괴와 같은 세션 객체를 관리 할 책임이 있습니다.
먼저, 세션 관리자의 클래스 상속 구조 다이어그램을 살펴 보겠습니다 (이것은 Tocmat7.x의 그래프이며 Tomcat5의 클래스 상속 메커니즘은 이것과 매우 다릅니다).
간단한 설명 : 다음은 각 범주를 차례로 요약합니다 (공식 웹 사이트 정보 참조).
(1) 관리자 : 세션 풀을 관리하기 위해 특정 컨테이너와 관련된 기본 인터페이스를 정의합니다.
(2) ManagerBase : Session Manager의 공통 기능 구현을 제공하는 Manager Interface를 구현합니다.
(3) StandardManager : 기본 세션 관리자 인 ManagerBase의 상속 (구성을 지정하지 않으면 기본적으로 사용). Tomcat 처리 세션 (즉, 독립형 버전)의 비 클러스터 구현입니다. Tomcat이 닫히면 메모리 세션 정보는 디스크로 유지되고 Session.ser로 저장되며 다시 부팅 할 때 복원됩니다.
(4) persistentManagerBase : ManagerBase에서 상속, 세션 관리자 지속성의 기본 기능을 구현하고 정의합니다.
(5) PersistentManager : PersistentManagerBase에서 상속. 주요 기능은 디스크에서 유휴 세션 객체 (타임 아웃 시간을 설정하여)를 교환하는 것입니다.
(6) ClusterManager : 관리자 인터페이스를 구현하고 클래스 이름으로 추측해야합니다. 클러스터 세션을 관리하는 관리자이며 위의 StandardManager 독립형 버전의 세션 관리자는 상대적인 개념입니다. 이 클래스는 클래스 간의 세션의 복제 및 공유 인터페이스를 정의합니다.
(7) ClusterManagerBase : ClusterManager 인터페이스를 구현하고 ManagerBase에서 상속합니다. 이 클래스는 세션 복제의 기본 작동을 구현합니다.
(8) BackupManager : 클러스터 간 세션 복제 전략 구현 인 ClusterManagerBase에서 상속. 세션 데이터에는 백업 노드가 하나 뿐이며 클러스터의 모든 노드는이 백업 노드의 위치에서 볼 수 있습니다. 이 디자인은 이기종 배포를 지원하는 데 이점을 제공합니다.
(9) Deltamanager : 클러스터 세션 복제 전략의 구현 인 ClusterManagerBase에서 상속. BackupManager와 달리 세션 데이터는 클러스터의 모든 멤버 노드에 복사되므로 클러스터의 모든 노드는 동형이어야하며 동일한 응용 프로그램을 배포해야합니다.
보충 : 아래에 자세히 요약하겠습니다. PersistentManagerBase 클래스에는 회원 변수 저장소가 있습니다.
영구 세션 관리자의 스토리지 전략은이 스토어 객체에 의해 정의됩니다. 이 상점의 클래스 상속 구조는 다음과 같습니다.
간단한 설명 : 인터페이스 스토어와 그 예제는 세션 관리자를위한 일련의 스토리지 전략을 제공합니다. 매장은 기본 인터페이스를 정의하고 StoreBase는 기본 구현을 제공합니다. Filestore 클래스에서 구현 한 정책은 세션을 setDirectory ()가있는 디렉토리에 지정된 파일에 저장하고 .session으로 끝나는 것입니다. JDBCStore 클래스는 세션을 JDBC를 통해 데이터베이스에 저장합니다. 따라서 JDBCStore를 사용해야합니다. 드라이버 이름 및 연결 URL을 설정하려면 SetDriverName () 메소드와 SetConnectionUrl () 메소드를 각각 호출해야합니다.
3. Tomcat 세션 관련 구성
두 수준의 세션과 관련된 구성 및 설정을 요약하십시오. 우선, 구성 파일 레벨에서 세션에는 만료 시간이 있으며 기본 만료 시간은 $ catalina_home/conf/web.xml로 정의됩니다. 특정 기본 구성은 다음과 같습니다 (기본 만료 시간은 30 분, 즉 30 분 안에 액세스 할 수 없으며 세션이 만료됩니다).
또 다른 요점은 세션 관리가 구성되지 않은 경우 기본적으로 StandardManager를 사용한다는 것입니다. 그러나 구성하려면 $ Catalina_home/Conf/Context.xml로 지정할 수 있습니다 (이 구성에서 세션 관리자가 컨텍스트 컨테이너와 관련되어 있음을 알 수 있습니다. 즉, 각 웹 응용 프로그램에 세션 관리자가 있음을 의미합니다). 특정 구성은 다음과 같습니다.
tomcat7.x이 관리자 구성의 기본값은 기본적으로 기본적으로 표시됩니다. 지정하려는 PersistentManager가 기본 관리자 인 경우 다음과 같이 지정할 수 있습니다.
실제로, 이것을 본 후, 나는 관련 인터페이스가 구현되는 한 세션 관리자 또는 상점 저장 정책이 사용자 정의 될 수 있음을 발견했습니다. 여기에 직접 구성을 작성해도 괜찮습니다.
또한 코드 레벨에서 요약하겠습니다. 세션의 일부 구성 정보는 코드에 작성됩니다 (예 : SessionConfig 클래스는 일부 세션 설정 정보를 정의합니다. 쿠키의 세션 이름은 jsession입니다. URL 재 작성을 통해 세션이 경로에 배치되면 키 값의 이름은 jssessionIds입니다. 특정 코드는 다음과 같습니다.
또 다른 요점은 SessionID의 기본 기본 길이가 16 바이트이며 SessionIdGenerator에 지정되어 있다는 것입니다.
자, 기본 구성에 대해 너무 많이 요약되어 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.