Qual é a diferença entre <%…%> e <%! …%> Em jsp

Estou adicionando mais funcionalidade a uma página que possui as duas tags mencionadas no título. Percebi que a variável que declaro em<% ... %>&nbsp;não pode ser usado em<%! ... %>&nbsp;e vice versa. Qual é a diferença entre os dois e como posso declarar variáveis que poderiam ser usadas nas duas tags