首先表示开心,老夫我终于实习了,其次表示伤悲,我之前没用过jsp,现在努力学习中
JSTL是jsp的标准库标签,使用jstl的话就可以减少或者不在jsp文件里面写java了,交由标签完成,一定程度上体现了一致性
好了,废话不多说,本文持续更新中,完全自慰用途,如有不对,请轻拍
核心标签:
<c:out />
<c:out />有3个属性,分别为 value、default、escpaeXml,这三个属性分别代表着 输出内容描述;如果value值为null的时候显示的default;是否转换
特殊字符(比如标签的“<”);这里值得注意的是如果value=""的话,这不是value为null,而是值是空字符,要使得value为null的话,需要value="${null}"或者
是取值其他的空值,而且基本上value都是要和${}一起使用的
<c:set />和<c:remove />
<c:set />常用的属性有value,var,scope,scope有page,request,session,application这几种,主要是对应的jsp内置对象
<c:set scope="page" var="number"> <c:out value="${2 }"></c:out> </c:set> <c:set scope="request" var="number"> <%=3 %> </c:set> <c:set scope="session" var="number"> 4 </c:set> c:set初始设置的值<br><hr> pageScope.number:<c:out value="${pageScope.number }" default="No Data"></c:out><br> requestScope.number:<c:out value="${requestScope.number }" default="No Data"></c:out><br> sessionScope.number:<c:out value="${sessionScope.number }" default="No Data"></c:out><br> <c:out value='<c:remove var="number" scope="page"/>之后' /><br><hr> <c:remove var="number" scope="page"/> pageScope.number:<c:out value="${pageScope.number }" default="No Data"></c:out><br> requestScope.number:<c:out value="${requestScope.number }" default="No Data"></c:out><br> sessionScope.number:<c:out value="${sessionScope.number }" default="No Data"></c:out><br> <c:out value="<c:remove var='number'/>之后"></c:out><br><hr> <c:remove var="number"/> pageScope.number:<c:out value="${pageScope.number }" default="No Data"></c:out><br> requestScope.number:<c:out value="${requestScope.number }" default="No Data"></c:out><br> sessionScope.number:<c:out value="${sessionScope.number }" default="No Data"></c:out><br>
显示的值为:
c:set初始设置的值
pageScope.number:2
requestScope.number:3
sessionScope.number:4
<c:remove var="number" scope="page"/>之后
pageScope.number:No Data
requestScope.number:3
sessionScope.number:4
<c:remove var='number'/>之后
pageScope.number:No Data
requestScope.number:No Data
sessionScope.number:No Data
相当于各个scope有自己的命名空间。然后可以在这里去,如果是没指定的话就是所有的变量
和URL相关的标签:<c:url>,<c:param>,<c:redirect>
<c:url>很好理解,就是改变链接地址就是了,常用的是
<c:out var:"urll" value="/xiaosi2"></c:cout>
这个样子使用,然后如果需要使用参数,并且访问对应的页面的话,要和<c:param>配合使用
<c:url value="/xiaosi2.jsp" var="urll"> <c:param name="Id" value="xiaosi_id"></c:param> <c:param name="Name" value="xiaosi_name"></c:param> </c:url> <a href="${urll }"> 不出意外的话点击这里会跳转到另一个页面</a>
点击标签的话跳转的页面就是/xiaosi2.jsp?Id=xiaosi_id&Name=xiaosi_name 添加对应的参数
如果是需要网页重定向的话:
<c:redirect url="/xiaosi2.jsp"> <c:param name="Id" value="xiaosi_id"></c:param> <c:param name="Name" value="xiaosi_name"></c:param> </c:redirect>
也是一样的,稍微注意一下的是,<c:redirect>是把地址填在url内,而<c:url>是放在value里面的
条件控制标签,<c:choose>,<c:when>,<c:otherwise>标签
<c:when>,<c:otherwise>标签需要放在<c:choose>里面,而且<c:choose>里面只能放<c:choose>,<c:when>标签,不然都会页面报错
<% Calendar rightNow=Calendar.getInstance(); Integer Hour=new Integer(rightNow.get(Calendar.HOUR_OF_DAY)); request.setAttribute("hour", Hour); %> <c:choose> <c:when test="${hour>=0&&hour<=11 }"> <c:set value="上午好" var="sayHello"></c:set> </c:when> <c:when test="${hour>=12&&hour<=17 }"> <c:set value="下午好" var="sayHello"></c:set> </c:when> <c:otherwise> <c:set value="晚上好" var="sayHello"></c:set> </c:otherwise> </c:choose> <c:out value="现在时间:${hour }时"></c:out> <c:out value="${sayHello }"></c:out>
<c:when>相当于if,<c:otherwise>就相当于else,然后判断条件卸载test里就可以,使用${}来获取值并且判断
迭代运行循环标签:<c:forEach>,<c:fortonkes>
<c:forEach>可以看做是实现了一个for功能,
<c:forEach var="color" items="红,橙,黄,绿,青,蓝,紫" begin="2" step="3">
<c:out value="${color }"></c:out><span style="color: red;">|</span>
</c:forEach>
<c:forEach var="i" begin="0" end="50" step="5" varStatus="status">
<c:if test="${status.first }">
begin:<c:out value="${status.begin }"></c:out><br>
end:<c:out value="${status.end }"></c:out><br>
step:<c:out value="${status.step }"></c:out><br>
<c:out value="输出的元素:"></c:out>
</c:if>
<c:out value="${i}"></c:out>
<span>++++++++</span>
<c:out value="${ status.index}"></c:out><br>
<c:if test="${status.last }">
<br/>总共输出<c:out value="${status.count }"></c:out> 个元素
</c:if>
</c:forEach>
输出结果和执行一个for循环是一样的,begin的话代表起始值,end是结束值,step是分隔多少的值,注意begin是从0开始的。varStatus指得是目前内容相关信息,.first .last .count .index
<c:forTokens>是专门处理字符串数据使用的,items的内容必须是字符串
<c:set var="star" value="红|橙,黄|绿,青|蓝,紫" scope="request"></c:set> <c:out value="原始数据为:${star }"></c:out><hr> <c:out value="使用‘|’作为分隔符"></c:out><hr> <c:forTokens items="${star }" delims="|" varStatus="status" var="str"> <c:out value="${str }"></c:out><br> <c:if test="${status.last }"> <br> 总共输出<c:out value="${status.count }"></c:out>个元素。 </c:if> </c:forTokens>
这里的话是用"|"作为分隔符,如果需要其他的分隔符的话选取其他的不同的字符就好