JSTL全称为 JSP Standard Tag Library 即JSP标准标签库。java
JSTL做为最基本的标签库,提供了一系列的JSP标签,实现了基本的功能:集合的遍历、数据的输出、字符串的处理、数据的格式化等等!web
c:out
<%
session.setAttribute("name", "zhongfucheng");
%>
//<c:out/>标签支持标签体,default属性上的数据能够写在标签体中
//<c:out value="${name}" escapeXml="true">您要的数据找不着</c:out>
<c:out value="${name}" default="您要的数据找不着" escapeXml="true"/>
复制代码
c:set
既然var属性只能操做Integer、Double、String等类型,那么存在var属性就必定没有property属性(property表明的是对象的成员属性,Integer、String这些类型哪来的成员变量呀)浏览器
下面的代码流程是这样的:建立了一个name的变量,设置的值为zhongfucheng,范围是page服务器
<c:set var="name" value="fucheng" scope="page"/>
${name}
复制代码
<c:set var="name" scope="page">
zhongfucheng
</c:set>
复制代码
<%--因为下面变量须要作加法运算,因此要定义出来,否则服务器是不知道个人变量是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"/>
复制代码
<%--建立出JavaBean对象,设置为session范围的属性--%>
<jsp:useBean id="person" class="domain.Person" scope="session"/>
<%--获取到person对象,设置age属性的值为32--%>
<c:set target="${person}" property="age" value="32"/>
${person.age}
复制代码
c:remove
remove标签就至关简单了,只有var和scope属性,表明的是删除域范围的属性微信
<%--建立出JavaBean对象,设置为session范围的属性--%>
<jsp:useBean id="person" class="domain.Person" scope="session"/>
<%--获取到person对象,设置age属性的值为32--%>
<c:set target="${person}" property="age" value="32"/>
${person.age}
<br>
<%--删除session属性--%>
<c:remove var="person" scope="session"></c:remove>
${person.age==null?"存在session的person对象被删除了!":"我还在呢!"}
复制代码
c:catch
该标签主要用来处理程序中产生的异常。session
catch标签也十分简单,只有一个var属性,var属性封装了异常的信息!app
<%--建立出JavaBean对象,设置为session范围的属性--%>
<jsp:useBean id="person" class="domain.Person" scope="session"/>
<c:catch var="message">
<%--target属性只能是EL表达式,如今我是字符串,获取不到对象,确定会抛出异常的!--%>
<c:set target="person" property="age" value="32"/>
</c:catch>
${message}
复制代码
c:if
JSTL提供了if标签完成分支语句的实现,test属性是不可或缺的。dom
var和scope属性我看来好像没什么用的(保存执行结果有什么用?)jsp
<%--若是带过来的名字是zhongfucheng,那么能够登录--%>
<c:if test="${param.name=='zhongfucheng'}">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</c:if>
<%--若是带过来的名字是ouzicheng,那么就是注册--%>
<c:if test="${param.name=='ouzicheng'}">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="注册">
</c:if>
复制代码
c:choose
if标签没有else的功能,若是须要相似于java中的if else流程就须要使用choose标签。函数
choose标签须要联合when和otherwise标签一块儿使用!
<c:choose>
<c:when test="${param.name=='zhongfucheng'}">
你好啊,zhongfucheng
</c:when>
<c:when test="${param.name=='ouzicheng'}">
你好啊,ouzicheng
</c:when>
<c:otherwise>
你是谁啊?别随便过来!
</c:otherwise>
</c:choose>
复制代码
c:forEach
forEach为循环标签,至关于Java中的while和for
以前咱们在使用EL表达式获取到集合的数据,遍历集合都是用scriptlet代码循环,如今咱们学了forEach标签就能够舍弃scriptlet代码了。
向Session中设置属性,属性的类型是List集合
<%
List list = new ArrayList<>();
list.add("zhongfucheng");
list.add("ouzicheng");
list.add("xiaoming");
session.setAttribute("list", list);
%>
复制代码
<c:forEach var="list" items="${list}" >
${list}<br>
</c:forEach>
复制代码
<%
Map map = new HashMap();
map.put("1", "zhongfucheng");
map.put("2", "xiaohong");
map.put("3", "xiaoming");
session.setAttribute("map",map);
%>
<c:forEach var="me" items="${map}" >
${me.key} ${me.value}<br>
</c:forEach>
复制代码
begin默认从0开始、end默认为集合的最后一个元素、step默认为1
varStatus表明着当前对象被迭代的信息,它有如下的属性。
<c:forEach var="list" items="${list}" varStatus="varStatus" >
${list}您的下标是:${varStatus.index}<br>
</c:forEach>
复制代码
c:forTokens
该标签相似于String类的split()和for循环的一种集合
它与forEach标签很是类似,都有begin、end、step、items、var、varStatus属性,不一样的是forTokens标签的items属性里面是字符串,这个字符串会被delims属性的内容分割成多个字符串!
<c:forTokens items="zhongfucheng,ouzicheng,xiaoming,xiaohong" var="name" delims="," >
${name}
</c:forTokens>
复制代码
c:import
import标签相似于JSP行为<jsp:include/>
和JSP指令<%include>
import标签的属性:
固然了,import标签功能更加更大!强大在哪里呢?import标签能够引入Internet网页上的内容,也就是说,csdn也能够引入进来!
<c:import url="http://www.csdn.net" charEncoding="UTF-8" />
复制代码
<c:import url="http://www.csdn.net" charEncoding="UTF-8" var="net"/>
CSDN的源码是:<br><br><br><br><br>
<c:out value="${net}" escapeXml="true"></c:out>
复制代码
c:param
在JSP页面进行URL的相关操做时,常常要在URL地址后面附加一些参数。<c:param>标签能够嵌套在<c:import>、<c:url>或<c:redirect>标签内,为这些标签所使用的URL地址附加参数。
<c:param>标签在为一个URL地址附加参数时,将自动对参数值进行URL编码,例如,若是传递的参数值为“中国”,则将其转换为“%d6%d0%b9%fa”后再附加到URL地址后面,这也就是使用<c:param>标签的最大好处。
c:url
url标签十分实用!在浏览器禁用Cookie的时候,咱们以前学Servlet时解决办法是:response.encodeURL()。url标签也能够实现这样的功能,再配合param标签使用,就十分实用了!
<c:url value="2.jsp" var="url">
<c:param name="name" value="中国!">
</c:param>
</c:url>
<a href="${url}">我通过了URL地址重写!</a>
复制代码
c:redirect
redirect标签用于实现Redirect功能,固然了,此标签也可以配合param标签使用!
<c:redirect url="2.jsp" >
<c:param name="name" value="zhongfucheng">
</c:param>
</c:redirect>
复制代码
fmt标签库也叫作国际化标签库。这里就不详细说明了,等我讲到Web 国际化的时候才讲吧!
fn方法库也叫作EL函数库、fn标签库。这个在讲解EL表达式的时候有详细的说明,可转移到我EL表达式的博文中!
若是文章有错的地方欢迎指正,你们互相交流。习惯在微信看技术文章的同窗,能够关注微信公众号:Java3y