EL表达式
EL是JSP内置的表达式语言!
jsp2.0开始,不让再使用java脚本,而是使用el表达式和动态标签来替代java脚本!
EL替代的是<%= ... %>,也就是说,EL只能做输出!
EL表达式来读取四大域
${xxx},全域查找名为xxx的属性,如果不存在,输出空字符串,而不是null。
$
{pageScope.xxx}、$
{requestScope.xxx}、$
{sessionScope.xxx}、${applicationScope.xxx},指定域获取属性!
javaBean导航
<%
Address address = new Address();
address.setCity("北京");
address.setStreet("西三旗");
Employee emp = new Employee();
emp.setName("李四");
emp.setSalary(999999);
emp.setAddress(address);
request.setAttribute("emp", emp);
%>
<h3>使用el获取request域的emp</h3>
${requestScope.emp.address.street }<br/>
11个内置对象
EL可以输出的东西都在11个内置对象中!11个内置对象,其中10个是Map!pageContext不是map,它就是PageContext类型,1个项9个。
我们已经学习了四个【pageScope、requestScope、sessionScope、applicationScope】
param:对应参数,它是一个Map,其中key参数名,value是参数值,适用于单值的参数。
paramValues:对应参数,它是一个Map,其中key参数名,value是多个参数值,适用于多值的参数。
header:对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值请求头
headerValues:对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值请求头
initParam:获取<context-param>内的参数!
<context-param>
<param-name>xxx</param-name>
<param-value>XXX</param-value>
</context-param>
<context-param>
<param-name>yyy</param-name>
<param-value>YYY</param-value>
</context-param>
===================================
${initParam.xxx}
cookie:Map<String,Cookie>类型,其中key是cookie的name,value是cookie对象。 ${cookie.username.value}
pageContext:它是PageContext类型!项目名 = ${pageContext.request.contextPath}【重要】
EL表达式 | 说明 |
---|---|
${pageContext.request.queryString} | pageContext.getRequest().getQueryString(); |
${pageContext.request.requestURL} | pageContext.getRequest().getRequestURL(); |
${pageContext.request.contextPath} | pageContext.getRequest().getContextPath(); |
${pageContext.request.method} | pageContext.getRequest().getMethod(); |
${pageContext.request.protocol} | pageContext.getRequest().getProtocol(); |
${pageContext.request.remoteUser} | pageContext.getRequest().getRemoteUser(); |
${pageContext.request.remoteAddr} | pageContext.getRequest().getRemoteAddr(); |
${pageContext.session.new} | pageContext.getSession().isNew(); |
${pageContext.session.id} | pageContext.getSession().getId(); |
${pageContext.servletContext.serverInfo} | pageContext.getServletContext().getServerInfo(); |
EL运算符
运算符 | 说明 | 范例 | 结果 | ||
---|---|---|---|---|---|
+ | 加 | ${17+5} |
22 | ||
- | 减 | ${17-5} |
12 | ||
* | 乘 | ${17*5} |
85 | ||
/或div | 除 | ${17/5}或${17 div 5} |
3 | ||
%或mod | 取余 | ${17%5}或${17 mod 5} |
2 | ||
==或eq | 等于 | ${5==5}或${5 eq 5} |
true | ||
!=或ne | 不等于 | ${5!=5}或${5 ne 5} |
false | ||
<或lt | 小于 | ${3<5}或${3 lt 5} |
true | ||
>或gt | 大于 | ${3>5}或${3 gt 5} |
false | ||
<=或le | 小于等于 | ${3<=5}或${3 le 5} |
true | ||
>=或ge | 大于等于 | ${3>=5}或${3 ge 5} |
false | ||
&&或and | 并且 | ${true&&false}或${true and false} |
false | ||
!或not | 非 | ${!true}或${not true} |
false | ||
||或or | 或者 | ` ${true | false}或${true or false} ` | true | |
empty | 是否为空 | ${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回true。empty还可以与not或!一起使用。${not empty “”} |
true |
EL函数库(fn)
导入标签库:<%@ tablib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
功能 | 代码 |
---|---|
把参数转换成大写 | 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) |
把input中“<”、">"、"&"、"'"、""",进行转义 | String escapeXml(String 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) |
fn函数库使用案例
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
…
String[] strs = {"a", "b","c"};
List list = new ArrayList();
list.add("a");
pageContext.setAttribute("arr", strs);
pageContext.setAttribute("list", list);
%>
${fn:length(arr) }<br/><!--3-->
${fn:length(list) }<br/><!--1-->
${fn:toLowerCase("Hello") }<br/> <!-- hello -->
${fn:toUpperCase("Hello") }<br/> <!-- HELLO -->
${fn:contains("abc", "a")}<br/><!-- true -->
${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- true -->
${fn:contains(arr, "a")}<br/><!-- true -->
${fn:containsIgnoreCase(list, "A")}<br/><!-- true -->
${fn:endsWith("Hello.java", ".java")}<br/><!-- true -->
${fn:startsWith("Hello.java", "Hell")}<br/><!-- true -->
${fn:indexOf("Hello-World", "-")}<br/><!-- 5 -->
${fn:join(arr, ";")}<br/><!-- a;b;c -->
${fn:replace("Hello-World", "-", "+")}<br/><!-- Hello+World -->
${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!-- a-b-c -->
${fn:substring("0123456789", 6, 9)}<br/><!-- 678 -->
${fn:substring("0123456789", 5, -1)}<br/><!-- 56789 -->
${fn:substringAfter("Hello-World", "-")}<br/><!-- World -->
${fn:substringBefore("Hello-World", "-")}<br/><!-- Hello -->
${fn:trim(" a b c ")}<br/><!-- a b c -->
${fn:escapeXml("<html></html>")}<br/> <!-- <html></html> -->
自定义EL
1.写一个java类,类中可以定义0~N个方法,但必须是static,而且有返回值的!
package com.yuan.function;
/**
* @author Yuan-9826
*/
public class MyFunction {
public static String fun(){
return "第一个自定义函数";
}
}
2.WEB-INF目录下创建一个tld文件 /WEB-INF/tlds/mtfunction.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>yuan</description>
<display-name>yuan-function</display-name>
<!--版本-->
<tlib-version>1.0</tlib-version>
<!--建议的标签名-->
<short-name>y</short-name>
<!--地址 随便写 因为没联网-->
<uri>http://www.yuan.com/jsp/functions</uri>
<function>
<!--标签名-->
<name>fun</name>
<function-class>com.yuan.function.MyFunction</function-class>
<function-signature>java.lang.String fun()</function-signature>
</function>
</taglib>
3.在jsp页面中导入标签库 <%@ taglib prefix="it" uri="/WEB-INF/tlds/mtfunction.tld" %> isELIgnored="false"!!!
<%@ page language="java" contentType="text/html; charset=UTF-8" isELIgnored="false" pageEncoding="UTF-8" %>
<%@ taglib prefix="y" uri="/WEB-INF/tlds/myfunction.tld" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>${y:fun() }</h1>
</body>
</html>
4.在jsp页面中使用自定义的函数:${y:fun() }
网友评论