EL表达式:
EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。
EL注意事项:
- 没有空指针异常
- 没有索引越界异常
- 没有字符串凭拼接效果
- EL表达式除了能在四大域中获取数据,同时它可以访问其他隐式对象,并且访问对象有返回值的方法
基本语法:
EL表达式的语法格式: ${表达式内容}
Java代码块 | JSP表达式 | EL表达式 |
---|---|---|
<% |
<%=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隐式对象 | 备注 |
---|---|---|---|
PageContext | Javax.serlvet.jsp.PageContext | PageContext | 完全一样 |
ApplicationScope | Java.util.Map | 没有 | 应用层范围 |
SessionScope | Java.util.Map | 没有 | 会话范围 |
RequestScope | Java.util.Map | 没有 | 请求范围 |
PageScope | Java.util.Map | 没有 | 页面层范围 |
Header | Java.util.Map | 没有 | 请求消息头key,值是value(一个) |
HeaderValues | Java.util.Map | 没有 | 请求消息头key,值是数组(一个头多个值) |
Param | Java.util.Map | 没有 | 请求参数key,值是value(一个) |
ParamValues | Java.util.Map | 没有 | 请求参数key,值是数组(一个名称多个值) |
InitParam | Java.util.Map | 没有 | 全局参数,key是参数名称,value是参数值 |
Cookie | Java.util.Map | 没有 | Key是cookie的名称,value是cookie对象 |
JSTL:
JSTL的全称是:JSP Standard Tag Libary。它是JSP中标准的标签库。它是由Apache实现的。
作用:
给开发人员提供通用的标签库,取代JSP页面上的代码,提高代码可读性,降低维护性
JSTL的组成:
组成 | 作用 | 说明 |
---|---|---|
Core | 核心标签库。 | 通用逻辑处理 |
Fmt | 国际化有关。 | 需要不同地域显示不同语言时使用 |
Functions | EL函数 | EL表达式可以使用的方法 |
SQL | 操作数据库。 | 不用 |
XML | 操作XML。 | 不用 |
使用要求:
要想使用JSTL标签库,需要添加jar包。
核心标签库
标签名称 | 功能分类 | 分类 | 作用 |
---|---|---|---|
|
流程控制 | 核心标签库 | 用于判断 |
|
流程控制 | 核心标签库 | 用于多个条件判断 |
|
迭代操作 | 核心标签库 | 用于循环遍历 |
演示:
<%@ 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”)}
2 ${fn: indexOf (“2211221”,”21”)}
3 ${fn: indexOf (“Tomcat”,”Mike”)}
其输出结果为:
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”)}
2 ${ fn: replace(“2008/1/9”,”/”,”-”)}
其输出结果为:
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)}
2 ${ fn: substring (“Tomcat”,3,6)}
其输出结果为:
1 Tom
2 cat
fn:substringBefore函数:
fn:substringBefore函数用于获取源字符串中指定子字符串之前的子字符串,其语法为:
fn:substringBefore(String source,String target) ----String
以上source参数指定源字符串,target参数指定子字符串,返回类型为String。如果在源字符串中不包含特定子字符串,就返回空字符串。
例如对于以下EL表达式:
1 ${ fn: substringBefore (“Tomcat”,”cat”)}
2 ${ fn: substringBefore (“mydata.txt”,”.txt”)}
其输出结果为:
1 Tom
2 mydata
fn:substringAfter函数:
fn: substringAfter函数用于获取源字符串中指定子字符串之后的子字符串,其语法为:
fn: substringAfter (String source,String target) ----String
以上source参数指定源字符串,target参数指定子字符串,返回类型为String。如果在源字符串中不包含特定子字符串,就返回空字符串。
例如对于以下EL表达式:
1 ${ fn: substringAfter (“Tomcat”,”Tom”)}
2 ${ fn: substringAfter (“mydata.txt”,” mydata.”)}
其输出结果为:
1 cat
2 txt
fn:split函数:
fn:split函数用于将源字符串拆分为一个字符串数组,其语法为:
fn: split (String source,String delimiter) ----String[]
以上source参数指定源字符串,delimiter参数指定用于拆分源字符串的分隔符,返回类型为String[]。如果在源字符串中不包含delimiter参数指定的分隔符,或者delimiter参数为null,那么在返回的字符串数组中只有一个元素,为源字符串。
例如对于以下EL表达式:
${token}
其输出结果为:
www
mywebsite
org
再例如对于以下代码:
${strs[0]}
其输出结果为:
www.mywebsite.org
fn:join函数:
fn:join函数用于将源字符串数组中的所有字符串连接为一个字符串,其语法为:
fn:join(String source[],String separator) ----String
以上source参数指定源字符串数组,separator参数指定用于连接源字符串数组中的各个字符串的分隔符,返回类型为String。
例如对于以下代码:
<%
String strs[] = {“www”,”mywebsite”,”org”};
%>
${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函数的行为与标签的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.jsp中的以下代码:
1.${fn:escapeXml("表示粗体字") }
2.
3.${“表示粗体字”}
其输出结果为:
1.表示粗体字
2.表示粗体字
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”%>