EL表达式

EL表达式:

EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。

EL注意事项:
  • 没有空指针异常
  • 没有索引越界异常
  • 没有字符串凭拼接效果
  • EL表达式除了能在四大域中获取数据,同时它可以访问其他隐式对象,并且访问对象有返回值的方法
基本语法:

EL表达式的语法格式: ${表达式内容}

Java代码块JSP表达式EL表达式
<%<br/> <br/> String message = (String)request.getAttribute("message");<br/> out.write(message);<br/>%><%=request.getAttribute("message")%>${message}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--向域对象添加数据--%>
<% request.setAttribute("username", "itzhuzhu");%>

<%--三种方式获取数据--%>
Java代码块获取 <%out.println(request.getAttribute("username"));%><br>

JSP表达式获取 <%=request.getAttribute("username")%><br>

EL表达式:${username}
</body>
</html>

通过上面我们可以看出,都可以从请求域中获取数据,但是EL表达式写起来是最简单的方式。这也是以后我们在实际开发中,当使用JSP作为视图时,绝大多数都会采用的方式。

EL获取数据类型:
%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    
    <title>Title</title>
</head>
<body>
<%--获取基本数据类型--%>
<% pageContext.setAttribute("num", 23);%>
基本数据类型:${num}<br>

<%--获取自定义对象类型--%>
<%
    Student2 student = new Student2("itzhuzhu", 23);
    pageContext.setAttribute("student", student);
%>
自定义对象:${student}<br>
${student.username}
${student.age}

<%--获取数组类型--%>
<%
    String[] arr = {"呵呵", "哈哈", "呵呵"};
    pageContext.setAttribute("arr", arr);
%>
数组:${arr}<br>


<%--获取集合--%>
<%
    ArrayList<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
%>
List集合:${list}<br>
${list[0]}<br>

<%
    HashMap<String, Student2> hashMap = new HashMap<>();
    hashMap.put("a", new Student2("韩信", 11));
    hashMap.put("a", new Student2("李白", 12));
    pageContext.setAttribute("hashMap", hashMap);
%>%

Map集合:${hashMap}<br>


<%--获取四大域对象中的数据--%>

<%
    pageContext.setAttribute("username", "itzhuzhu");
    request.setAttribute("username", "itzhuzhu");
    session.setAttribute("username", "itzhuzhu");
    application.setAttribute("username", "itzhuzhu");
%>
</body>
</html>
EL运算符:

其他的和java一样

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    String s = null;
    String s2 = "";
    int[] arr = {};
%>
${empty s}<br>
${empty s2}<br>
${empty arr}<br>

三元运算符
<%
    pageContext.setAttribute("gender", "girl");
%>

<input type="radio" name="gender" value="boy"${gender == "boy"? "checked":""}><input type="radio" name="gender" value="girl"${gender == "girl"? "checked":""}>></body>
</html>
隐式对象介绍:

EL表达式提供的隐式对象,可以不声明直接来使用,它和JSP的隐式对象不是一回事:

EL中的隐式对象类型对应JSP隐式对象备注
PageContextJavax.serlvet.jsp.PageContextPageContext完全一样
ApplicationScopeJava.util.Map没有应用层范围
SessionScopeJava.util.Map没有会话范围
RequestScopeJava.util.Map没有请求范围
PageScopeJava.util.Map没有页面层范围
HeaderJava.util.Map没有请求消息头key,值是value(一个)
HeaderValuesJava.util.Map没有请求消息头key,值是数组(一个头多个值)
ParamJava.util.Map没有请求参数key,值是value(一个)
ParamValuesJava.util.Map没有请求参数key,值是数组(一个名称多个值)
InitParamJava.util.Map没有全局参数,key是参数名称,value是参数值
CookieJava.util.Map没有Key是cookie的名称,value是cookie对象
JSTL:

JSTL的全称是:JSP Standard Tag Libary。它是JSP中标准的标签库。它是由Apache实现的。

作用:

给开发人员提供通用的标签库,取代JSP页面上的代码,提高代码可读性,降低维护性

JSTL的组成:
组成作用说明
Core核心标签库。通用逻辑处理
Fmt国际化有关。需要不同地域显示不同语言时使用
FunctionsEL函数EL表达式可以使用的方法
SQL操作数据库。不用
XML操作XML。不用
使用要求:

