JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
在使用JSTL的同时,我想过一个问题,为什么JSTL能实现的功能,Java也能做,可能对于开发人员来说,更熟悉java语言。
经查阅资料,有人说是因为避免在Jsp语言中html和java语言混乱,导致开发效率低,页面不易维护,可读性差。一般来说,应该尽可能避免在jsp页面中嵌入Java代码,而是使用JSTL和EL表达式来实现同样的功能。
核心标签
核心标签是最常用的JSTL标签。引用核心标签库的语法如下:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
应用:数组、对象、LIst、Map和Date
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.uplooking.controller.Student" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSTL</title>
</head>
<body>
<%
Student stu=new Student();
stu.setName("老王");
stu.setClazz(1);
pageContext.setAttribute("stu",stu);
Student stu1=new Student();
stu1.setName("老李");
stu1.setClazz(2);
pageContext.setAttribute("stu1",stu1);
Student stu2=new Student();
stu2.setName("老师");
stu2.setClazz(3);
pageContext.setAttribute("stu2",stu2);
%>
<!-- jstl -->
<!-- 判断后台传过来的数据是否为空 与if一样 -->
<c:if test="${stu1!=null }">
<h4>登陆成功${stu1.name}</h4>
</c:if> <c:if test="${stu3==null }">
<h4>登录失败,请返回<a href="index.jsp">首页</a></h4>
</c:if>
<hr><!--------------------------------List----------------------------------------!>
<%
List<Student> stus=new ArrayList();
stus.add(stu);
stus.add(stu1);
stus.add(stu2);
pageContext.setAttribute("stus", stus);
%>
<!-- items遍历需要的集合或者数组 var相当于一个临时变量-->
<c:forEach items="${stus}" var="stu">
${stu.name}
<c:choose>
<c:when test="${stu.clazz==1 }">
终极一班 <br>
</c:when>
<c:when test="${stu1.clazz==2 }">
牛x二班 <br>
</c:when>
<c:when test="${stu2.clazz==3 }">
活力三班 <br>
</c:when>
<c:otherwise>
厉害 <br>
</c:otherwise>
</c:choose>
</c:forEach>
<hr>
<!-- map的循环遍历 -->
<%
Map<String,Student> map=new HashMap();
map.put("10",stu);
map.put("20",stu1);
map.put("30",stu2);
pageContext.setAttribute("map", map);
%>
<!--begin代表从第几个元素开始(从0开始) varStatus自动排序(与分页有关)-->
<c:forEach items="${map}" var="stu" begin="1" varStatus="vars">
${vars.count} --- ${stu.key} --- ${stu.value.name} <br>
</c:forEach> <hr>
<!-- set标签用于设置变量值和对象属性。 -->
<c:set var="age" value="66"></c:set>
<c:if test="${age==66 }">
老年人
</c:if>
${age}
<!-- remove标签移除变量age -->
<c:remove var="age"/>
${age}
<!-- date时间转换 -->
<%pageContext.setAttribute("date",new Date()); %>
<fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"/><br>
<%pageContext.setAttribute("stringDate","2018-09-17 13:04:18"); %>
<fmt:parseDate value="${stringDate}" pattern="yyyy-MM-dd HH:mm:ss"/><br> <!-- 百分 比转换 -->
<fmt:formatNumber type="percent" value="0.88"></fmt:formatNumber>
</body>
</html>
执行结果: