EL表达式
1.EL是jsp内置的表达式语言
jsp2.0开始,不让再使用java脚本,而是使用EL表达式和动态标签来代替java脚本
EL替代的式<%= ...... %>,也就是说EL只能做输出
2.EL表达式来读取四大域
${xxx},全域查找名为xxx的属性,如果不存在,输出空字符串,而不是null
{requestScope.xxx}、{applicationScope.xxx},指定域获取属性
3.JavaBean导航
<%@page import="Demo_01."* %>
<body>
<%
arr a = **new** arr();
a.setS("XXX");
Person p = **new** Person();
p.setAge(22);
p.setName("李四");
p.setArr(a);
request.setAttribute("per", p);
%>
<h2>使用el获取request域的值</h2>
${requestScope.per.arr.s}<!-- request.getAttribute("per").getArr().getS() -->
</body>
4.EL的11个内置对象
EL可以输出的东西都在11个内置对象中,其中有10个事Map类型,pageContext不是Map,它就是PageContext类型。
param:对应参数,key为参数名,value为参数值,适用于单值的参数。
paranValues:对应参数,key为参数名,value为多个参数值,适用于多值的参数。
header:对应请求头,key为头名称,value为头值,适用于单值请求头。
headerValues:对应请求头,key为头名称,value为多个头值,适用于多值请求头。
initParam:获取<context-param>内的参数
cookie:Map<String,Cookie>类型,其中key事cookie的name,value事cookie对象。
${cookie.uesrname.value}
- pageContext:它事PageContext类型,${pageContext.request.contextPath}(项目名-以后的表单还要超链接都以它开头)
5.El的函数库(由JSTL提供)
- 导入标签库<%@taglib prefix=”fn” uri=”http://java.sun/jsp/jstl/functions”%>
写法:${fn:length(xxx)}
6.自定义函数类
写一个java类,类中可以定义0~N个方法,但必须事static,而且有返回值
在WEB-INF目录下创建一个tld文件,要在jstl.jar中复制开头和结尾,并且在Java文件中有几个方法,就要在tld文件中写几个function。
<function>
<description> // 方法说明(可不写)
Tests if an input string contains the specified substring in a case insensitive way.
</description>
<name>fun</name> // 方法名(自己起名字)
<function-class>cn.itcast.MyFunction</function-class>
/ / Java文件的位置
<function-signature>java.lang.String fun()</function-signature>
// 对应的方法
<example> // 例子(可不写)
<c:if test="${fn:containsIgnoreCase(name, searchString)}">
</example>
</function>
- 在jsp页面导入标签库
<%@ taglib prefix=”xx” uri=”/WEB-INF/tlds/Xxx.tld” %>
- 在jsp页面使用自定义函数:${xx:fun() }