一、JSTL标签库简介
JSTL全称 jsp Standard Tag Library,常被用来代替传统的java片段语言来实现页面逻辑,与控制程序输出的EL表达式相结合,两者相辅相成。
二、JSTL标签库使用之前的准备
在使用JSTL标签之前,先要导入jstl.jar的包,如果是通过Maven创建项目的话,直接在pom.xml里添加依赖即可。还需要在JSP页面开头添加指令。uri是指tld文件中某个库的uri,PRefix是指前缀,如果是c.tld库中的,一般写成c,可以区别包里相同的标签。然后就可以用如<c:out/>这样的格式调用标签了。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>三、常用标签库的用法
1.核心标签库
1.1 通用标签
1.1.1 <c:out>
语法格式:
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/>value值为显示的值,引号内可以写EL表达式,[ ]内属性为非必填属性,escapeXml的默认值为true,代表其中的标签就按照字符串显示,不按照标签语义进行显示,default为当value值为null时,显示的默认值。1.1.2 <c:set>
语法格式1:
<c:set value="value" var="name" [scope="{page|request|session|application}"]/>这句话就相当于在某个特定范围内加一个属性。语法格式2:
<c:set value="Mike" target="${person}" property="name"/>把WEB域中某个属性key值为person的JavaBean对象的name属性值赋成value值。1.1.3 <c:remove>
语法格式:
<c:remove var="person" scope="request"/>移除某个域中的某个名为var的属性值1.1.4 <c:catch>
语法格式:
<c:catch var="exception"><% int a = 5 / 0;%></c:catch><c:out value="${exception}"/>捕获异常。1.2 条件标签
1.2.1 <c:if>
<c:if test="${5 / 1 == 5}">Body</c:if>test的中的表达式就相当于if()括号中的语句。Body就相当于test的值为true后执行的语句。1.2.2 <c:choose>
1.2.3 <c:when>
1.2.3 <c:otherwise>
以上三个标签基本一起用,choose为父标签,作为选项的开始,每个when是一个选项,最后的其它就是otherwise。
基本语法:
<c:choose> <c:when test="${5 / 1 == 1}"> BodyA </c:when> <c:when test="${5 / 1 == 2}"> BodyB </c:when> <c:otherwise> BodyC </c:otherwise></c:choose>1.3 迭代标签
<c:forEach>
假设servlet将数据存在某个WEB域中,以下是两种容器迭代方式的代码:
<% List<Person> list = new ArrayList<Person>(); list.add(new Person("kkk")); list.add(new Person("sss")); list.add(new Person("jjj")); application.setAttribute("list_1", list); Map<String, Person> map = new HashMap<String, Person>(); map.put("a", new Person("aaa")); map.put("b", new Person("bbb")); map.put("1", new Person("ccc")); request.setAttribute("map", map);%><c:forEach items="${list_1}" var="person" begin="0" end="2" step="1"> ${person.name }</c:forEach> <c:forEach items="${map }" var="entry" begin="0" end="2" step="1"> <!-- 遍历Map类对象,先转换为EntrySet,再遍历 --> ${entry.key } ${entry.value.name }<br></c:forEach>1.4 URL标签
1.41 <c:import>
<c:import url=""/>与<jsp:include page=""/>都是动态加载,但是import更灵活,可以加载WEBAPP范围外的url。
1.42 <c:redirect>
用于重定向到某个URL,语法格式:
<c:redirect url="value" [context="context"]/>1.43 <c:url>
用于产生一个链接,语法格式:
<c:url value=""[context=""] [var=""] [scope=""] />2.国际化标签库
2.1 <fmt:formatDate> 日期格式化
语法格式:
<fmt:formatDate value="<%=new Date() %>" pattern="yyyy年MM月dd日HH点mm分ss秒"/>2.2 <fmt:formatNumber> 数字格式化语法格式:
<fmt:formatNumber value="${5/3 }" pattern=".0000"/>小数点保留四位3.数据库标签库
3.1 <sql:setDataSource> 准备数据库
对于没有默认数据库的JSP页面,该标签能准备一个数据库以供使用。语法格式:
<sql:setDataSource var="demo" driver="com.MySQL.jdbc.Driver" url="jdbc:mysql://localhost:3306/db" user="root" passWord="admin" />var代表数据库的变量名,在稍后的查询将会用到3.2 <sql:query> 查询数据库
在连接了数据库后,即可使用该标签执行SQL语句查询数据库。查询后的结果集存在rs中,然后用<c:forEach>标签遍历结果集的每一行记录。语法格式:
<sql:query var="rs" dataSource="${ demo}">SELECT * FROM info</sql:query><table><c:forEach items="${rs.rows }" var="row" varStatus="s"> <tr> <td>${s.index }</td> <td>${row.name }</td> <td>${row.age }</td> </tr></c:forEach></table>也可以将Body中的sql语句写到标签里面。
<sql:query var="rs" dataSource="${ demo}" sql="SELECT * FROM info">3.3 <sql:update> 更新数据库
语法格式1:
<sql:update var="update" sql="" dataSource="${demo }"/>语法格式2:<sql:update var="update" dataSource="${demo }">UPDATE info SET age=? where name=?<sql:param value="1"/><sql:param value="xxx"/></sql:update>
新闻热点
疑难解答