1、JSTL核心标签库:

-  使用JSTL的核心标签库,需要在页面中通过taglib指令首先将标签库导入。(首先得将JSTLjar包导入)

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>


a、c:set标签:有三种用法

-  用于进行变量定义,并将变量存放到指定域属性空间;用于为Bean的属性赋值;用于设置Map的key与value等。该标签在实际开发中并不常用。

        <br> ------------------- c:set 将变量存放到指定域中 ---------------- <br>   
        <c:set var="name" value="张三" scope="session" />
        name = ${pageScope.name} <br>
        name = ${sessionScope.name} <br>
        <!--
            输出结果为:
            ------------------- c:set 将变量存放到指定域中 ----------------	 
            name = 	 
            name = 张三  
        ->

-  scope属性值默认是“pageContext”。

        <br> -------------------c:set 为Bean的属性赋值 ------------------<br>        
        <% 
            Student student = new Student();
            pageContext.setAttribute("student", student);
        %>
        <c:set value="李四" property="name" target="${pageScope.student}" ></c:set>
        <c:set value="24" property="age" target="${pageScope.student}" ></c:set>
        student = ${student} <br>
        <!-- 
        输出结果为: 
        -------------------c:set 为Bean的属性赋值 ------------------	 
        student = Student [name=李四, age=24]  
        -->
     <br> ---------------------- c:set为Map赋值 --------------------- <br>
	  <%
		Map<String, Object> map = new HashMap<String, Object>();
		 pageContext.setAttribute("map", map);
	 %>
	 <c:set value="即可" property="name" target="${pageScope.map }"></c:set>
	 <c:set value="20" property="age" target="${pageScope.map }"></c:set>
	 map = ${map } <br>
	 name = ${map.name } <br>
	 age = ${map.age } <br>
	 <!-- 
	 	输出结果为:
	 	---------------------- c:set为Map赋值 --------------------- 
		map = {name=即可, age=20} 
		name = 即可 
		age = 20 
	 -->


b、c:remove标签:从域属性空间中删除指定变量。该标签不常用。

<br> ---------------------------- c:remove 删除指定域中的属性 -------------------- <br>
	  <c:set var="school" value="pag_school" />
	  <c:set var="school" value="req_school" scope="request" />
	  <c:set var="school" value="ses_school" scope="session" />
	  <c:set var="school" value="app_school" scope="application" />
	  
	  <c:remove var="school" scope="session" />
	  school = ${pageScope.school } <br>
	  school = ${requestScope.school } <br>
	  school = ${sessionScope.school } <br>
	  school = ${applicationScope.school } <br>
	  
	  <!-- 
	  输出结果为:
	  ---------------------------- c:remove 删除指定域中的属性 -------------------- 
	 school = pag_school 
	 school = req_school 
	 school = 
	 school = app_school 
	   -->


c、c:if标签:用于实现对于条件的判断

          <br> -------------- c:if -------------- <br>
	 <c:set var="user" value="admin" />
	 <c:if test="${user == 'admin'}" >
	 	<a href="#">进入管理页面</a>
	 </c:if>
	 <!-- 
	 	输出结果为:
	 	-------------- c:if -------------- 
		进入管理页面 
	  -->

-  test:判断的条件。若为true,则执行标签体,否则不执行。

-  var:存储test的判断结果。不常用。

-  scope:存储test判断结果的变量的存放范围。不常用。


d、<c:choose>就像在Java switch语句,它可以让你在一些替代方案之间选择。

-  <c:choose>标签没有任何属性。

-  <c:when>标记有一个test属性(用于计算条件)。

