JSPの変数宣言で質問があります。

session"TEST"には、ユーザ別にユニークな値が入って入る時、
jspファイルで、以下のように記述してます。

<%! String test; %>
<% test = session.getAttribute("TEST"); %>

この場合、複数ユーザが接続状態にある時、
同時にリロードなどを何度も繰り返していると、
5回に1回程度、他ユーザのsessionの値が入ってしまっています。
その際のsession.getAttribute("TEST")自体には期待する値が
入っているのですが、testに値が渡されていません。

TOMCATのVer.4.1.27、4.1.30、5.0.25で、全て同現象がおこりました。
<%! %>内に変数を宣言しなければ起こらないようなのですが、
その理由がが理解出来ません。ただ変数の初期化を行っている
だけだと思っていたのですが・・・。何か勘違いしてるのでしょうか?