- EL表达式
- EL:Expression Language的缩写,表达式语言。
- 语法:${标识符}
- 作用:替换掉JSP中的java表达式<%=%>
- 如何获取数据
- 从域中获取数据,并把数据显示在页面上。没找到返回"",不会出现控制指针异常。
- 例如pageContext.setAttribute("p",person); ${p.name}
- 这个EL表达式相当于:
- Java:
- Person p = pageContext.findAttribute("p");
- out.write(p.getName());
- 注意p的域对象是哪个, EL会调用pageContext.findAttribute(标识符).分别从四个域(page.、request、session、application)查找标识符对应的对象,找到则返回对象,找不到则返回空字符串"".例如:${user}
- 例如pageContext.setAttribute("p",person); ${p.name}
- “.”点运算符
- 调用getter方法。例如${p.name},相当于调用了getter方法getName。
- 调用getter方法。例如${p.name},相当于调用了getter方法getName。
- []运算符
- .运算符能做的,它都能做。${p.name}=${p['name']}=${p["name"]}
- .运算符不能做的,它也能做(能做不符合java命名规范的数值的获取)。
- 例如:${list[0]}、
- ${header['Accept-Encoding']}这里面的0和-都是不符合java命名规范的,点运算符不能做。
- ${map.key} : 获得map集合中指定key的值
- 例如:${list[0]}、
- .运算符能做的,它都能做。${p.name}=${p['name']}=${p["name"]}
- 从域中获取数据,并把数据显示在页面上。没找到返回"",不会出现控制指针异常。
- 执行运算:利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,
- EL表达式中的运算符
- ${user == null}
- ${5/3}结果为1.${5%3}结果为2
- empty:
- 能判断表达式是否是null或者""字符串(不会忽略首尾空格)。是的话返回true。
- 一个数组、集合,没有元素,${empty list}结果仍然为true。能判断这个集合是否有无元素。
- 三元表达式
- 格式:返回布尔类型的表达式?真时执行:假时执行
- EL表达式中的运算符
- 获取web开发常用对象
- EL表达式定意义了一些隐式对象,利用这些隐式对象,就可以获得这些对象中的数据
-
- 语法:${隐式对象名称} :获得对象的引用
- EL中的11个隐式对象
- pageContext:代表javax.servlet.jsp.PageContext对象本身 其余10个都是代表Map类型
- 方法:例如${pageContext.request},就是 pageContext 调用了getRequest()方法,点代表get。
- 还可以继续${pageContext.request.contextPath} 获得当前应用的路径,例如结果为/day09,动态获取了当前应用的上下文。
- pageScope:代表的是一个Map。页面范围的域对象中的Map
- <%
- pageContext.setAttribute("user","page");
- %>
- ${user}==${pageScope.user}<br/>
- <%
- session.setAttribute("user","session");
- %>
- ${user}==${sessionScope.user}
- requestScope:代表request域中用于保存属性的Map对象
- sessionScope:代表session域中用于保存属性的Map对象
- applicationScope:代表application域中用于保存属性的Map对象
- param:代表的是一个Map。(适合用于单一请求参数)请求参数的Map key:请求参数名 value:请求参数值String
- <!-- http://localhost:8080/day09/el/3.jsp?username=abc -->,这样获得单一请求参数:${param.username}
- paramValues: 代表的是一个Map。(适合用于重名的请求参数)请求参数的Map key:请求参数名 value:请求参数值数组String[]
- <!-- http://localhost:8080/day09/el/3.jsp?username=abc&username=def -->
- ${paramValues.username[0]}<br/>
- ${paramValues.username[1]}<br/>
- header:代表的是一个Map。(适合用于单一请求头)请求头的Map key:请求头名 value:请求头值String
- ${header['Accept-Encoding']}
- headerValues: 代表的是一个Map。(适合用于重名的请求头)请求头的Map key:请求头名 value:请求头值数组String[]
- ${headerValues['Accept-Encoding'][0]}
- cookie:代表也是一个Map。key:cookie的name;value:cookie对象本身
- ${cookie.JSESSIONID.value}
-
- 要打出cookie的JSESSION的id,过程是先获得cookie对象本身,cookie.JSESSION.value( cookie.JSESSION 是cookie的key,指向的是对象本身,想要得到),
- initParam:代表一个Map。key:参数名 value:参数值String(web.xml--所有web应用全局参数)
- ${initParam.encoding}
- pageContext:代表javax.servlet.jsp.PageContext对象本身 其余10个都是代表Map类型
- 注意:使用隐式对象的范围,例如name存在于sessionScope中,不能放在requestScope中。
- 调用Java方法
- EL表达式允许用户开发自定义EL函数,用于JSP页面中通过EL调用Java类的方法。
- 例如:编写一个类:定义一个静态方法
- package com.itheima.functions;
- public class StringUtil {
- public static String toUpperCase(String str){
- return str.toUpperCase();
- }
- public static String connect(String s1,String s2){
- return s1+s2;
- }
- }
- 在WEB-INF目录下建立一个扩展名为tld(Tag Libary Defination)的xml文件。(EL函数与具体类的方法进行一个映射)
- (参考Tomcat中的例子)
- <?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>myfn</short-name>
- <uri>http://www.itheima.com/jsp/functions</uri>
- <function>
- <description>Converts the string to uppercase</description>
- <name>toUpperCase</name>
- <function-class>com.itheima.functions.StringUtil</function-class>
- <function-signature>java.lang.String toUpperCase( java.lang.String )</function-signature>
- </function>
- <function>
- <name>connect</name>
- <function-class>com.itheima.functions.StringUtil</function-class>
- <function-signature>java.lang.String connect( java.lang.String,java.lang.String )</function-signature>
- </function>
- </taglib>
- 在web.xml中将tld的实际存放路径与tld中的uri进行绑定(可选的:前提是你把tld文件放到了WEB-INF目录下)
- <jsp-config>
- <taglib>
- <taglib-uri>http://www.itheima.com/jsp/functions</taglib-uri>
- <taglib-location>/WEB-INF/myfn.tld</taglib-location>
- </taglib>
- </jsp-config>
- 在JSP中使用自定义的函数
- 使用前:通过taglib指令,引入
- Tip:
- SUN提供的标准的EL函数。全都是与String有关
- 属于JSTL的一部分:(Java Standard Tag Libary)
- core:核心
- fmt:格式化
- xml:操作xml
- sql:操作数据库
- functions:EL函数
- 前提:使用JSTL,导入jar包:jstl.jar standard.jar
- 例如:编写一个类:定义一个静态方法
- EL表达式允许用户开发自定义EL函数,用于JSP页面中通过EL调用Java类的方法。
- JSTL中的Core标签:c:if c:forEach
- 1、c:if:如同java中的if
- 属性:
- test:必须的。要求返回值是boolean的表达式(EL或Java表达式)。如果为true,则主体内容显示
- var:存放结果的变量名
- scope:存放结果的域范围。默认是page。
- 属性:
- 2、c:forEach:循环遍历(重复执行主体内容)
- 属性:
- items:要遍历的对象。数组、List、Set、Map、Enumeration等
- begin:遍历的items如果有的话,代表索开始引号
- end:遍历的items如果有的话,代表索结束引号
- var:存放结果的变量名
- step:步长
- varStatus:指定一个变量,该变量引用一个对象
- 该对象有以下方法:
- getIndex():返回当前遍历的元素的索引
- getCount():返回当前遍历的元素的索引+1
- isFirst():返回当前遍历的元素是不是第一个
- isLast():返回当前遍历的元素是不是最后一个
- 属性:
- 1、c:if:如同java中的if
JavaWeb-EL表达式
最新推荐文章于 2024-04-15 23:23:26 发布