JSTL核心标签库

JSTL核心标签库

导入核心标签库,一般使用c作为访问前缀
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


一.表达式标签

表达式标签包括<c:out>、<c:set>、<c:remove>、<c:catch>

1.<c:out>标签

用于将计算的结果输出到JSP页面,该标签可以替代<%= %>

(1).属性说明:

属性类型描述引用EL
valueObject输出的变量或表达式
escapeXmlboolean转换特殊字符,默认值true
defaultObject如果value属性为空,显示default属性定义的默认值
(2).使用

<!-- escapeXml为false时,输出html -->
<c:out value="<hr>"  escapeXml="false" />
<!-- escapeXml为true时,输出字符串 -->
<c:out value="<hr/>"/>
<!-- 第一种语法格式 -->
<c:out value="${name}" default="name值为空输出"/>
<!-- 第二种语法格式 -->
<c:out value="${name}">
	name值为空输出
</c:out>

2.<c:set>标签

用于定义和存储变量,可以定义变量是在JSP会话范围或者JavaBean属性中

(1).属性说明

属性类型描述引用EL
valueObject存储的变量值
varString变量名称
targetObject存储变量值或者标签主体的目标对象,可以是JavaBean或Map
propertyString指定目标对象存储数据的属性名
scopeString指定变量存储范围,默认page
(2).使用

<!-- 设置值,方式一,scope默认值page,可不写 -->
<c:set var="sex" value="男" scope="page"/>
<!-- 设置值,方式二 -->
<c:set var="sex" scope="page">
	女
</c:set>

<!-- 定义bean  -->				
<jsp:useBean id="user" class="cn.edu.njit.pojo.User"/>
<!-- 设置值到bean 方式一,target属性不能直接写user,需使用${user} -->
<c:set value="男" target="${user}" property="sex"/>
<!-- 设置值到bean 方式二 -->
<c:set target="${user}" property="sex">
	女
</c:set>

3.<c:remove>标签

可以从指定JSP范围移除指定变量

(1).属性说明

属性类型描述引用EL
varString指定存储变量值的变量值名称
scopeString指定变量所在JSP范围,默认page,可选值page、request、session、application

(2).使用:

<!-- 定义page域中sex变量 -->
<c:set var="sex" value="男" scope="page"/>
<!-- 移除page域中sex变量 -->
<c:remove var="sex" />

4.<c:catch>标签

处理程序异常的标签,可以将异常信息保存到变量中

使用:

<!-- 处理异常,var属性为可选项 -->
<c:catch var="exception">
	<c:set value="男" target="user" property="sex"/>
</c:catch>
<c:out value="${exception}" default="空"/>
输出异常信息:javax.servlet.jsp.JspTagException: Invalid property in <set>: "sex"


二.条件标签

条件标签包括:<c:if>、<c:choose>、<c:when>、<c:otherwise>
1.<c:if>
根据不同的条件执行不同的代码,和Java的if语句功能一样。(ps:不知道为啥不直接提供<c:else>,用<c:choose>代替?)

(1).属性说明

属性类型描述引用EL
testBoolean条件表达式
varString变量名,指定test属性判断结果存放在该变量中,不存在则创建
scopeString存储范围,指定var属性指定的变量存在的范围。默认page
(2).语法

<!-- 语法一 -->
<c:if test="condition" var="result" [scope="page|request|session|application"] />
<!-- 语法二 ,根据test判断结果去执行标签主体内容。标签主体是JSP页面任何可以使用的元素-->
<c:if test="condition" [var="result"] [scope="page|request|session|application"]>
	标签主体
</c:if>
(3).使用

<!-- 获取test属性值 -->
<c:if test="${name != null}" var="result" scope="page"/>
<c:out value="${result}" default="空"/>

<!-- 执行标签主体内容,没有提供else标签。。。 -->
<c:if test="${name != null}">
	${name}
</c:if>

2.<c:choose>、<c:when>、<c:otherwise>标签

<c:choose>结合<c:when>、<c:otherwise>可以根据不同的条件完成指定的业务逻辑,如果没有符合的条件则会执行默认条件的业务逻辑。<c:choose>标签中可以包含多个<c:when>处理不同条件,只能有一个<c:otherwise>处理默认条件。使用这3个标签可以完成if..else if...else的判断。

(1).语法

<c:choose>
	<c:when test="">
		业务逻辑
	</c:when>
	...
	多个<c:when>
	<c:otherwise>
		业务逻辑
	</c:otherwise>
</c:choose>
(2).使用

<c:set var="hour">
	<%= java.util.Calendar.getInstance().get(java.util.Calendar.HOUR_OF_DAY) %>
</c:set>
<c:out value="${hour }"/>
		
<c:choose>
	<c:when test="${hour > 6 && hour <= 11}">
		上午
	</c:when>
	<c:when test="${hour > 11 && hour <= 17}">
		下午
	</c:when>
	<c:otherwise>
		晚上
	</c:otherwise>
</c:choose>


三.循环标签

