为什么是使用EL表达式
EL表达式封装了数据访问的功能,而JSTL标签库则封装了逻辑控制、循环控制以及数据格式化等功能,二者结合使用才能完整实现动态页面的开发需求
一、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>
<c:set
value
=
"value"
var
=
"name"
[
scope
=
"{page|request|session|application}"
]
/>
把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>
<span
style
=
"font-size:18px;"
><c:if
test
=
"${5 / 1 == 5}"
>
Body
</c:if></span>
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"
>
<span
style
=
"white-space:pre;"
>
</span><tr>
<span
style
=
"white-space:pre;"
>
</span><td>
${s.index }
</td>
<span
style
=
"white-space:pre;"
>
</span><td>
${row.name }
</td>
<span
style
=
"white-space:pre;"
>
</span><td>
${row.age }
</td>
<span
style
=
"white-space:pre;"
>
</span></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>