表达式语言(Expression Language ,EL)
使用EL表达式可以轻松地访问page(pageContext) 、 request 、 session 和 application 中的属性内容。
EL表达式的使用方法: ${属性名称}
使用表达式语言最大的特点就是取到的参数或者对象的属性为空时,会自动使用空字符串("")
<%
request.setAttribute("info","Hello EL");
%>
<h1>${info}</h1>
<h2>${name}</h2>
<h1><%=request.getAttribute("info") %></h1>
<h2><%=request.getAttribute("name") %></h2>
EL 提供“.“和“[ ]“两种运算符来存取数据,如果参数中含有特殊符号,如- ? 等等 则需要用[],如只能这样写${user["My-Name"]},
而不能这样${ user. My-Name}。其次如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:${sessionScope.user[data]}中
data 是一个变量
表达式语言的11种内置对象
表达式语言主要功能是进行内容的显示,为了方便的显示,表达式语言提供了下列内置对象pageContext 、pageScope 、 requestScope 、 sessionScope 、
applicationScope 、 parm 、 parmValues 、 header 、 headerValues 、 cookie 、 initParm
调用内置对象的操作:
pageContext调用内置对象
EL表达式种的pageContext隐藏对象,表示javax.servlet.jsp.PageContext对象。
使用pageContext对象可以取得request 、 session 、 application 的实例,所以在表达式语言中,可以通过pageContext这个表达式内置对象调用JSP内置对象中提供的方法。
如下例(根据表达式语言重的pageContext对象,获取jsp的request 、 session内置对象,并调用他们的方法。使用反射机制):
IP地址:${pageContext.request.remoteAddr} <br>
SESSION ID: ${pageContext.session.id}<br>
是否是新session: ${pageContext.session.new}<br>
接收请求参数
使用param接收参数: ${param.info} 等价于 <%=request.getParameter("info") %>
使用paramValues接收参数组:
<form action="param_values_demo.jsp" method="post">
兴趣: <input type="checkbox" name="inst" value="吃饭">吃饭
<input type="checkbox" name="inst" value="睡觉">睡觉
<input type="checkbox" name="inst" value="看书">看书
<input type="checkbox" name="inst" value="打游戏">打游戏
<input type="submit" value="显示">
</form>
<%request.setCharacterEncoding("UTF-8"); %>
兴趣: ${paramValues.inst[0]}、${paramValues.inst[1]}、${paramValues.inst[2]}、${paramValues.inst[3]}
访问4种属性范围内容
取出某一属性时,如果没有给出属性范围的话,将按page --> request --> session --> application 顺序查找
<%
request.setAttribute("info","request属性范围");
pageContext.setAttribute("info","page属性范围");
application.setAttribute("info","application属性范围");
session.setAttribute("info","session属性范围");
%>
<h3>${info}</h3>
<h3>${sessionScope.info}</h3>
想指定某范围内属性的话,用下列写法:${pageScope.attr} 、 ${requestScope.attr} 、${sessionScope.attr} 、${applicationScope.attr}
集合操作
可以方便的使用表达式语言输出Collection(List Set)、Map集合中的内容,如下面例子:
<%
List list = new ArrayList();
list.add("张三");
list.add("李四");
list.add("王五");
request.setAttribute("list",list);
Map map = new HashMap();
map.put("info1","msg[\"info1\"]能取到值");
map.put("info2","${msg[info2]}忘了加双引号,取不到值");
map.put("info3","msg.info3能取到值");
request.setAttribute("msg",map);
%>
${list[0]}<br>
${list[1]}<br>
${list[2]}<br>
${msg }<br>
info1: ${msg["info1"]}<br>
info2:${msg[info2]}<br>
info3:${msg.info3}<br>