JSTL

1.什么是JSTL?

JSTL全名为JavaServer Pages Standard Tag Library,是由JCP所指定的标准规格,主要提供给java web开发人员一个标准通用的标签函数库。web程序开发人员能够利用JSTL和ELl来开发web程序,取代传统直接在页面上嵌入java程序的做法,以提高程序可读性,维护性和方便性。

2.JSTL标签库的分类

  • 核心标签(用的最多)
  • 国际化标签(I18N格式化标签)
  • 数据库标签(SQL标签,很少使用)
  • XML标签(几乎不用)
  • JSTL函数(EL函数)

3.核心标签库

从功能上可以分为4类:表达式控制标签,流程控制标签,循环标签,URL操作标签。

①表达式控制标签:out标签,set标签,remove标签,catch标签

②流程控制标签:if标签,choose标签,when标签,otherwise标签

③循环标签:forEach标签,forTokens标签

④URL操作标签:import标签,url标签,redirect标签,param标签

在jsp页面中引入核心标签库的代码为:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

3.1 <c:out>标签使用总结

3.1.1 <c:out>标签主要用来显示数据的内容,就像是<%= scripting-language %>一样,和EL表达式的区别在于使用<c:out>标签可以对敏感的字符自动进行转换。

如以下代码:

<body>
  <h4>c:out</h4>
  <%
  request.setAttribute("book","<<java>>");
   %>
   book:${requestScope.book}
   <br><br>
   book:<c:out value="${requestScope.book}"></c:out>
</body>

 运行后显示:

查看网页的源代码:

<body data-genuitec-lp-enabled="false" data-genuitec-file-id="wc1-13" data-genuitec-path="/MyWebProject/WebRoot/tag/jstl.jsp">
    <h4 data-genuitec-lp-enabled="false" data-genuitec-file-id="wc1-13" data-genuitec-path="/MyWebProject/WebRoot/tag/jstl.jsp">c:out</h4>
    
     book:<<java>>
     <br><br>
     book:<<java>>
</body>

可以看到使用<c:out>时进行了特殊字符的转换。

3.1.2 <c:out>标签的属性

3.2 <c:set>标签可以为域对象赋值

<c:set var="name" value="koala" scope="page"></c:set>
<br><br>
name:${pageScope.name}

相当于

<%=pageContext.setAttribute("name","koala") %>

 value可以使用EL表达式:

<c:set var="subject" value="${param.subject}" scope="session"></c:set>
 subject:${sessionScope.subject}

3.3 <c:remove>标签可以移除指定域对象的指定属性值

<c:remove>标签可以将<c:set>标签设置的值移除,使用时需要指定变量名和属性范围。例如,移除上面设置的name变量的属性值。

<c:remove var="name" scope="page"></c:remove>

3.4 <c:if>标签

<c:if>标签必须要有test属性,当test中的表达式结果为true时,执行标签体内容。<c:if>标签没有else,但可以把判断的结果储存起来,以备之后使用。像下面这样:

<c:if test="${requestScope.age>18}">成年!</c:if>
<br><br>
<c:if test="${requestScope.age>18}" var="isAdult" scope="request"></c:if>
isAdult:<c:out value="${requestScope.isAdult}"></c:out>
<br><br>

3.5 <c:choose>,<c:when>,<c:otherwise>标签

<c:choose>
       <c:when test="${param.age>60}">老年</c:when>
       <c:when test="${param.age>35}">中年</c:when>
       <c:when test="${param.age>18}">青年</c:when>
       <c:otherwise>未成年</c:otherwise>
</c:choose>

c:choose,c:when,c:otherwise可以实现if...else if...else if...else的效果,但较为麻烦,其中c:choose以c:when,c:otherwise的父标签出现,并且c:when,c:otherwise不能脱离c:choose单独使用,c:otherwise必须在c:when之后使用。

3.6 迭代操作标签

<c:forEach>:可以对数组,Collection,Map进行遍历,可以指定起始位置begin(对于集合begin从0开始算),结束位置end,以及步长step。例如:

<c:forEach begin="1" end="10" step="2" var="i">
     ${i}
</c:forEach>

3.7 URL操作

JSTL包含三个与URL操作有关的标签,分别为:<c:import>,<c:redirect>和<c:url>。它们主要的功能是用来将其他文件的内容包含起来,网页的导向,还有url的产生。

<c:import>可以包含任何页面到当前页面。

<c:redirect>可以使当前jsp页面重定向到任何指定页面。

<c:url>产生一个url地址,可以根据Cookie是否可用来智能进行URL重写,对GET请求的参数进行编码,可以把产生的URL存储在域对象中的属性中,还可以使用c:param为URL添加参数(c:url会对参数进行自动的转码)。

 

posted @ 2018-11-06 17:23  考拉熊_12  阅读(301)  评论(0编辑  收藏  举报