循环标签包括:<c:forEach>、<c:forTokens>
1.<c:forEach>标签
遍历集合中所有元素,也可以指定循环次数。所有属性为可选
(1).属性说明
属性类型描述引用EL
items数组、集合类、字符串、枚举循环遍历对象,一般用户数组和集合
varString循环体变量,存储items指定对象的成员
beginint循环起始位置
endint循环结束位置
stepint循环步长
varStatusString循环状态变量,常用属性index、count、first、last、begin、end、step、current
(2).varStatus属性
所有属性可以参照:javax.servlet.jsp.jstl.core.LoopTagStatus接口的源码
  • current:当前元素,与var属性一致(${var属性值}、${vs.current})
  • index:元素下标,0开始
  • count:计数,从1开始
  • first:是否为第一个元素,返回boolean类型;若定义了begin属性,则该属性值作为是否是第一个元素的判断条件
  • last:是否为最后一个元素,返回boolean类型;判断条件:当前元素后是否还有元素,没有则表示当前元素是最后一个元素,返回false(与end属性关系不大)
  • begin:开始元素的下标,可以理解为:int i = begin;
  • end:结束元素下标,可以理解为:i <= end;end超出范围时不会报错
  • step:步长,可以理解为循环时,i += step;
(3).使用
<!-- 遍历List,获取元素下标、当前元素个数、元素内容-->
<c:forEach items="${userList}" var="user" varStatus="vs"> 
	index:${vs.index} -  count:${vs.count}  -  ${user.username}
</c:forEach>

<!-- ${vs.begin} 获取begin属性的值,如果未定义则为空;end、step属性类似-->
<c:forEach items="${userList}" var="user" begin="0" end="${userList.size()-1}" step="1" varStatus="vs">
	begin:${vs.begin } - end:${vs.end } - step:${vs.step } <br>
	${user.username}<hr/>
</c:forEach>
2.<c:forTokens>标签
可以用指定的分隔符将一个字符串分割开,根据分割的数量确定循环次数
(1).属性说明
属性类型标签引用EL
itemsString字符串
delimsString字符串的分隔字符,可以同时有多个分隔字符
varString变量名称
beginint循环起始位置
endint循环结束位置
stepint循环步长
varStatusString循环状态变量,同<c:forEach>
(2).使用
<c:set var="names" value="小明|小茗|小名"/>
<c:forTokens items="${names}" delims="|" var="name" varStatus="vs">
	<c:choose>
		<c:when test="${!vs.last}">
			${vs.count }:${name },
		</c:when>
		<c:otherwise>
			${vs.count }:${name }
		</c:otherwise>
	</c:choose>
</c:forTokens>

四.URL操作标签

包括:<c:import>、<c:redirect>、<c:url>
1.<c:import>标签
可以导入站内或其他网站的静态、动态页面到JSP页面中。
(1).属性说明
属性类型描述引用EL
urlString导入资源的URL路径,绝对/相对路径
contextString上下文路径,用于访问同一个服务器的其他Web工程,其值必须以'/'开头,如果指定了该属性,那么url属性值也必须以'/'开头
varString变量名称,获取的资源存储在变量中
scopeString变量存在的范围
varReaderString以Reader类型存储被包含的文件内容
charEncodingString导入文件的编码格式
(2).使用
<!-- 导入任意URL -->
<c:import url="https://www.baidu.com/" charEncoding="utf-8"/>

<!-- 同一Context下的导入,绝对路径,相对于项目根目录 -->
<c:import url="/index.jsp"/>

<!-- 同一Context下的导入,相对路径,相对于当前文件所在目录 -->
<c:import url="test.html"/>

<!-- 不同Context下导入,相对于context属性指定的项目根目录;乱码时设置charEncoding属性;
	由于使用了<c:param>,所以请求url为:xxx/test_servlet/index.html?name=l&age=18
-->
<c:import url="/html/index.html" context="/test_servlet" charEncoding="utf-8" var="page">
	<c:param name="name" value="l"/>
	<c:param name="age" value="18"/>
</c:import>
2.<c:redirect>标签
请求重定向
(1).使用
<!-- 重定向到任意URL -->
<c:redirect url="https://www.baidu.com/"/>

<!-- 同一Context,重定向到当前项目根目录下页面 -->
<c:redirect url="/index.jsp"/>

<!-- 同一Context,请求重定向到Servlet -->
<c:redirect url="/file/uploadServlet"/>

<!-- 不同Context,重定向到context属性指定的项目根目录 -->
<c:redirect url="/index.jsp" context="/test_servlet"/>

<!-- 不同Context,请求重定向到context属性指定项目的Servlet -->
<c:redirect url="/LoginServlet" context="/test_servlet"/>
3.<c:url>标签

生成URL路径字符串,不是实现<a>的功能。若定义了var属性,url信息存储在该变量中;未定义则直接输出。

(1).使用

<!-- 直接输出index.jsp,相对路径下路径时value属性的值 -->
<c:url value="index.jsp" />
		
<!-- 绝对路径(相对于项目的根目录),并存于page域的url变量中,使用${url}获取路径信息 -->
<c:url value="/index.jsp" var="url" scope="page"/>

<!-- 绝对路径,同时传递查询参数, xxx/LoginServlet?name=l   -->	
<c:url value="/LoginServlet/" var="url">
	<c:param name="name" value="l"/>
</c:url>

<!-- 不同Context,url为:context属性指定的项目/LoginServlet -->			
<c:url value="/LoginServlet" var="url" context="/test_servlet"/>

大概整理了一下c标签以及使用方法,内容有点多,写的不是很详细,,



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值