前言:由于通常情况下jstl和el表达式配合使用,因此将jstl和EL表达式放在一起讲解
一.jstl和EL定义
jstl即JavaServer Pages Standard Tag Library,JSP标准标签库。
表达式语言(EL)是 JSP 2.0 引入的一种计算和输出 Java 对象的简单语言。
二.为什么使用jstl和EL表达式
其实不使用jstl和el表达式也可以实现相应的功能,但是如果不使用的话就需要写大量java程序到jsp中,这使得jsp异常的复杂,令人抓狂。因此使用jstl和el表达式可以使得jsp代码变得简洁美观,使得代码维护起来更加容易。
三.如何使用EL表达式?
1.配置el表达式
(1)导入standard.jar。
(2)在需要使用 EL 语音的页面加上<%@ page isELIgnored="false" %>。
注意 <%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用 EL 语言。
注:目前大多使用的高版本Tomcat都是支持el表达式的,没必要去修改web.xml
2.el表达式的内置对象(重要)
pageScope、requestScope、sessionScope、applicationScope
假设在获取值是没有指定内置对象,那么默认从 pageScope 到 applicationScope依次扩大范围查找属性名。举例:
${requestScope.username}
在上边的一行代码中我制定了作用于requestScope,则此时他会直接去request数据域中查找username的值,但是当我不去指定时,此时程序会先去 page中找,找不到的话再去request中找。
3.el表达式的‘[ ]’和' . '运算符
(1)‘ . ’运算符最为常用,他等作用是获取相应的值如上边的案例是获取request数据域中的username值.
(2)‘[]’运算式当需要当要存取的属性名称中包含一些特殊字符时,必须使用‘[]’而不能使用‘.’
如:
${requestScope.user?name}(错误)
${requestScope["user?name"]}(正确)
(3)如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值
4.pageContext的作用
pageContextJSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext 等
举例:得到jsp所在项目名称
${pageContext.request.contextPath}
注:这在请求路径中使用绝对路径时经常用到
5.EL表达式的操作符
四.如何使用jstl
1.jstl的配置
(1)导入standard.jar和jstl.jar。
(2)在JSP页面上引入 JSTL 的引用,即:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2.常用标签解析(核心标签)
(1)<c:out>:用于在JSP中显示数据,和<%= ... >功能相似
基本语法:<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>
(2)<c:set>:用于保存数据
基本语法:<c:set var="<string>" value="<string>" target="<string>" property="<string>" scope="<string>"/>
(3)<c:remove>:标签用于移除一个变量
基本语法:<c:remove var="<string>" scope="<string>"/>
(4)<c:catch> 标签:主要用来处理产生错误的异常状况,并且将错误信息储存起来。
基本语法:<c:catch var="<string>">... </c:catch>
(5)<c:if>标签:判断表达式的值,如果表达式的值为 true 则执行其主体内容
基本语法:<c:if test="<boolean>" var="<string>" scope="<string>">...</c:if>
(6)<c:choose>、<c:when>、<c:otherwise>:这三个标签一般是配合使用,类似if{...}else if{...}else{....}
语法格式:
<c:choose>
<c:when test="<boolean>">
...
</c:when>
<c:when test="<boolean>">
...
</c:when>
...
...
<c:otherwise>
...
</c:otherwise>
</c:choose>
(7)<c:import>标签:检索一个绝对或相对 URL,然后将其内容暴露给页面,和<jsp:include>功能相似。
语法格式:
<c:import
url="<string>"
var="<string>"
scope="<string>"
varReader="<string>"
context="<string>"
charEncoding="<string>"/>
(8) <c:forEach>:基础迭代标签,接受多种集合类型。它封装了Java中的for,while,do-while循环。
基本语法:
<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
(9)<c:url>: 使用可选的查询参数来创造一个URL,当某个URL地址依据不同条件修改时,就能体现出<c:url>标签的真正作用了
(10)<c:param>:用来给包含或重定向的页面传递参数
(11)<c:redirect>:重定向至一个新的URL.
语法:<c:redirect url="<string>" context="<string>"/>
五.绪
jstl也提供了格式化标签、SQL标签、xml标签、jstl函数,但这些标签并不常用,这里不一一赘述,当用到时自行查找即可。
格式化标签:(<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>)
SQL标签:(<%@ taglib prefix="sql” uri="http://java.sun.com/jsp/jstl/sql" %>)
jstl函数(<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>)
六.实例代码 (根据体重判断你是不是胖子)
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2018/7/26
Time: 10:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table>
<c:forEach items="${requestScope.uwList}" var="uw">
<c:set var="weight" value="${uw.weight}"/>
<c:choose>
<c:when test="${weight<=100}">
<tr><td>${uw.username}</td><td>${uw.weight}</td><td>瘦子</td></tr>
</c:when>
<c:when test="${weight>100&&weight<=150}">
<tr><td>${uw.username}</td><td>${uw.weight}</td><td>正常</td></tr>
</c:when>
<c:when test="${weight>150&&weight<=200}">
<tr><td>${uw.username}</td><td>${uw.weight}</td><td>胖子</td></tr>
</c:when>
<c:when test="${weight>200}">
<tr><td>${uw.username}</td><td>${uw.weight}</td><td>大胖子</td></tr>
</c:when>
<c:otherwise>
<tr><td>${uw.username}</td><td>${uw.weight}</td><td>体重不合理</td></tr>
</c:otherwise>
</c:choose>
</c:forEach>
</table>
</body>
</html>