JSTL是需要下载的:https://jstl.java.net/,然后导入工程文件的lib中。
JSTL分为五类,使用哪一类在jsp页面taglib不一样,包括:Core,XML,I18n,数据库,功能。例如使用Core库:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
prefix="c"就像HelloWorld一样,随意的,但是确是规范。
1.在Core库中的常用的动作指令:
1)out标签:它最后的作用还是输出(赋值到隐式对象JspWriter),之前会对值进行解析运算,和大多说html标签一样它可以有主体内容,也可以没有。
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/>或者<c:out value="value" [escapeXml="{true|false}"]>default Value</c:out>
其中,[]包含的属性在实际使用的时候是可选的,escapeXml表示是否把值中的特殊字符<,>,&等转换成相应的字符实体代码(默认情况下是要的),一般值是使用EL表达式,即${value}。
实例:<c:out value="${sessionScope.value}" default="${applicationScope.value}"/>的意思是如果在session中找不到value那就在application中找value,否则就返回空字符串。
2)set标签:就是将一个值给另一个值,设置后,这个页面后面的代码就可以访问这个值了。
功能一:创建一个限域变量,他的值要嘛现造,要嘛引用其他限域对象的值。
<c:set value="value" var="varName" [scope="{page|request|session|application}"]/>
例如:<c:set var="test1" value="test1value"/>(给新建的变量test1赋值为test1Value。<c:set var="test2" value="${requestScope.test2var}" scope="page"/>(创建一个page范围限域变量test2,并引用request范围的test2Var。)
功能一:设置对象的值。
<c:set target="target" property="property“ value="value"/>
例如:<c:set target="${student}" property="name“ value="yuege"/>(将对象student的name属性设置值为yuege.
3)remove标签:顾名思义就是删除限域变量。
<c:remove var="varName" [scope="{page|request|session|application}"]/>
例如:删除page范围的job变量,<c:remove var="job" scope="page"]/>
值得注意的是,这里删除的只是job变量,并没有删除page里面的对象,所以job1这个另外的变量也可以job原来引用的对象。
2.在条件式动作指令:
1)if标签:判断是否满足标签的条件,如果满足就执行主题里面的内容。
<c:if test="condition" var="varName" [scope="{page|request|session|application}"]/>或者
<c:if test="condition" [var="varName"] [scope="{page|request|session|application}"]>HelloWold!</c:if>
其中var的意思是一个Boolean类型的指,保存条件的正确或者错误,并可以制定scope范围。
例如:<c:if test="${param.username=='yuege' && param.password=='yuege'}">HelloWold!</c:if>表示用户名和密码都对了的话,就显示HelloWorld!
2)choose,when和otherwise标签:
小白的我不常用,略。
3.iterator动作指令(终于到遍历了)
1)forEach标签:可以迭代实现了Collection和Map的对象,Iterator对象,Enumeration对象,普通对象/基本数据类型(8种)的数组。
<c: forEach [var="varName"] begin="begin" end="end" step="step">
Content
</c:forEach >(对Content的重复)
<c: forEach items="collection" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
Content
</c:forEach >(对Content的重复)
例如:
<c: forEach var="x" begin="1" end="5">
<c:out value="${x}"/>
</c:forEach >(打印1,2,3,4,5)
<c:forEach items="${requestScope.students}" var="student">
${student}
</c:forEach >(对requestScope范围的student的遍历)
附加属性,可以增加一个叫varStatus来判断此次迭代的次数,有什么用?可以制造出条纹状的表格,更美观等等。
例如:
<table>
<tr>
<td>name</td>
</tr>
<c:forEach items="${requestScope.students}" var="student" varStatus=“status”>
<c:if test="${status.count%2 == 0}">
<tr style="某种样式1“>
</c:if>
<c:if test="${status.count%2 != 0}">
<tr style="某种样式2“>
</c:if>
<td>${student.name}</td>
</c:forEach >
</table>(单数深色,双数无色)
2)forTockens标签:
略。
4.格式化动作指令<fmt:..............
略。
5.函数
略。