简介:
- EL表达式是JSP内置的表达式语言
- 从jsp2.0开始不建议使用java脚本,而是使用el表达式和动态标签来替代java脚本
EL替代的是<%= … %>脚本,也就是说EL只能做获取,使用格式:${xxx}
EL表达式来读取四大域
${xxx}:全域查找名为xxx的属性,如果不存在,则输出空字符串,而不是null
优先从pageScope中查找xxx属性,没有则继续查找更大的域,如果四大域都没有,则返回空字符串
${pageScope,xxx}:获取当前页面属性值
${reqeustScope.xxx}:获取当前请求属性值
${sessionScope.xxx}:获取当前会话属性值
${applicationScope.xxx}:获取当前应用上下文值
javaBean导航
当通过EL表达式获取到对象之后,可以通过"."继续获取下一层对象属性,实际使用的是对象的getter方法
${user.address.streat }:表示就是通过EL表达式获取User对象,然后通过getAddress()和getStreat()方法获取对象.
EL运算符
EL表达式内置对象
EL一共有11个内置对象,无需创建即可使用,这11个内置对象10个是Map类型,最后一个是pageContext对象
Map类型的EL表达式可以通过${map.key}获取对应kye的值,还可以通过map[‘key’]获取对应值
- 1.pageScope:从page页面获取值
${pageScope.xxx}:等同page.getAttritube(“xxx”) - 2.requestScope:从request获取值
${requestScope.xxx}:等同requestScope.getAttritube(“xxx”) - 3.sessionScope:从session获取值
${sessionScope.xxx}:等同sessionScope.getAttritube(“xxx”) - 4.applicationScope:从application获取值
${applicationScope.xxx}:等同applicationScope.getAttritube(“xxx”) - 5.param:用来获取请求参数,Map<String,String>类型,等同于reqeust.getParameter()
${param.username}:相当于reqeust.getParameter(“username”),返回一个对象 - 6.paramValues:用来获取请求参数,Map<String,String[]>类型,等同于reqeust.getParameterValues()
${paramValues.address}:相当于reqeust.getParameterValues(“address”),返回的是一个数组 - 7.header:用于获取请求头参数值,Map<String,String>类型,用法${header[‘User-Agent’]}
- 8.headerValues:用于获取请求头参数值,Map<String,String[]>类型,获取请求头值数组
- 9.initParam:用于获取配置的初始化参数,web.xml中配置的初始化参数
${initParam.xxx}获取初始化参数的值XXX
<context-param>
<param-name>xxx</param-name>
<param-value>XXX</param-value>
</context-param>
- 10.cookie:用于获取Cookie,Map<String,Cookie>类型,获取的是Cookie对象,而不是字符串
${cookie.JSESESSION.value}:获取sessionId值 - 11.pageContext:pageContext对象,可以通过它获取JSP其他的内置对象
${pageContext.reqeust.contextPath}:获取项目名(带下划线)
${pageContext.session.id}:pageContext.getSession().getId()
EL函数库(JSTL提供)
- 需要导包:jstl-*.jar
- 引入函数库:<%@ taglib prefix=“fn” uri=“http://java.sun.com/jsp/jstl/functions”%>
- 使用函数库函数,如:${fn:toUpperCase(“hello”) }
- String toUpperCase(String input):将参数转化大写
${fn:toUpperCase(“hello”)},输出HELLO - int indexOf(String input,String substring):获取参数中子串位置
${fn:indexOf(“hello”,“l”)},输出2
自定义函数库
1.编写Java类,所有的方法都是static,必须有返回值
package com.zgd.learn.jsp.el;
public class MyELFunction
{
public static String toUpperCase(String str)
{
return str.toUpperCase();
}
}
2.在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">
<description>自定义EL的描述</description>
<!-- display-name:显示信息 -->
<display-name>My functions</display-name>
<!-- tlib-version:版本信息 -->
<tlib-version>1.0</tlib-version>
<!-- short-name:建议使用的函数前缀,实际使用时可不用该前缀 -->
<short-name>my</short-name>
<!-- uri:自定义一个uri,通常为域名地址 -->
<uri>http://jsp.learn.com/jsp/jstl/functions</uri>
<!-- 表示一个函数,可以有多个function -->
<function>
<!-- description:自定义的方法描述,可不写 -->
<description>这是一个自定义的函数</description>
<!-- name:函数的方法名 -->
<name>toUpperCase</name>
<!-- function-class:函数最终调用的全类名 -->
<function-class>com.zgd.learn.jsp.el.MyELFunction</function-class>
<!-- function-signature:调用的方法结构,参数和返回值全部需要写全路径名 -->
<function-signature>java.lang.String toUpperCase(java.lang.String)</function-signature>
<!-- 自定义方法举例,可不写 -->
<example>
<c:if test="${toUpperCase(name)}">
</example>
</function>
</taglib>
3.在jsp中引入自己创建的函数库
<%@taglib prefix="my" uri="/WEB-INF/el/my.tld" %>
4.使用自定义的函数
${my:toUpperCase("hello") }
来源:CSDN
作者:Student108
链接:https://blog.csdn.net/Student108/article/details/104032782