EL表达式
EL表达式就是通过一个简便的方式来取出jsp中四大作用域中的值(注意:EL表达式必须要写在JSP中才可以)。全称叫做Expression Language表达式语言。但是前提是四大表达式中必须要先setAttribute(),也就是数据必须要存进去之后才可以通过EL表达式来进行存储。
语法:${ 变量名 } 其中的变量名就是在域对象进行setAttribute()时,对应的key值。
<%
request.setAttribute("name", "Tom");
%>
${name}
相应知识点回顾
-
JSP四大域对象,分别是pageContext、request、Session、application四大域对象。注意其中没有Cookie。Cookie和Session同样作为会话机制用来存储信息的方式,但是两者却天差地别。
-
每一个域对象都有一对存储信息和读取信息的方法:setAttribute(String key, Object value) getAttribute(String key) 但是注意由于如果取数据的话其代码是相当繁琐的,所以为了简化相应的代码,所以采用了EL表达式来进行取值。如果不使用EL表达式的话,相应的取数据代码为:
<% String name = (String)request.getAttribute("name");%> <%=name>
关于EL表达式需要注意的事项:
对于四种域对象的查找顺序问题:如果说在四种域对象中存在着重名的键值对,那么查找顺序遵循局部变量优先原则。即pageContext > request > session > application,找到相应的数据之后立刻返回。
四种域对象中都不存在该键值对:返回null值。
指定对应域对象中的值:
- pageContext中的值:${pageScope.变量名}
- request中的值:${requestScope.变量名}
- session中的值:${sessionScope.变量名}
- application中的值:${applicationScope.变量名}
实际开发过程中使用EL表达式表达JavaBean对象: 变 量 名 . 属 性 或 者 {变量名.属性} 或者 变量名.属性或者{变量名[“属性名”]}
- 其中原理,其实该EL表达式中的语句对应的语句应该是((User)pageContextW.getAttribute(“name”)).getId();
- 其中变量名所对应的为(User)pageContext.getAttribute(“name”)
- 如果是直接输出的话,那么其实本质上就是直接打印出该对象的toString()方法,默认未更改的toString方法是其完整包名+@+其对应的哈希值。
- 其中属性对应的其实就是getId()方法
- 间接证明,如果想要成功调用的话就必须有setter和getter方法,也就是完整的一个JavaBean,如果没有的话就无法取出数据,会报错。
实际上,EL表达式的本质就是先调用的setter方法再调用的getter方法,所以如果说在EL表达式中如果赋值的话也是可以使用的,但是平时开发的时候我们并不这样用,因为这并不是EL表达式的优势。