1、什么是JSTL标签
- JSTL是java中的一个定制标记库集合。
- JSP标签库(JSTL)是一个JSP标签库集合,它封装了JSP应用的通用核心功能。
- 根据JSTL标签所提供的的功能,可将其分为5个类别:
核心标签
格式化标签
SQL 标签
XML标签
JSTL函数
2、JSTl环境搭建
- 下载jstl的jar包(导入到项目中)
从Apache的标准标签库中下载的二进制包(jakarta-taglibs-standard-current.zip)。
下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/ - 如果是maven管理工程(只需引入相关依赖机会自动下载)
#mvnrepository中的jstl依赖地址 https://mvnrepository.com/artifact/jstl/jstl/1.2
- 此处我们以maven依赖为例
<!-- https://mvnrepository.com/artifact/jstl/jstl --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
- 在JSP页面引入jar包
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3、为什么要使用JSTL标签
-
实现JSP页面代码的复用
基于标签库原理,重复率较高的代码支持复用,提高效率。
-
书写JSP页面的可读性强
长得很像XML,方便前端检查和参与修改。
-
举个简单的例子说明为什么要使用JSTL标签
-
利用JSP编写的login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="login.jsp" method="post"> <input type="text" name="user" value="${param.user}" /> <input type="submit" value="提交" /> </form> <% if(request.getParameter("user") != null){ if(request.getParameter("user").equals("user")){%> "欢迎用户" <% }else if(request.getParameter("user").equals("admin")){ %> "欢迎管理员" <%} }%> </body> </html>
-
利用JSTL标签编写的login.jsp
<%@ 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> <form action="app3.jsp" method="post"> <input type="text" name="user" value="${param.user}" /> <input type="submit" value="提交" /> </form> <c:if test="${param.user == 'user'}"> <c:out value="欢迎用户"></c:out> </c:if> <c:if test="${param.user == 'admin'}"> <c:out value="欢迎管理员"></c:out> </c:if> </body> </html>
-
两者效果是一样的(自行区别好用之处)
4、JSTL的核心标签库共13个:
其中<c:import>与三大指令中include指令作用基本相同,都是指定一个绝对或相对路径url的JSP页面,使其暴露在当前页面的指定位置。
4.1、核心标签从功能上可以分为四类:
4.2、out标签的用法
- 输出常量。
可以在value属性中直接赋值。
- 输出变量
变量不存在的时候可以配合default属性输出默认值,
还可以通过escapeXml控制转义字符的输出格式;
var设定存放值的变量。<%--输出常量(value直接赋值)--%> <c:out value="我是out输出标签"></c:out> <%--输出变量(value可从作用域中获取值)--%> <c:out value="${sessionScope.name}"></c:out>
4.3、set标签的用法
- 存值到scope中。
可以将值以变量的形式存放在指定的范围。
scope设定存放值的范围;
value指定存放值的内容;
var设定存放的变量。<c:set scope="session" value="李四" var="name"></c:set>
- 存值到JavaBean的属性中。
target属性指定javabean的对象。
property属性指定要赋值给javabean对象的哪个属性。
value指定存放值的内容。<%--引入实体类实例化对象--%> <jsp:useBean id="user" class="com.ebuy.pojo.User"></jsp:useBean> <%--为实例化对象的name属性赋值--%> <c:set target="${user}" property="name" value="张三"></c:set>
4.4、remove标签的用法
- 移除指定scope作用域内的变量
var属性是必选
scope属性是必选
如果不同的scope中存在一样的变量可以通过scope属性指定删除哪个scope中的变量<c:remove scope="session" var="name"></c:remove>
4.5、catch标签的用法
- catch标签
catch标签可以包含容易出错的JSTL标签(逻辑)。
var属性定义错误信息输出的变量名。<!--catch标签 --> <c:catch var="error"> <c:set target="user" property="name" value="王五"></c:set> </c:catch> 获取catch标签中的错误信息:<c:out value="${error}"></c:out><br>
4.6、if标签的用法
- 用来实现分支条件的控制。
test属性用来存放判断条件,一般使用EL表达式来编写。
var属性指定名称用来存放判断结果类型为true还是false。
scope属性用来存放var属性存放的范围。<c:if test="${param.score>=90}" var="boolean" scope="session"></c:if>
4.7、choose、when、otherwise标签的用法:
- 通常这三个标签放在一起来使用。
<c:choose>标签嵌套在<c:when>和<c:otherwise>标签的外面作为父标签来使用。
<c:choose>标签和<c:when>标签也可以组合使用。<c:set var="score" value="99" scope="request"></c:set> <c:choose> <c:when test="${score>90 and score<=100}"> 优秀 </c:when> <c:when test="${score>80 and score<=90}"> 良好 </c:when> <c:when test="${score>70 and score<=80}"> 一般 </c:when> <c:when test="${score>60 and score<=70}"> 及格 </c:when> <c:otherwise> 不及格 </c:otherwise> </c:choose>
4.8、forEach标签的用法
-
根据循环条件遍历集合中的元素。
var设定变量名用于存储从集合中取出的元素(必须无默认值)。
items制定要遍历的集合(必须无默认值)。
begin、and用于制定遍历的起始位置和终止为止(有默认)。
step制定循环的步长(有默认值)
varStatus通过index、count、first、last几个状态值,描述begin和end子集中的元素的状态。<c:forEach var="存储当前遍历元素的变量" items="待遍历集合" begin="开始遍历元素的index值" end="结束遍历元素的index值" step="部分遍历中每次遍历的间隔元素个数" varStatus="指定一个变量用来存储当前元素的状态值"> <%--操作var变量表示的元素<br>--%> </c:forEach>
-
实例操作
<table border="1"> <c:forEach var="i" begin="1" end="10" step="1" varStatus="j"> <tr> <td>${j}---${i}</td> </tr> </c:forEach> </table>
-
隔行换色
<%--隔行变色--%> <table border="1"> <c:forEach var="i" begin="1" end="10" step="1" varStatus="j"> //在html的标签中可以嵌套使用jstl标签 <tr <c:if test="${j.index%2==0}"> style="background-color: #3a52a8" </c:if></tr> <td>${j.index}---${i}</td> </tr> </c:forEach> </table>
在html的标签中可以嵌套使用jstl标签
-
forEach遍历list集合
<% List list = new ArrayList(); User user1 = new User(); user1.setUserId("1001"); user1.setUserName("张三"); user1.setPassword("123456"); User user2 = new User(); user2.setUserId("1001"); user2.setUserName("张三"); user2.setPassword("123456"); User user3 = new User(); user3.setUserId("1001"); user3.setUserName("张三"); user3.setPassword("123456"); list.add(user1); list.add(user2); list.add(user3); request.setAttribute("list",list); %> <table border="1"> <tr> <td>编号</td> <td>姓名</td> <td>密码</td> </tr> <C:forEach items="${requestScope.list}" var="u"> <tr> <td>${u.userId}</td> <td>${u.userName}</td> <td>${u.password}</td> </tr> </C:forEach> </table>
-
forEach遍历Map集合
<% Map<String,String> map = new HashMap<>(); map.put("1001","张三"); map.put("1002","李四"); map.put("1003","王五"); request.setAttribute("map",map); %> <table border="1"> <tr> <td>编号</td> <td>姓名</td> </tr> <c:forEach items="${requestScope.map}" var="m"> <tr> <td>${m.key}</td> <td>${m.value}</td> </tr> </c:forEach> </table>
4.9、forTokens标签
- 用于浏览字符串,并根据指定的字符串将字符串截取。
items指定被迭代的字符串
delims指定使用的分隔符
var指定用来存放遍历的元素<% request.setAttribute("zifu","中国,美国,英国,法国"); %> <c:forTokens items="${requestScope.zifu}" delims="," var="z"> ${z}<br> </c:forTokens>
4.10、import标签的用法
- 可以把其他静态或动态文件包含到本jsp页面。
同<jsp:include>的区别为:
<jsp:include>只能包含同一个web应用中的文件。
而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。
url被导入资源的URL路径
context相同服务器下其他的web工程,必粗以”/”开头
var 以String类型存入被包含文件的内容
Scope var变量的JSP范围
charEncoding 被导入文件的编码格式
varReader以Reader类型存储被包含的文件内容<%@ include file="footer.jsp"%> <c:import url="footer.jsp"></c:import>
4.11、redireck标签的用法
- 该标签用来实现请求的重定向,同时可以在url中加入指定的参数。
url指定重定向页面的地址,可以是一个string类型的绝对地址或者相对路径。
context用于导入其他web应用中的页面。<c:redirect url="test.jsp"></c:redirect>
4.12、url标签的用法
- 该标签用于动态生成一个String类型的url,可以同<c:param>标签共同使用,也可以使用html的标签实现超链接。
value表示url路径值
var将url的路径值存放在变量中
scope表示var变量的范围<c:url value="http://www.baidu.com" var="baidu"> <%--携带参数--%> <c:param name="name" value="zs"></c:param> <c:param name="sex" value="2"></c:param> </c:url> <a href="${baidu}">点击进入百度首页</a>
4.13、fmt格式化标签(作为了解)
此标签可以将日期格式化.
-
属性介绍:
value 用来格式化的时间或日期 type 指定格式化的是日期还是时间,或者两者都是取值范围:date,time,both pattern 自定义格式化样式 dateStyle 日期的格式化样式 timeStyle 时间的格式化样式 timeZone 指定使用的时区 var 存储格式化后的结果 scope 指定存储的范围
导入fmt标签库
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %><% Date d = new Date(); request.setAttribute("d",d); %> <fmt:formatDate value="${d}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/189472.html