-  <c:otherwise>标签没有任何属性。

	  <br> ---------------------- c:choose ------------------------ <br>
	  <c:set var="pageno" value="2" />
	  <c:set var="totalPages" value="5" />
	  <c:choose>
	  	<c:when test="${totalPages == 1 }">
	  		首页 上一页 下一页 当前是 ${pageno } / ${totalPages } 页
	  	</c:when>
	  	<c:when test="${pageno == 1 }">
	  		首页 上一页 <a href="#">下一页</a> <a href="#">末页</a> 当前是${pageno } / ${totalPages }页
	  	</c:when>
	  	<c:otherwise>
	  		<a href="#">首页</a> <a href="#">上一页</a> <a href="#">下一页</a> <a href="#">末页</a> 当前是${pageno } / ${totalPages }页
	  	</c:otherwise>
	  </c:choose>
	  <!-- 
	  	输出结果为:
	  	---------------------- c:choose ------------------------ 
		首页 上一页 下一页 末页 当前是2 / 5页 
	   -->


e、c:forEach标签的基本用法:用于循环遍历数组、List、Set、Map集合。在实际应用中使用非常频繁。

       <br> -------------------- 遍历List ---------------<br>
	   <%
	   		List<String> names = new ArrayList<String>();
	   		names.add("张三");
	   		names.add("李四");
	   		names.add("王五");
	   		pageContext.setAttribute("names", names);
	    %>
	   <c:forEach items="${names }" var="name">
	   ${name } <br>
	   </c:forEach>
	   <!-- 
	   	输出结果为:
	   	-------------------- 遍历List ---------------
		 张三 
		 李四 
		 王五 
	    -->

-  begin:开始下标;end:结束下标;(包含结束下标)。

           <br> -------------------- 遍历List ---------------<br>
	   <%
	   		List<String> names = new ArrayList<String>();
	   		names.add("郑二");
	   		names.add("张三");
	   		names.add("李四");
	   		names.add("王五");
	   		names.add("赵六");
	   		names.add("田七");
	   		names.add("刘八");
	   		pageContext.setAttribute("names", names);
	    %>
	   <c:forEach items="${names }" var="name" begin="3" end="5">
	   ${name } <br>
	   </c:forEach>
	   <!-- 
	   	输出结果为:
	   	-------------------- 遍历List ---------------
		 王五 
		 赵六 
		 田七 
	    -->


-  step:表示步长,各一个输出。

	   <br> -------------------- 遍历List ---------------<br>
	   <%
	   		List<String> names = new ArrayList<String>();
	   		names.add("郑二");
	   		names.add("张三");
	   		names.add("李四");
	   		names.add("王五");
	   		names.add("赵六");
	   		names.add("田七");
	   		names.add("刘八");
	   		pageContext.setAttribute("names", names);
	    %>
	   <c:forEach items="${names }" var="name" begin="0" end="5" step="2">
	   ${name } <br>
	   </c:forEach>
	   <!-- 
	   	输出结果为:
	   	-------------------- 遍历List ---------------
		 郑二 
		 李四 
		 赵六 
	    -->


f、c:forEach标签的高级用法:

-  varStatus:迭代变量的名称,用来表示迭代的状态,可以访问到迭代自身的信息。(vs.count表示序号;vs.index表示索引号(从0开始);vs.first:当迭代的时候是第一个时,显示为true,否则显示为false。)

          <br>----------------------  遍历List ---------------------<br>
	  <%
	  	List<Student> students = new ArrayList<Student>();
	  	students.add(new Student("张三", 23));
	  	students.add(new Student("李四", 24));
	  	students.add(new Student("王五", 25));
	  	students.add(new Student("赵六", 26));
	  	students.add(new Student("田七", 27));
	  	
	  	pageContext.setAttribute("students", students);
	   %>
	   
	   <table border="1">
	   	<tr>
	   		<th>序号</th>
	   		<th>姓名</th>
	   		<th>年龄</th>
	   	</tr>
	   	<c:forEach items="${students }" var="student" varStatus="vs">
	   		<tr>
	   			<td>${vs.count}</td>
	   			<td>${student.name}</td>
	   			<td>${student.age}</td>
	   		</tr>
	   	</c:forEach>
	   </table>
	   <!-- 
	   	输出结果为:
	   	---------------------- 遍历List ---------------------
		序号  姓名  年龄
		1   张三     23 
		2   李四     24 
		3   王五     25 
		4   赵六     26 
		5   田七     27 
	    -->


