1、session的“增”与“删”——session的创建和撤销的调用主体是服务端。
3、那么session的“查找”呢?——依赖于客户端发来的JSESSIONID,以及服务端调用getSession()
- 很重要的一句话——“HttpSession只有一个!”不论有多少个VM。
- 迁移的发生:负载平衡服务器接到一个会话id为1的请求,把它交给容器1,结果容器1发现会话id为1的那个session在容器2中,迁移就开始了...
- 迁移的意味:在起点vm上“钝化”,在终点vm上激活。
具体方法暂略。
5、别忘了HttpSessionBindingListener
跟踪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>