概念

	Java Server Pages (JSP) 标准标记库 (JSTL)的版本的发布对于
    JSP/servlet开发者来说是一个重大的进展。有了一个表达语言(EL)
    和一组四种强大的、易于学习的标准标记库,JSTL极有可能不久后成为实
    现动态的、基于Java的站点的主要方法。 
    
    1996年对JSP servlet的介绍使得Java成为动态网页开发的合理的选择。
    随后出现的Java服务器页(JSP)是走向快速的、可维护的Java网页实现
    过程的合理进化的一步,紧接着就出现了JSP标记的支持。但是2002中
    期的JSTL(JSP标准标记库)的发布才是进一步加速和简化开发过程最大
    的一步。 
   
    JSTL是Java中的一个定制标记库集。JSP标准标签库(JSTL)是一个JSP
    标签集合,它封装了JSP应用的通用核心功能。JSTL支持通用的、结构化的任务,
    比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它
    还提供了一个框架来使用集成JSTL的自定义标签。

作用

   1)实现了JSP页面的代码复用。基于标签库原理,重复率较高的代码块支持复用,
     提高效率。

   2)书写JSP页面时可读性更强。长得像XML,方便前端查看和参与开发。

   3)在应用程序服务器之间提供了一致的接口,最大程度地提高了WEB应用在各应用
     服务器之间的移植。

   4)简化了JSP和WEB应用程序的开发。

标签使用

c:out  输出标签
//1.常量输出<c:out value = "123"></c:out><c:out value = "abc"></c:out><c:out value = "true"></c:out>//2.变量输出//定义变量//pageContext:是在整个Web应用上都是有效的,//可以理解为所有的网页,因为这个对象是常常用来共享资源的,//也就是用户1提交了一个资源,放到了pageContext作用域中,其它用户也可以看到这个资源。//setAttribute:添加指定的属性,并为其赋指定的值。<%pageContext.setAttribute("j",2);%>//定义好变量后 开始输出j=<c:out value="${j}"></c:out>//3.转义输出<c:out value = "<a href = '跳转目的地路径'>跳转</a>"></c:out>//4.输出默认值<%pageContext.setAtribute("a",4);%>//如果"${a}"不存在 输出 default的值 也就是 a=3(正常的话 a=4)a = <c:out value="${a}" default="3"></c:out>

c:set  赋值标签
//将 名字(var)为: JSTL标签之一 值为: c:set 的数据 存到 作用域page 中<c:set var = "name" value = "c:set" scope = "page"></c:set>//取值//通过名字获取它的值name=${pageScope.name}//2.向map中添加,修改键值对<%Map<String,String> map = new HashMap<String,String>();map.put("husband","丈夫");map.put("wife","妻子");//存到作用域中pageContext.setattribute("map",map);%>//修改 map中的值<c:set property = "brother" value = "哥哥" target = "${map}"></c:set>brother=${map["brother"]}<c:set property = "sister" value = "妹妹" target = "${map}"></c:set>sister=${map["sister"]}

c:remove  删除标签
//先赋值在删除//单个删<c:set var = "name" value = "c:out" scope = "page"></c:set><c:set var = "name" value = "c:set" scope = "request"></c:set><c:remove var = "name" scope = "page"/>name=${name}//全删<c:set var = "name" value = "c:out" scope = "page"></c:set><c:set var = "name" value = "c:set" scope = "request"></c:set><c:remove var = "name"></c:remove>name = ${name}

c:forEach  两种for循环
  //简介< c:forEach
	
  	items="要被循环的信息" 
  	begin="开始的元素"
  	end="最后一个元素"
  	step="每一次迭代的步长"
  	var="代表当前条目的变量名称"
  	varStatus="代表循环状态的变量名称"
 	
 	>
 	//增强for循环
 	//先定义输出内容
 	<% 
     List<String> list = new ArrayList<String>(); //添加数据 list.add("J"); list.add("S"); list.add("T"); list.add("L");%>//接收要输出的数据对象 //var:当前输出内容所存在的地方
 	<c:forEach items="${list}" var="str">
 	//页面输出:接受页面输出内容
 	list=${str}<br>
 	</c:forEach>//普通for循环<c:forEach begin="0" end="4", step="1" varStatus="vs"> HELLO JSTL <br> index=${vs.index} count=${vs.count} first=$(vs.first)</c:forEach>

   //小程序测验
   //打印10到100之间所有的偶数,把下坐标是3的倍数改成红色
   
   //从 10 开始输出到 100,之间间隔为2(原本是11 12 13 ---》现在是10 12 14  ) 
   //输出的数存到 var 定义的 num
   //varStatus是循环中的数
   <c:forEach begin="10" end="100" step="2" var="num" varStatus="vs2">
  
   //将循环中的数进行判断(vs2.count 就是它的坐标(10 12 14) 其中14的坐标就是3,也就是3的1倍数)
   //如果它是3的倍数就变红<c:if test="${vs2.count%3==0}" var = 
   "flag">
  
   //定义颜色
   <font color = "red">${num}</font>
   
   </c:if>
   
   //上面判断的时候定义 flag 是符合要求的数
   //所以这里直接 定义 !flag 就可以了
   <c:if test="${! flag}">
   
   //定义颜色
   <font color="blue">${num}</font>
   
   </c:if>
   
   </c:forEach>

c:forTokens  标签切割
 <c:forTokens 
 items="需要切割的数据"
 delims="以什么切割"
 var="输出内容"
 >
 页面显示 </c:forTokens>
 
 //实例
 <c:forTokens items = "1,2,3,4" delims="," var="sc">
 sc=${sc}
 </c:forTokens>

c:url  在需要的时候会自动重写URL
//实例<a href="<c:url value="转页面的地址"/>">点击转页面</a>