要想使用JSTL标签库,需要添加jar包。

核心标签库

标签名称功能分类分类作用
<c:if>流程控制核心标签库用于判断
<c:choose> ,<c:when>,<c:otherwise>流程控制核心标签库用于多个条件判断
<c:foreache>迭代操作核心标签库用于循环遍历

演示:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--导入jstl标签库 --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL的常用标签</title>
  </head>
  <body>
    <%-- c:if  c:choose   c:when c:otherwise --%>
    <% pageContext.setAttribute("score","F"); %>
    <c:if test="${pageScope.score eq 'A' }">
    	优秀
    </c:if>
    <c:if	test="${pageScope.score eq 'C' }">
    	一般
    </c:if>
    <hr/>
    <c:choose>
    	<c:when test="${pageScope.score eq 'A' }">
    		AAA
    	</c:when>
    	<c:when test="${pageScope.score eq 'B' }">BBB
    	</c:when>
    	<c:when test="${pageScope.score eq 'C' }">CCC
    	</c:when>
    	<c:when test="${pageScope.score eq 'D' }">DDD
    	</c:when>
    	<c:otherwise>其他</c:otherwise>
    </c:choose>
    
    <%-- c:forEach 它是用来遍历集合的
    	 属性:
    	 	items:要遍历的集合,它可以是EL表达式取出来的
    	 	var:把当前遍历的元素放入指定的page域中。 var的取值就是key,当前遍历的元素就是value
    	 		注意:它不能支持EL表达式,只能是字符串常量
    	 	begin:开始遍历的索引
    	 	end:结束遍历的索引
    	 	step:步长。i+=step
    	 	varStatus:它是一个计数器对象。里面有两个属性,一个是用于记录索引。一个是用于计数。
    	 			   索引是从0开始。计数是从1开始
    --%>
    <hr/>
    <% List<String> list = new ArrayList<String>();
       list.add("AAA");
       list.add("BBB");
       list.add("CCC");
       list.add("DDD");
       list.add("EEE");
       list.add("FFF");
       list.add("GGG");
       list.add("HHH");
       list.add("III");
       list.add("JJJ");
       list.add("KKK");
       list.add("LLL");
       pageContext.setAttribute("list",list);
     %>
	<c:forEach items="${list}" var="s" begin="1" end="7" step="2">
    	${s}<br/>
    </c:forEach>
    <hr/>
    <c:forEach begin="1" end="9" var="num">
    	<a href="#">${num}</a>
    </c:forEach>
    <hr/>
    <table>
    	<tr>
    		<td>索引</td>
    		<td>序号</td>
    		<td>信息</td>
    	</tr>
    <c:forEach items="${list}" var="s" varStatus="vs">
    	<tr>
    		<td>${vs.index}</td>
    		<td>${vs.count}</td>
    		<td>${s}</td>
    	</tr>
    </c:forEach>
    </table>
  </body>
</html>
JSTL Functions标签库

在JSTL Functions标签库中提供了一组常用的EL函数,主要用于处理字符串,在JSP中可以直接使用这些函数。在JSP文件中使用Functions标签库,要先通过taglib指令引入该标签库:

<%@taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn” %>

Functions标签库中常用的16个函数的用法,这些函数的名字及作用与java.lang.String类中的相应方法很相似。例如:fn:indexOf函数与类String类的indexOf()方法的作用相似,fn:substring函数与String类的substring()方法的作用相似。

fn:contains函数:
fn:contains函数用于判断在源字符串中是否包含目标字符串,其语法为:
	fn:contains(String source,String target) -------boolean;
以上source参数指定源字符串,target参数指定目标字符串,返回类型为boolean。
例如对于以下EL表达式:
	${fn:contains(“Tomcat”,”cat”)}

${fn:contains(“Tomcat”,”CAT”)}
第一个EL表达式的值为true,第二个EL表达式的值为false。

fn:containsIgnoreCase函数:
fn:containsIgnoreCase函数用于判断在源字符串中是否包含目标字符串,并且在判断时忽略大小写,其语法为:
fn: containsIgnoreCase (String source,String target) -------boolean;
以上source参数指定源字符串,target参数指定目标字符串,返回类型为boolean。
例如对于以下EL表达式:
	${fn: containsIgnoreCase (“Tomcat”,”CAT”)}

