EL表达式

1. 快速入门

语法格式

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html>
<head>
<title>EL表达式1</title>
</head>
<body>
	<%
		request.setAttribute("request_xxx", "request");
	%>
	${request_xxx}
</body>
</html>

在这里插入图片描述

四大域

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html>
<head>
<title>EL表达式1</title>
</head>
<body>
	<%
		pageContext.setAttribute("xxx", "pageContext_xxx");
		request.setAttribute("xxx", "request_xxx");
		session.setAttribute("xxx", "session_xxx");
		application.setAttribute("xxx", "application_xxx");
	%>
	${xxx}
</body>
</html>

在这里插入图片描述
注释第一句:
在这里插入图片描述
注释第二句:
在这里插入图片描述
注释第三句:
在这里插入图片描述
注释第四句:
在这里插入图片描述
因为会话还没有消失,所以不会显示application。如果EL表达式为空的话不会显示

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html>
<head>
<title>EL表达式1</title>
</head>
<body>
	<%
		pageContext.setAttribute("xxx_1", "pageContext_xxx");
		request.setAttribute("xxx_2", "request_xxx");
		session.setAttribute("xxx_3", "session_xxx");
		application.setAttribute("xxx_4", "application_xxx");
	%>
	${xxx}<br>
	${pageScope.xxx_1 }<br>
	${requestScope.xxx_2 }<br>
	${sessionScope.xxx_3 }<br>
	${applicationScope.xxx_4 }
</body>
</html>

在这里插入图片描述

JavaBean导航

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ page import="com.rjxy.bean.*" %>
<!DOCTYPE html>
<html>
<head>
<title>javabean导航</title>
</head>
<body>
	<%
		Street s = new Street();
		s.setCity("pd");
		s.setDoor("xc");
		Employee emp = new Employee();
		emp.setId("666");
		emp.setName("joncy");
		emp.setStreet(s);
		request.setAttribute("emp1", emp);
	%>
	${requestScope.emp1.street.city }<br>
	${emp1.street.city }
</body>
</html>

在这里插入图片描述
注:requestScope.emp1.street.city就相当于request.getAttribute(“emp1”).getStreet().getCity(); 所以说只要对应的对象中再有一个getXxx()方法就能够调用,一定要符合规范,而这个规范就是Javabean的规范

2. 定义

EL是JSP内置的表达式语言,也就是说能够直接用,不用导入包啥的!jsp2.0开始,不让再使用java脚本,而是使用el表达式和动态标签来替代java脚本!EL替代的是<%= … %>,也就是说,EL只能做输出,但是没有java脚本强大,既然推出EL表达式,应该宗旨就是使用标签代替所有的代码!但要注意EL表达式只能完成输出,要想进行设置等操作得用JSTL。

3. EL运算符

在这里插入图片描述
在这里插入图片描述

4. 11个内置对象

  • EL可以输出的东西都在11个内置对象中!11个内置对象,其中10个是Map!Map有其自己访问特点,map对象.key。pageContext不是map,它就是PageContext类型,1个项9个

  • resquestScope、sessionScope、applicationScope、pageScope就是其中的四个

  • param:类型<String,String>对应参数,它是一个Map,其中key参数名,value是参数值,适用于单值的参数。等同于request.getParameter

    <body>
    	${param.username }
    </body>
    

    在这里插入图片描述

  • paramValues:<String,String[]>对应参数,它是一个Map,其中key参数名,value是多个参数值,适用于多值的参数。其返回的是一个集合,如果直接访问其名字,则打印哈希值。必须带有下标。如下图。

<body>
	${param.username }<br/>
	${paramValues.hobbies }<br/>
</body>

在这里插入图片描述

<body>
	${param.username }<br/>
	${paramValues.hobbies }<br/>
	${paramValues.hobbies[0] }<br/>
</body>

在这里插入图片描述

  • header:对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值请求头。下图这个例子很典型,User-Agent作为key值,有‘-’符号,EL表达式会将其解释为减法操作,所以这时候只能用另外一种访问方式。