2、JSTL格式化标签库:使用JSTL的格式化标签库,需要在页面中通过taglib指令首先将标签库导入。

<%@ taglib uri=" prefix="fmt" %>


a、fmt:formatDate标签:该标签用于使用不同的模式格式化日期。其常用属性有:

-  value:将要被格式化的数据。

-  pattern:格式化的模式。其与SimpleDateFormat的参数设置方式相同。

-  var:格式化后的字符串所要存放的变量。若不指定var,则会将格式化过的结果直接显示在页面中。

-  scope:变量存放的域属性空间,取值为page、request、session和application,默认为page范围。

-  type:其取值为date、time或者是both,表示给出的value是日期、时间,还是两者都包含,默认为date。

	   <%
	   	Date now = new Date();
	   	pageContext.setAttribute("now", now);
	    %>
	    now = ${now } <br>
	    <!-- 
	          输出结果为:
	          now = Sun Nov 05 14:00:26 CST 2017 
	     -->


-  示例:使用格式化日期标签:(显示“年-月-日”格式)

now = <fmt:formatDate value="${now}" pattern="yyyy-MM-dd" /><br>
<!-- 
    输出结果为:
    now = 2017-11-05
-->


-  再如将格式化后的日期字符串显示到表单中:

	    <fmt:formatDate value="${now}" pattern="yyyy-MM-dd" var="birth" /> <br>
		生日:<input type="text" name="birthday" value="${birth}" />


b、fmt:parseDate标签:该标签用于将指定字符串转换成日期类型。常用的属性有:

-  value:将要被转换的数据。

-  pattern:将要被转换的数据的模式。其与SimpleDateFormat的参数设置方式相同。

-  var:转换后的日期类型数据所要存放的变量。若不指定var,则会将转换过的结果直接显示在页面中。

-  scope:变量存放的域属性空间。取值为page、request、session、application,默认为page范围。

		<br> --------------------------- 字符串转换成日期 -------------- <br>
		<fmt:parseDate value="1949/10/01" pattern="yyyy/MM/dd"></fmt:parseDate> <br>
		<fmt:parseDate value="1949/10/01" pattern="yyyy/MM/dd" var="day"></fmt:parseDate><br>
		day = ${day}
		
		<!-- 
			输出结果为:
			--------------------------- 字符串转换成日期 -------------- 
			 Sat Oct 01 00:00:00 CST 1949 
			 day = Sat Oct 01 00:00:00 CST 1949 
		 -->


c、fmt:formatNumber:该标签用于按照指定格式对数字进行格式化。常用的属性有:

3181a6f3985884fe0ed6e95db4430162.png


-  示例:

		 <br> -------------------------- 格式化数字 -------------------- <br>
		 <fmt:formatNumber value="${12345678 }"></fmt:formatNumber> <br>
		 <fmt:formatNumber value="${12345678 }" groupingUsed="false"></fmt:formatNumber> <br>
		 <fmt:formatNumber value="${12345.678 }" maxIntegerDigits="8" minIntegerDigits="6"></fmt:formatNumber> <br>
		 <fmt:formatNumber value="${12345.674 }" maxFractionDigits="2"></fmt:formatNumber>
		 <!-- 
		 	输出结果为:
		 	-------------------------- 格式化数字 -------------------- 
			 12,345,678 
			 12345678 
			 012,345.678 
			 12,345.67 
		  -->


d、fmt:parseNumber标签:该标签用于将指定字符串转换成数值类型。常用的属性有:

36120c523772af81c25088ca30ab972d.png


-  示例:

                  <br>------------------- 字符串转换成数字 -----------------<br>
		  <fmt:parseNumber value="12345.678" integerOnly="true"></fmt:parseNumber> <br>
		  <fmt:parseNumber value="12345.678" integerOnly="true" var="num"></fmt:parseNumber>
		  num + 1 = ${num + 1 }
		  <!-- 
		  	输出结果为:
		  	------------------- 字符串转换成数字 -----------------
			12345 
			num + 1 = 12346 
		   -->