${fn: containsIgnoreCase (“Tomcat”,”Mike”)}
第一个EL表达式的值为true,第二个EL表达式的值为false。

fn:startsWith函数:
fn:startsWith函数用于判断源字符串是否以指定的目标字符串开头,其语法为:
	fn:startsWith(String source,String target) ----boolean
以上source参数指定源字符串,target参数指定目标字符串,返回类型为boolean。
例如对于以下EL表达式:
	${fn: startsWith (“Tomcat”,”Tom”)}
	${fn: startsWith (“Tomcat”,”cat”)}
第一个EL表达式的值为true,第二个EL表达式的值为false。
fn:endsWith函数:

fn: endsWith函数用于判断源字符串是否以指定的目标字符串结尾,其语法为:
fn: endsWith (String source,String target) ----boolean
以上source参数指定源字符串,target参数指定目标字符串,返回类型为boolean。
例如对于以下EL表达式:
${fn: endsWith (“Tomcat”,”cat”)}
${fn: endsWith (“Tomcat”,”Tom”)}
第一个EL表达式的值为true,第二个EL表达式的值为false。

fn:indexOf函数:
fn:indexOf函数用于在源字符串中查找目标字符串,并返回源字符串中最先与目标字符串匹配的第一个字符的索引,如果在源字符串中不包含目标字符串,就返回-1,源字符串中的第一个字符的索引为0。 fn:indexOf函数的语法为:
	fn: indexOf (String source,String target) ----int
以上source参数指定源字符串,target参数指定目标字符串,返回类型为int。
例如对于以下EL表达式:
	1	${fn: indexOf (“Tomcat”,”cat”)}<br/>
	2	${fn: indexOf (“2211221”,”21”)} <br/>
	3	${fn: indexOf (“Tomcat”,”Mike”)} <br/>
其输出结果为:
	1	3
	2	1
	3	-1
fn:replace函数:
fn:replace函数用于把源字符串中的一部分替换为另外的字符串,并返回替换后的字符串。fn:replace函数的语法为:
	fn: replace (String source,String before,String after) ----String
以上source参数指定源字符串,before参数指定源字符串中被替换的子字符串,after参数指定用于替换的子字符串,返回类型为String。
例如对于以下EL表达式:
	1	${ fn: replace(“TomcAt”,”cAt”,”cat”)}<br/>
	2	${ fn: replace(“2008/1/9”,”/”,”-”)}<br/>
其输出结果为:
	1	Tomcat
	2	2008-1-9
fn:substring函数:
fn:substring函数用于获取源字符串中的特定子字符串,它的语法为:
	fn:substring(String source,int beginIndex,int endIndex) ------String
以上source参数指定源字符串,beginIndex参数表示子字符串中的第一个字符在源字符串中的索引,endIndex参数表示子字符串的最后一个字符在源字符串中的索引加1,返回类型为String,源字符串中的第一个字符的索引为0。
例如对于以下EL表达式:
	1	${ fn: substring (“Tomcat”,0,3)}<br/>
	2	${ fn: substring (“Tomcat”,3,6)}<br/>
其输出结果为:
	1	Tom
	2	cat
fn:substringBefore函数:
fn:substringBefore函数用于获取源字符串中指定子字符串之前的子字符串,其语法为:
	fn:substringBefore(String source,String target) ----String
以上source参数指定源字符串,target参数指定子字符串,返回类型为String。如果在源字符串中不包含特定子字符串,就返回空字符串。
例如对于以下EL表达式:
	1	${ fn: substringBefore (“Tomcat”,”cat”)}<br/>
	2	${ fn: substringBefore (“mydata.txt”,”.txt”)}<br/>
其输出结果为:
	1	Tom
	2	mydata
fn:substringAfter函数:
fn: substringAfter函数用于获取源字符串中指定子字符串之后的子字符串,其语法为:
	fn: substringAfter (String source,String target) ----String
以上source参数指定源字符串,target参数指定子字符串,返回类型为String。如果在源字符串中不包含特定子字符串,就返回空字符串。
例如对于以下EL表达式:
	1	${ fn: substringAfter (“Tomcat”,”Tom”)}<br/>
	2	${ fn: substringAfter (“mydata.txt”,” mydata.”)}<br/>
