一、EL表达式简介
EL 全名为Expression Language。EL主要作用:
获取数据:EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list 集合、访问map集合、访问数组)
执行运算:利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
获取web开发常用对象:EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
调用Java方法:EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
二、EL的作用
a)获取数据
普通变量/JavaBean/List/Set/Map,注意,一定要将其放置到域对象中
如果在域中找不到对应的值,返回空白字符串,不是NULL
b)执行运算
算术/关系/逻辑
有用的二个运算:empty和**?**:**(二元运算符)
c)获取web开发常用对象(11个隐式对象)
d)调用Java方法,即EL自定义函数
EL是对标签(自定义和JSTL标签)的补充和简化
三、EL表达式语言中定义了11个隐含对象
隐含对象 | 对象类型 | 说明 |
pageContext | javax.servlet.jsp.PageContext | 用于访问jsp内置对象 |
param | java.util.Map | 包含页面所有参数的名称和对应值的集合 |
paramValues | java.util.Map | 包含页面所有参数的名称和对应多个值的集合 |
header | java.util.Map | 包含每个header名和值的集合 |
headerValues | java.util.Map | 包含每个header名和可能的多个值的集合 |
cookie | java.util.Map | 包含每个cookie名和值的集合 |
initParam | java.util.Map | 包含Servlet上下文初始请求参数名和对应值的集合 |
pageScope | java.util.Map | 包含page页面范围内的属性值的集合 |
requestScope | java.util.Map | 包含request请求范围内属性值的集合 |
sessionScope | java.util.Map | 包含session绘画范围内的属性值的集合 |
applicationScope | java.util.Map | 包含application应用范围内的属性值的集合 |
四、EL自定义函数的开发步骤
a)写一个EL函数类,该类无需继承和实现任何类或接口
//${el:filter("")}//普通类
public class Filter {
//EL自定义函数
public static String filter(String message) {
if (message == null)
return (null);
char content[] = new char[message.length()];
message.getChars(0, message.length(), content, 0);
StringBuffer result = new StringBuffer(content.length + 50);
for (int i = 0; i < content.length; i++) {
switch (content[i]) {
case '<':
result.append("<");
break;
case '>':
result.append(">");
break;
case '&':
result.append("&");
break;
case '"':
result.append(""");
break;
default:
result.append(content[i]);
}
}
return (result.toString());
}
}
b
)在WEB-INF/*.tld文件,描述自定义函数和对应处理类的关系
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>el</short-name>
<uri>http://java.sun.com/jsp/jstl/el</uri>
<function>
<name>filter</name>(函数名)
<function-class>cn.itcast.web.jsp.el.Filter</function-class>(函数处理类的完整路径)
<function-signature>java.lang.String filter(java.lang.String)</function-signature>(函数方法签名)
</function>
</taglib>
c)在需要使用的jsp文件中,能过<%@taglib%>指令引入对应的EL函数
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/el" prefix="el" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
${el:filter('<script type="text/javascript">while(true){window.alert("haha");}</script>')}<br/>
</body>
</html>
五、JSTL中的常用EL函数
转小写:${fn:toLowerCase("ww.ITCAST.cn")}<br/>
转大写:${fn:toUpperCase("ww.ITCAST.cn")}<br/>
去空格前的长度:${fn:length(" www.itcast.cn ")}<br/>
去空格后的长度:${fn:length(fn:trim(" www.itcast.cn "))}<br/>
*拆分字符串:${fn:split("www.itcast.cn",".")[2]}<br/>
<%
String[] sArr = {"www","itcast","cn"};
pageContext.setAttribute("SARR",sArr);
%>
*合并字符串:${fn:join(SARR,"#")}<br/>
查询字符串:${fn:indexOf("www.itcast.cn","it")}<br/>
<%-- 找到返回首字母的索引号,从0开始,找不找返回-1 --%>
包函字符串:${fn:contains("www.itcast.cn","itcast")}<br/>
<%-- 找到返回true,否则返回false--%>
指定字符串开始:${fn:startsWith("http://localhost:8080/day17/welcome.jsp","http://")}<br/>
指定字符串结束:${fn:endsWith("http://localhost:8080/day17/welcome.jsp",".jsp")}<br/>
替换字符串:${fn:replace("www.itcast.cn",".","@")}<br/>
*截取字符串:${fn:substring("http://localhost:8080/day17/welcome.jsp",7,16)}<br/>
截取字符串后:${fn:substringAfter("http://localhost:8080/day17/welcome.jsp","8080")}<br/>
截取字符串前:${fn:substringBefore("http://localhost:8080/day17/welcome.jsp","8080")}<br/>