EL表达式
从名字可以看出相当于<%= ..%> 只能读,不能写。在jsp文件中可以在HTML中直接使用EL。
<div>
1+2的值是:${1+2 }
</div>
如果在jstl中被当做属性值来用时,放在引号之间"${1+2}"
<C:out value="${true == false}"/> 输出结果为false
访问JavaBean例子
index.jsp文件内部使用例子:
<jsp:useBean id="student" class = "xmlweb.Student" scope="session" />
<jsp:setProperty property="age" name="student" value="12"/>
<c:out value="${student.age }"/>
<a href="foo.jsp">Go to foo.jsp</a>
由于scope是Session的,如果不用EL在其他文件比如foo.jsp中使用:
因为必须要先声明bean,所以下面要写成两句,而且scope如果不设置的话默认不会和index.jsp的bean连接。
<jsp:useBean id="student" class="xmlweb.Student" scope="session"/>
<jsp:getProperty property="age" name="student" /><br>
如果用EL表达式则十分简单,EL表达式会按照从小到到的范围page->request->session->app查找
${sessionScope.student.age }
EL表达式的.和[]
如上面的例子,如果想访问session范围内的student则只需要用.即可。但是EL有一个限制,在用点的时候,变量名必须是全字母。
如果是有其他特殊符号比如下划线stud_ent则无法使用。
这时使用:${sessionScope["stud_ent"]["age"]}
也可以是混用的:${sessionScope["stud_ent"].age }
上面的用法主要用于防止属性中不必要的误会,比如用Java.lang时如果直接展开
应该是${sessionScope["java.lang"] } 而不应该是 ${sessionScope.java.lang }
EL可以进行自动类型转换
index.jsp?score=10
${param.score + 11 } 结果为21
如果同样适用request.getParameter("score") + 11 则结果为字符串1011
index.jsp?name=abc
${param.name.length() } //由于获取的是字符串,可以直接调用String类的所有函数。
和Servlet一样,EL也有内置对象:
${pageScope.username}
${requestScope.username}
${sessionScope.username}
${applicationScope.username}
在一个页面进行设置web app属性值,
application.setAttribute("time", new Date);
application.getAttribute("time")取得的是Object不够方便,EL会自动转换类型,
在web app人一个位置可以取得${applicationScope.time.Method }
param = request.getParameter
paramValues = request.getParameterValues
获取一组值,比如:/foo.jsp?name=A&name=B name有两个值,获取第一个的方法为:
${paramValues.name[0] }
※重要隐藏对象pageContext = Servlet的PageContext类
可以读取(不可写)所有不带参数的属性getXXX
${pageContext.request.contextPath } //获取当前web app
${pageContext.request.* }
${pageContext.response.* }
${pageContext.servletContext.* }
${pageContext.exception.* }
...
其他的隐藏属性一般不用。
header
headerValues
coookie
initParam
EL支持的运算符
+ - * / % && and || or ! not > < =
三目运算符
${param.score > 60 ? "及格":"不及格" }
※empty运算符,判断集合是否存在,或者非空
<%
List<String> names = new ArrayList<String>();
request.setAttribute("names", names);
%>
${empty requestScope.names } //返回True
${empty requestScope.namesXXX } //集合不存在时,也返回True
<完>