Expression表达式搜索域数据的顺序和要注意的session与application
EL 表达式的全称是:Expression Language。是表达式语言。
EL 表达式的作用:EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。
创建jsp页面写了,pageContext、request、session、application四个域,往 四 个 域 中 都 保 存 了 相 同 的 key的 数 据 。
<%
// 往 四 个 域 中 都 保 存 了 相 同 的 key的 数 据 。
pageContext.setAttribute("key","pageContext");
request.setAttribute("key","request");
session.setAttribute("key","Session");
application.setAttribute("key","Session");
%>
用EL表达式进行获取输出: ${key}
输出的是pageContext域中的"key":pageContext。
可能有人就会觉得因为pageContext.setAttribute(“key”,“pageContext”);在最上面所以EL最先搜索到pageContext.setAttribute(“key”,“pageContext”);然后进行输出。
但把pageContext.setAttribute(“key”,“pageContext”);放到最后一行EL输出的Key依然是输出,当把pageContext.setAttribute(“key”,“pageContext”)注释,EL表达式输出的Key为:request
依次注释、把request.setAttribute(“key”,“request”);注释EL表达式输出的Key为:session
但把session.setAttribute(“key”,“session”); 注释后EL输出的key还是:session
是因为session域中保存的数据是根据session机制的生命周期是当浏览器关闭而结束的。所以当要获取更新数据时要及时清理掉浏览器中的session。
当我们关闭从新打开浏览器EL表达式输出的Key为application,但要注意的是application的生命周期是当服务器关闭或者重启才结束的。
由上面可知EL 表达式搜索域数据的顺序是:
pageContext >request>session>application
域中都有相同的 key 的数据的时候,EL 表达式会按照域的从小到大的顺序去进行搜索,找到就输出。