「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」
1. EL表达式
EL(Expression Language)表达式:为了使JSP写起来更加简单。
格式:${}
三个作用:
- 获取数据
- 执行运算
- 获取web开发的常用对象
2. JSTL标签
JSTL(Java server pages standarded tag library,即JSP标准标签库)是一个JSP标签集合,它封装了JSP应用的通用核心功能,给Java Web开发人员提供了一个标准通用的标签库。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,整齐性,降低程序的维护难度,标签的功能和Java代码一样。
根据JSTL标签所提供的功能,可以将其分为5个类别。
- 核心标签
- 格式化标签
- SQL 标签
- XML 标签
- JSTL 函数
使用JSTL标签要导入的jar包
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
再把上面两个jar包放入E:\apache-tomcat-9.0.41\lib目录
核心标签详解
核心标签是最常用的 JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
| 标签 | 描述 |
|---|---|
<c:out> | 用于在JSP中显示数据,就像<%= ... > |
<c:set> | 用于保存数据 |
<c:if> | 与我们在一般程序中用的if一样 |
<c:choose> | 本身只当做<c:when>和<c:otherwise>的父标签 |
<c:when> | <c:choose>的子标签,用来判断条件是否成立 |
<c:otherwise> | <c:choose>的子标签,接在<c:when>标签后,当c:when标签判断为false时被执行 |
<c:forEach> | 基础迭代标签,接受多种集合类型 |
<c:forTokens> | 根据指定的分隔符来分隔内容并迭代输出 |
<c:catch> | 用来处理产生错误的异常状况,并且将错误信息储存起来 |
<c:import> | 检索一个绝对或相对 URL,然后将其内容暴露给页面 |
<c:param> | 用来给包含或重定向的页面传递参数 |
<c:redirect> | 重定向至一个新的URL. |
<c:remove> | 用于删除数据 |
<c:url> | 使用可选的查询参数来创造一个URL |
< c:if>标签
<c:if>标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。
语法格式
<c:if test="<boolean>" var="<string>" scope="<string>">
...
</c:if>
属性
<c:if>标签有如下属性:
| 属性 | 描述 | 是否必要 | 默认值 |
|---|---|---|---|
| test | 条件 | 是 | 无 |
| var | 用于存储条件结果的变量 | 否 | 无 |
| scope | var属性的作用域 | 否 | page |
测试<c:if>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入JSTL核心标签库,需要什么标签就引入什么标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<head>
<title>Title</title>
</head>
<body>
<h4>if测试</h4>
<hr>
<form action="jsp4.jsp" method="get">
<%--使用EL表达式获取参数的值
${param.参数名}
--%>
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登录">
</form>
<%--用JSTL标签实现if语句--%>
<c:if test="${param.username=='admin'}" var="isAdmin" scope="application">
<c:out value="管理员登录成功"></c:out>
</c:if>
<c:if test="${param.username==null}" var="notAdmin" scope="application">
<c:out value="请输入管理员账号"></c:out>
</c:if>
<c:if test="${param.username!='admin'&¶m.username!=null}" var="isAdmin" scope="application">
<c:out value="管理员登录失败,请重新输入"></c:out>
</c:if>
<c:out value="isAdmin"/>
</body>
</html>
< c:set>标签
<c:set>标签用于设置变量值和对象属性。
<c:set>标签会计算表达式的值,然后使用计算结果来设置 JavaBean 对象或 java.util.Map 对象的值。
语法格式
<c:set
var="<string>"
value="<string>"
target="<string>"
property="<string>"
scope="<string>"/>
属性
<c:set>标签有如下属性:
| 属性 | 描述 | 是否必要 | 默认值 |
|---|---|---|---|
| value | 要存储的值 | 否 | 主体的内容 |
| target | 要修改的属性所属的对象 | 否 | 无 |
| property | 要修改的属性 | 否 | 无 |
| var | 存储信息的变量 | 否 | 无 |
| scope | var属性的作用域 | 否 | Page |
注意:如果指定了target属性,那么property属性也需要被指定。
测试<c:set>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>c:set 标签实例</title>
</head>
<body>
<c:set var="score" value="85"/>
<c:out value="85/>
</body>
</html>
< c:choose>, < c:when>, < c:otherwise> 标签
-
<c:choose>标签与Java 里的switch语句的功能一样,用于在众多选项中做出选择判断。 -
switch语句中有case,而
<c:choose>标签中对应有<c:when>,两个都是用来判断 -
switch语句中有default,而
<c:choose>标签中有``<c:otherwise>`,判断为false时被执行
语法格式
<c:choose>
<c:when test="<boolean>">
...
</c:when>
<c:when test="<boolean>">
...
</c:when>
...
...
<c:otherwise>
...
</c:otherwise>
</c:choose>
==注:判断的顺序为从上到下,当有两个<c:when>判断都为true时,程序会执行上面的<c:when>标签里的语句==
属性
只有<c:when>标签有属性,属性如下:
| 属性 | 描述 | 是否必要 | 默认值 |
|---|---|---|---|
| test | 条件 | 是 | 无 |
测试三个标签
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--设置了一个变量var,值为60分--%>
<c:set var="score" value="${69}"/>
<c:choose>
<c:when test="${score>=90&&score<=100}">
<c:out value="成绩优秀"/>
</c:when>
<c:when test="${score>=80&&score<90}">
<c:out value="成绩优良"/>
</c:when>
<c:when test="${score>=70&&score<80}">
<c:out value="成绩还行"/>
</c:when>
<c:when test="${score>=60&&score<70}">
<c:out value="成绩及格"/>
</c:when>
<c:when test="${score>=0&&score<60}">
<c:out value="成绩不合格"/>
</c:when>
<c:otherwise>
<c:out value="您输入的不是分数"/>
</c:otherwise>
</c:choose>
</body>
</html>
< c:forEach>`标签
forEach 语法格式
<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
...
属性
<c:forEach>标签有如下属性:
| 属性 | 描述 | 是否必要 | 默认值 |
|---|---|---|---|
| var | 代表当前遍历的变量名称 | 否 | 无 |
| items | 要被循环的信息 | 否 | 无 |
| begin | 开始的元素(0=第一个元素,1=第二个元素) | 否 | 0 |
| end | 最后一个元素(0=第一个元素,1=第二个元素) | 否 | Last element |
| step | 每一次迭代的步长 | 否 | 1 |
| varStatus | 代表循环状态的变量名称 | 否 | 无 |
<c:forEach>标签测试
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h4>forEach测试</h4>
<hr>
<%
ArrayList<Object> people = new ArrayList<>();
people.add(0,"小红");
people.add(1,"小明");
people.add(2,"张三");
people.add(3,"李四");
people.add(4,"王五");
//把集合放进请求里面
request.setAttribute("list",people);
%>
<c:forEach items="${list}" var="peoples" begin="0" step="1">
<c:out value="${peoples}"/>
</c:forEach>
</body>
</html>
3.JSP标签
JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。
jsp的常用标签有以下三个
-
<jsp:include>标签 ;把另外一个资源的输出内容插入进当前JSP页面的输出内容之中<jsp:include page="/common/header.jsp"></jsp:include> <h2>网页主体</h2> <jsp:include page="/common/footer.jsp"></jsp:include>将两个页面拼接到本页面,本质还是三个页面
-
<jsp:forward>标签 :把请求转发给另外一个资源。<%--使用<jsp:forward>标签跳转到forwarddemo02.jsp--%> <jsp:forward page="/hello.jsp"/> -
<jsp:param>标签:向资源传递参数。<%--使用<jsp:param>标签向被包含的页面传递参数--%> <jsp:include page="/hello.jsp"> <jsp:param name="parm1" value="hello" /> <jsp:param name="parm2" value="gacl" /> </jsp:include> <%--使用<jsp:param>标签向要跳转的页面传递参数--%> <jsp:forward page="/hello1.jsp"> <jsp:param name="ref1" value="hello" /> <jsp:param name="ref2" value="gacl" /> </jsp:forward>