<body>
	${header['User-Agent'] }
</body>

在这里插入图片描述

  • headerValues:对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值请求头
  • initParam:获取内的参数!
<body>
	${header['User-Agent'] }<br/>
	${initParam.param1 }
</body>

在这里插入图片描述

  • cookie:Map<String,Cookie>类型,其中key是cookie的name,value是cookie对象。 ${cookie.username.value}
    在这里插入图片描述
<body>
	${cookie.JSESSIONID.value }<br/>
	${cookie.JSESSIONID.name }<br>
	${cookie.JSESSIONID }<br>
</body>
  • pageContext:它是PageContext类型!${pageContext.request.contextPath}
<body>
	${pageContext.request.contextPath}<br/>
	${pageContext.request.session.id}<br/>
	${pageContext.request.scheme}<br/>
	${pageContext.request.method}<br/>
</body>

在这里插入图片描述

5. 函数库

EL的javabean导航刚才我们已经看过了,它不能调用方法。但导入JSTL提供的函数库可以。要想用它需要导入jar包

  • 导入标签库
    在这里插入图片描述
    用WinRAR打开:
    在这里插入图片描述
    将它复制到外面用笔记本打开:
    在这里插入图片描述
  • JSTL提供的函数库
JSTL提供的EL函数作用
String toUpperCase(String input)把参数转换成大写
String toLowerCase(String input)把参数转换成小写
int indexOf(String input, String substring)从大串,输出小串的位置!
boolean contains(String input, String substring)查看大串中是否包含小串
boolean containsIgnoreCase(String input, String substring)忽略大小写的,是否包含
boolean startsWith(String input, String substring)是否以小串为前缀
boolean endsWith(String input, String substring)是否以小串为后缀
String substring(String input, int beginIndex, int endIndex截取子串
String substringAfter(String input, String substring)获取大串中,小串所在位置后面的字符串
substringBefore(String input, String substring)获取大串中,小串所在位置前面的字符串
String escapeXml(String input)把input中“<”、">"、"&"、"’"、""",进行转义
String trim(String input)去除前后空格
String replace(String input, String substringBefore, String substringAfter)替换
String[] split(String input, String delimiters)分割字符串,得到字符串数组
int length(Object obj)可以获取字符串、数组、各种集合的长度!
String join(String array[], String separator)联合字符串数组!
  • 案例
<%@ page language="java" import="java.util.*"
	contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试</title>
</head>
<body>
	<%
		String[] strs = {"a","b","c"};
		List list = new ArrayList();
		list.add("a");
		pageContext.setAttribute("arr", strs);
		pageContext.setAttribute("list", list);
	%>
	${fn:length(arr) }
	<br> ${fn:toLowerCase("ABC") }
	<br> ${fn:contains("ABC","a") }
	<br> ${fn:indexOf("ABC","A") }
</body>
</html>

在这里插入图片描述

  1. 自定义函数库
  • 写一个java类,类中可以定义0-N个方法,但必须是静态,而且必须是由返回值的

    package com.test;
    
    public class MyFunction {
    	public static String fun() {
    		return "自定义函数库";
    	}
    }
    
    
  • 写一个tld文件,在JSTL提供的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>user</description>
      <display-name>defineFunction</display-name>
      <tlib-version>1.0</tlib-version>
      <short-name>it</short-name>
      <uri>http://www.joncy.com/el/functions</uri>
      
       <function>
        <name>fun</name>
        <function-class>com.test.MyFunction</function-class>
        <function-signature>java.lang.String fun()</function-signature>
      </function>
    </taglib>
    
    <%@ page language="java" import="java.util.*"
    	contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%@ taglib prefix="it" uri="/WEB-INF/tlds/joncy.tld"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>测试</title>
    </head>
    <body>
    	${it:fun() }
    </body>
    </html>
    

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值