其输出结果为:
	1	cat
	2	txt
fn:split函数:
fn:split函数用于将源字符串拆分为一个字符串数组,其语法为:
	fn: split (String source,String delimiter) ----String[]
以上source参数指定源字符串,delimiter参数指定用于拆分源字符串的分隔符,返回类型为String[]。如果在源字符串中不包含delimiter参数指定的分隔符,或者delimiter参数为null,那么在返回的字符串数组中只有一个元素,为源字符串。
例如对于以下EL表达式:
	<c:set value=’${ fn: split (“www.mywebsite.org”,”.”)}’ var=”strs”/>
	<c:forEach var=”token” item=”${strs}”>
		${token}<br/>
	</c:forEach>

其输出结果为:
www
mywebsite
org
再例如对于以下代码:
<c:set value=’${ fn: split (“www.mywebsite.org”,”-”)}’ var=”strs”/>
${strs[0]}
其输出结果为:
www.mywebsite.org

fn:join函数:
fn:join函数用于将源字符串数组中的所有字符串连接为一个字符串,其语法为:
	fn:join(String source[],String separator) ----String
以上source参数指定源字符串数组,separator参数指定用于连接源字符串数组中的各个字符串的分隔符,返回类型为String。
例如对于以下代码:
	<%
	String strs[] = {“www”,”mywebsite”,”org”};

%>
<c:set value=”<%=strs%>” var=”strs”/>
${fn:join(strs,”.”)}
其输出结果为:
www. mywebsite. org

fn:toLowerCase函数:
fn:toLowerCase函数用于将源字符串中的所有字符改为小写,其语法为:
	fn:toLowerCase(String source)  -----String
以上source参数指定源字符串,返回类型为String。
例如对于以下EL表达式:
	fn:toLowerCase(“TomCat”)
其输出结果为:
	tomcat
fn:toUpperCase函数:
fn: toUpperCase函数用于将源字符串中的所有字符改为大写,其语法为:
	fn: toUpperCase (String source)  -----String
以上source参数指定源字符串,返回类型为String。
例如对于以下EL表达式:
	fn: toUpperCase (“TomCat”)
其输出结果为:
	TOMCAT
fn:trim函数:
fn:trim函数用于将源字符串中的开头和末尾的空格删除,其语法为:
	fn:trim(String source) ----String
以上source参数指定源字符串,返回类型为String。
例如对于以下EL表达式:
	fn:trim(“   Tomcat   ”)
以上EL表达式的值为“Tomcat”。
fn:escapeXml函数:
fn:escapeXml函数用于将源字符串中的字符“<”、“>”、“””和“&”等转换为转义字符,本书第1章的1.2节(HTML简介)介绍了转义字符的概念。fn:escapeXml函数的行为与<c:out>标签的escapeXml属性为true时的转换行为相同,fn:escapeXml函数的语法为:
fn:escapeXml(String source) ----String
以上source参数指定源字符串,返回类型为String。
例程18-1的out.jsp演示了fn:escapeXml函数的用法。

例程18-1 out.jsp
<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/functions” prefix=“fn”%>

out 1.${fn:escapeXml(" 表示粗体字") }
2.
3.${" 表示粗体字"}
对于out.jsp中的以下代码:
	1.${fn:escapeXml("<b>表示粗体字</b>") }<br/>

2.<c:out value=“表示粗体字” escapeXml=“true”></c:out>

3.${“表示粗体字”}

其输出结果为:
1.<b>表示粗体字</b>

2.<b>表示粗体字</b>

3.表示粗体字

fn:length函数:
fn:length函数用于返回字符串中的字符的个数,或者集合和数组的元素的个数,其语法为:
	fn:length(source) ---- int
以上source参数可以为字符串、集合或者数组,返回类型为int。
例程18-2的length.jsp演示了fn:length函数的用法。

例程18-2 length.jsp
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/functions” prefix=“fn”%>
<%@page import=“java.util.ArrayList”%>

length <% int[] array = {1,2,3,4}; ArrayList list = new ArrayList(); list.add("one"); list.add("two"); list.add("three"); %> 数组长度:${fn:length(array)}
集合长度:${fn:length(list)}
字符串长度:${fn:length("Tomcat")}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzhuzhu.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值