Você pode pensar num framework como se ele fosse um template (modelo) de projeto web equipado com um conjunto de componentes pra facilitar o desenvolvimento.
Existem explicações melhores e mais acadêmicas. Mas fazendo uma comparação: usar JSP puro é como construir uma casa usando tijolos e usar um framework é como construir uma casa usando material pré-moldado (paredes semi-prontas pra encaixar e coisas similares).
Pra forçar a o logout ao fechar o navegador, uma opção é você tratar o evento onBeforeUnload da sua página via JavaScript e chamar seu logout via AJAX.
Não é uma solução perfeita, mas pode quebrar o galho. Pra falar a verdade, tem uma aplicação em que eu uso isto.
Vamos supor que para limpar as variáveis da sessão e usar o invalidate você aguarde um parâmetro sair=1 numa página login.jsp.
Você precisaria colocar em todas as suas páginas:
<body onBeforeUnload="fecharSessao()">
Acima da tag você precisaria implementar esta função em JavaScript, mais ou menos assim:
<script language="javascript">
function fecharSessao() {
httpReq("login.jsp?sair=1", "fecharSessao_Back")
}
function fecharSessao_Back() {
// Não faz nada, mas é necessária como callback do AJAX
}
</script>
ATENÇÃO
Esta função httpReq não é padrão do JavaScript, mas você consegue copiar o código dela em qualquer artigo de AJAX que encontrar através do Google.
Pra complicar um pouco mais... o evento onBeforeUnload é chamado toda vez que você navega entre as páginas.
Daí vem a parte "imperfeita" da solução. Pra você saber que foi clicado no fechar, precisa adicionar mais um código pra verificar as coordenadas do mouse antes de chamar o logout. Se a coordenada Y estiver em determinada posição Y acima da barra de endereços, daí você "presume" que foi clicado no fechar e chama o AJAX para o logout.
Falando tudo isso dá pra imaginar que o processo é complicado. Mas se alguém tiver uma solução mais simples eu também gostariade saber :)