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>