什么是JSTL
JSTL全称为 JSP Standard Tag Library 即JSP标准标签库。
JSTL作为最基本的标签库,提供了一系列的JSP标签,实现了基本的功能:集合的遍历、数据的输出、字符串的处理、数据的格式化等等!
为什么要使用JSTL
- EL表达式不够完美,需要JSTL的支持!在JSP中,我们前面已经用到了EL表达式,体会到了EL表达式的强大功能:使用EL表达式可以很方便地引用一些JavaBean以及其属性,不会抛出NullPointerException之类的错误!但是,EL表达式非常有限,它不能遍历集合,做逻辑的控制。这时,就需要JSTL的支持了!
- Scriptlet的可读性,维护性,重用性都十分差!JSTL与HTML代码十分类似,遵循着XML标签语法,使用JSTL让JSP页面显得整洁,可读性非常好,重用性非常高,可以完成复杂的功能!
- 在JSP中不推荐使用scriptlet输出,推荐使用JSP标签。
使用JSTL标签库步骤:
- 导入jstl.jar和standard.jar开发包
- 在JSP页面中用tablib指令引入需要用到的JSTL标签
core标签库
- core标签库是JSTL的核心标签库,实现了最基本的功能:流程控制、迭代输出等操作!
- core标签库的前缀一般是c
c:out
简单使用一下
<% session.setAttribute("name", "zhongfucheng"); %> //<c:out/>标签支持标签体,default属性上的数据可以写在标签体中 //<c:out value="${name}" escapeXml="true">您要的数据找不着</c:out> <c:out value="${name}" default="您要的数据找不着" escapeXml="true"/>
我们发现上面的代码实现的效果和EL表达式是一样的,它出色的地方就多了两个属性,default和escapeXml属性。如果我们用到这两个属性,我们就使用该标签,如果没有用到这两个属性就用EL表达式就可以了。
c:set
- 该标签有5个属性,用起来有稍微有些复杂了!现在要记住的就是:var属性操作的是Integer、Double、Float、String等类型的数据,target属性操作的是JavaBean或Map对象的数据,scope代表的是Web域,value是值,property是对象的属性!
使用var属性
- 既然var属性只能操作Integer、Double、String等类型,那么存在var属性就一定没有property属性(property代表的是对象的成员属性,Integer、String这些类型哪来的成员变量呀)
- 下面的代码流程是这样的:创建了一个name的变量,设置的值为zhongfucheng,范围是page
<c:set var="name" value="fucheng" scope="page"/> ${name}
效果:
当然了,set标签也支持标签体,value的值可以写在标签体里边
<c:set var="name" scope="page"> zhongfucheng </c:set>
使用var属性和scope属性实现计数器
<%--由于下面变量需要做加法运算,所以要定义出来,不然服务器是不知道我的变量是Integer类型的--%> <% Integer sessionCount = 0; Integer applicationCount = 0; %> <c:set var="sessionCount" value="${sessionCount+1}" scope="session"/> <c:set var="applicationCount" value="${applicationCount+1}" scope="application"/>
效果:
使用target属性
- 使用target属性与之配对的是property属性,target属性只能操作JavaBean或Map对象,property就是对应的成员变量或key了。。
- 既然target属性操作的是JavaBean或Map对象,那么一定是通过EL表达式来获取到对象了。taget属性如果获取不到数据会抛出异常!使用target属性就一定没有scope属性(scope属性代表的是保存范围,target的值都是获取来的,难道你还能改变人家的范围?)
<%--创建出JavaBean对象,设置为session范围的属性--%> <jsp:useBean id="person" class="domain.Person" scope="session"/> <%--获取到person对象,设置age属性的值为32--%> <c:set target="${person}" property="age" value="32"/> ${person.age}
效果: