【Head First Servlets and JSP】笔记14:session再探 & Listener示例

时间:2023-01-27 20:01:10

 对于session的“CRUD”

会话迁移

别忘了HttpSessionBindingListener

Listener示例

 

1、session的“增”与“删”——session的创建和撤销的调用主体是服务端。

【Head First Servlets and JSP】笔记14:session再探 & Listener示例

 

2、session的“改”——由各个servlet执行

【Head First Servlets and JSP】笔记14:session再探 & Listener示例

 

3、那么session的“查找”呢?——依赖于客户端发来的JSESSIONID,以及服务端调用getSession()

 

4、会话迁移

  1.  很重要的一句话——HttpSession只有一个!不论有多少个VM。
  2. 迁移的发生:负载平衡服务器接到一个会话id为1的请求,把它交给容器1,结果容器1发现会话id为1的那个session在容器2中,迁移就开始了...
  3. 迁移的意味:在起点vm上“钝化”,在终点vm上激活。

 具体方法暂略。

 

5、别忘了HttpSessionBindingListener

【Head First Servlets and JSP】笔记14:session再探 & Listener示例

【Head First Servlets and JSP】笔记14:session再探 & Listener示例

 

6、Listener示例

跟踪Web应用中的活动会话个数。

package com.example;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class BeerSessionCounter implements HttpSessionListener {

static private int activeSessions;

public static int getActiveSessions() { // 其它servlet、辅助类可以访问!
return activeSessions;
}

@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
++activeSessions;
}

@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
--activeSessions;
}
}
<?xml version="1.0" encoding="ISO-8859-1" ?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version
="2.4">

<servlet>
<servlet-name>Ch3 Beer</servlet-name>
<servlet-class>com.example.web.BeerSelect</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Ch3 Beer</servlet-name>
<url-pattern>/SelectBeer.do</url-pattern>
</servlet-mapping>

<listener>
<listener-class>
com.example.BeerSessionCounter
</listener-class>
</listener>

</web-app>