EL表达式简介

ぐ巨炮叔叔 提交于 2020-01-18 21:52:58

简介:

  • 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>
      &lt;c:if test="${toUpperCase(name)}">
    </example>
  </function>
</taglib>

3.在jsp中引入自己创建的函数库

<%@taglib prefix="my" uri="/WEB-INF/el/my.tld" %>

4.使用自定义的函数

${my:toUpperCase("hello") }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!