资源描述
《Java Web应用开发》教案
第十一章 JSP原则标签库
-7-17
1. 回顾:[10分钟] 2
2. 课程知识点解说: 2
2.1. JSTL 简介[5分钟] 3
2.2. 核心标签库[20分钟] 3
2.3. 国际化与格式化标签库[30分钟] 5
2.4. SQL 标签库[30分钟] 7
3. 本章总结 [10分钟] 8
4. 考核点 9
5. 扩展某些: 9
6. 学员问题汇总: 9
7. 作业: 9
1. 回顾:[10分钟]
2. 课程知识点解说
1.1 JSTL 简介[5分钟]
核心标签库、国际化(I18N) 与格式化标签库、XML 标签库以及SQL 标签库;JSTL 标签库两种版本;使用JSTL taglib 指令;
1.2 核心标签库[20分钟]
<c:set>、<c:remove>;<c:out>;<c:if>;<c:choose>;<c:forEach>;<c:forTokens>;
1.3 国际化与格式化标签库[30分钟]
<fmt:setLocale>;<fmt:bundle>;<fmt:setBundle>;<fmt:message>;理解资源文献;
1.4 SQL 标签库[30分钟]
<sql:setDataSource>;<sql:query>;<sql:update>;<sql:transaction>;<sql:param>;
3. 本章总结[10分钟]
4. 学员问题汇总
5. 作业
授课教师:谢华军
学时:2小时
l 本章重要目
1、理解核心标签库
2、理解I18N 和格式标签
3、理解SQL 标签库
l 本章重点
理解JSTL 概念和如何使用原则标签库编写JSP 页面
l 本章难点
SQL 标签库
1. 回顾:[10分钟]
提问:
定义简朴标签解决程序文献需要几种环节?
自定义标签是顾客定义 JSP 语言元素
标签解决程序是一种对象,Web 容器调用此对象,以在执行 JSP 页面过程中解释自定义标签
简朴标签解决程序必要实现 Tag 接口 doStartTag() 和 doEndTag() 办法
标签库描述符 (TLD,Tag Library Descriptor) 包括库以及该库中所包括每个标签信息
标签文献,用更简朴方式来自定义标签。
2. 课程知识点解说:
2.1. JSTL 简介[5分钟]
从上节自定义标签作引入:咱们无论做什么系统,在jsp编写中或许会遇到相似或者相似操作,例如对变量输出以及赋值操作,某些条件解决以及对一种集合循环操作,尚有连接查询数据库等通用操作,这些如果用标签实现是不是要每做一种项目都要作一套标签么?如果有现成这种原则库那不就以便多了!答案是必定!下面要讲述就是这种标签库。
JSTL 是什么:Java Server Pages 原则标签库 (JSTL) 包括各种标签可用于 JSP 页面中。
JSP 原则标签库 (JSTL) - 提供两组标签,一组使用 EL(Expression Language,表达式语言),而另一组支持使用祈求时表达式。
为什么要用JSTL:可以编写没有java代码jsp页面。使JSP页面很容易被WEB设计人员理解,表达更清晰。减少程序出错,是程序容易维护。
JSP 原则标签库涉及:核心标签库,I18N与格式化标签库,SQL标签库,XML标签库。
核心标签库:包括各种惯用标签,如通用,迭代,条件等标签。
I18N与格式化标签库:包括国际化标签和格式化标签。
SQL标签库:包括数据库访问和更新标签。
XML标签库:包括对XML操作标签。
2.2. 核心标签库[20分钟]
要使用核心标签库,必要先导入核心标签库URI,语法如下:
<%@ taglib uri=”” prefix=”c” %>
1. 通用标签
通用标签库用于操作 JSP 页面内作用域变量。
<c:set>:设立jsp中变量,如果不存在就创立它。
语法:<c:set var=”变量名” value=” 变量值” scope=”作用域范畴”>
作用域范畴,是page,request,session,application中一种,默认是page。
<c:remove>:用于删除创立变量。
语法:<c:set var=”变量名” scope=”作用域范畴”>
作用域范畴,是page,request,session,application中一种,默认是page。
<c:out>:输出表达式值到页面。
语法:<c:out value=”要输出值” escapeXml=”true\false” default=”默认值”>
escapeXml,拟定与否将成果中字符(如<,>,&,”,’)转化乘字符实体代码,默以为true。教材192上有个转换表。
示例:
<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib uri="" prefix="c" %>
<html>
<head>
<title>
dtjsp
</title>
</head>
<body bgcolor="#ffffff">
<c:set var="co" scope="page" value="1"/>
输出变量<c:out value="${co}"/>
<c:remove var="co" scope=”page” />
删除后输出变量<c:out value="${co}"/>
</body>
</html>
2. 条件标签
JSTL 提供条件标签以支持 JSP 页面中各种条件。
<c:if>:用于有条件执行代码。是容器标签。
语法:<c:if test=”条件表达式” var=”变量名” scope=”变量范畴”>内容</c:if>
提示:属性var和scope是可选。
<c:choose>:用于执行条件语句块,类似 Java中switch语句。是容器标签。和<c:when><c:otherwise>一起使用。
语法:<c:choose>
<c:when test=”条件1”>内容</c:when>
<c:otherwise>内容 </c:otherwise>
</c:choose>
3. 迭代标签
迭代标签用于多次计算标签体,循环计算。
<c:forEach>:
语法:<c:forEach var="变量名" items="要遍历对象集合" varStatus=”变量状态” begin=”开始位置” end=”结束位置”>内容</c:forEach>
<c:forTokens>:用于遍历用分隔符值集合。
语法:<c:forTokens var="变量名" items="要遍历对象集合" delims=”分隔符” varStatus=”变量状态” >内容</c:forEach>
示例:
<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib uri="" prefix="c" %>
<html>
<head>
<title>
dtjsp
</title>
</head>
<body bgcolor="#ffffff">
<%
String[] str = {"hello","haha","hi"};
pageContext.setAttribute("sts",str);
%>
用forEach输出数组对象<br>
<c:forEach var="va" items="${pageScope.sts}" varStatus="ss">
<c:out value="第${ss.count}个 :${va}"/><br>
</c:forEach>
<br>
<c:set var="co" scope="page" value="1;2:3'45|9.6"/>
用forTokens输出${co}<br>
<c:forTokens delims=";:'|." items="${co}" var="so" varStatus="soo">
<c:out value="第${soo.count}个 :${so}"/><br>
</c:forTokens>
</body>
</html>
2.3. 国际化与格式化标签库[30分钟]
什么叫国际化?例如我开发一套系统中华人民共和国人用,英国人也用,就是说规定系统界面要有中文和英文,系统里边日期货币等格式问题也不同,是不是咱们就要做两套系统,起码要做两套jsp呢?如果是,将来系统维护升级一种地方,我就要修改这两套系统代码,麻烦!有无办法把不同语言统一到一种系统里边呢?固然有,咱们下边国际化和格式化标签库就可以很以便解决问题!
I18N(在英文中, 国际化(Internationalization)被缩写为I18N, 即只取首尾两个字母, 中间字母为18个) 与格式化标签库可用于创立国际化 Web 应用程序。
它也可用于对通过格式化数字和日期-时间输出成果进行原则化。
I18N 应用程序特点是: 可以在全世界运营;支持多语言;可以迅速本地化。
一方面导入国际化和格式化标签库:
<%@ taglib uri="" prefix="fmt" %>
国际化 (I18N) 与格式化标签库中标签有:
<fmt:setLocale>:用于重写客户端指定区域设立。这是空标签。
<fmt:bundle>:创立一种I18N本地化上下文,并加载它资源包。容器标签。
<fmt:setBundle>:创立一种I18N本地化上下文,并加载它资源包,存储在范畴变量里。空标签。
<fmt:message>用于给出资源包输出值。
注意:资源文献要保存在/WEB-INF/classes目录下;页面字符集要设立为utf-8。
需要把资源文献本地编码转换为unicode编码,用jdk工具native2ascii。
示例: reg.jsp
<%@ page contentType="text/html;charset=utf-8" %>
<%@ taglib uri="" prefix="c" %>
<%@ taglib uri="" prefix="fmt" %>
<c:if test="${param.lang == 'zh_CN' || param.lang == null}">
<fmt:setLocale value="zh_CN" scope="session"/>
</c:if>
<c:if test="${param.lang == 'en'}">
<fmt:setLocale value="en" scope="session"/>
</c:if>
<fmt:setBundle basename="reg" scope="session"/>
<html>
<head>
<title>
regjsp
</title>
<style type="text/css">
<!--
.style1 {
font-size:36px;
font-weight:bold;
}
-->
</style>
</head>
<body>
<p align="center" class="style1"><fmt:message key="title"/></p>
<form name="form1" method="post" action="savereg.jsp">
<table width="400" border="1" align="center">
<tr>
<td width="178"><div align="right"><fmt:message key="username"/></div></td>
<td width="206"><input name="username" type="text" id="username"></td>
</tr>
<tr>
<td><div align="right"><fmt:message key="password"/> </div></td>
<td><input name="password" type="text" id="password"></td>
</tr>
<tr>
<td><div align="right"><fmt:message key="email"/> </div></td>
<td><input name="email" type="text" id="email"></td>
</tr>
<tr>
<td><div align="center">
<input type="reset" name="Submit" value="<fmt:message key="reset"/>">
</div></td>
<td><div align="center">
<input type="submit" name="Submit2" value="<fmt:message key="submit"/>">
</div></td>
</tr>
</table>
</form>
<fmt:message key="select_lang"/>:<a href="regjsp.jsp?lang=zh_CN"><fmt:message key="lang1"/></a> <a href="regjsp.jsp?lang=en"><fmt:message key="lang2"/></a>
</body>
</html>
示例: reg_en. properties
title=Register
select_lang=Select your perferred language
lang1=\u4e2d\u6587
lang2=English
username=User Name
password=PassWord
email=E-mail
submit=Submit
reset=Reset
示例: reg_zh_CN. properties
title=\u6ce8\u518c
select_lang=\u9009\u62e9\u60a8\u559c\u6b22\u7684\u8bed\u8a00
lang1=\u4e2d\u6587
lang2=English
username=\u7528\u6237\u540d
password=\u5bc6\u7801
email=\u90ae\u7bb1
submit=\u63d0\u4ea4
reset=\u91cd\u7f6e
2.4. SQL 标签库[30分钟]
SQL 标签库用于从 JSP 页面访问和更新数据库。
SQL 标签库具备如下功能:传递各种数据库查询;访问查询成果;数据库修改;执行各种数据库事务。
导入标签库:
<%@ taglib uri="" prefix="sql" %>
SQL 标签库中标签有:
<sql:setDataSource>用于为数据库设立数据源。空标签。
<sql:query>:查询数据标签。
<sql:update>:更新数据标签,涉及了sql语句里insert,update,delete操作。
<sql:transaction>:事务标签。
<sql:param>:sql参数标签,和<sql:query>或<sql:update>一起使用。
示例: savereg.jsp
<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib uri="" prefix="c" %>
<%@ taglib uri="" prefix="sql" %>
<sql:setDataSource url="jdbc:odbc:liu"
driver="sun.jdbc.odbc.JdbcOdbcDriver"
user="" password="" var="conn" scope="session"/>
<sql:update dataSource="${conn}" var="result" scope="page">
<%-- insert into users(username,userpwd,email) values('${param.username}','${param.password}','${param.email}') --%>
insert into users(username,userpwd,email) values(?,?,?)
<sql:param value="${param.username}"/>
<sql:param value="${param.password}"/>
<sql:param value="${param.email}"/>
</sql:update>
<html>
<head>
<title>
savereg
</title>
</head>
<body bgcolor="#ffffff">
<c:if test="${result > 0}">
${'注册成功'}
</c:if>
<c:if test="${result <= 0}">
${'注册失败'}
</c:if>
</body>
</html>
示例: showuser.jsp 显示顾客表里所有顾客。
<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib uri="" prefix="c" %>
<%@ taglib uri="" prefix="sql" %>
<sql:setDataSource url="jdbc:odbc:liu"
driver="sun.jdbc.odbc.JdbcOdbcDriver"
user="" password="" var="conn" scope="session"/>
<sql:query var="user" dataSource="${conn}" scope="page">
select * from users
</sql:query>
<html>
<head>
<title>
showuser
</title>
</head>
<body bgcolor="#ffffff">
<table border="1">
<tr>
<c:forEach var="colname" items="${user.columnNames}">
<th>
<c:out value="${colname}">
</c:out>
</th>
</c:forEach>
</tr>
<c:forEach var="row" items="${user.rowsByIndex}">
<tr>
<c:forEach var="col" items="${row}">
<td><c:out value="${col}"></c:out></td>
</c:forEach>
</tr>
</c:forEach>
</table>
</body>
</html>
3. 本章总结 [10分钟]
五分钟: 让学员提问方式来提出没学懂地方
三分钟: 总结本课堂:
JSP标签库是一种通用原则标签库,给咱们提供了诸多通用操作。咱们可以象用普通HTML标签同样来应用它。
注意区别forEach标签和forTokens标签。重点是要纯熟综合应用本标签库对数据库进行操作以及展示数据。
4. 考核点
考核点1:原则标签库构造
考核点2:SQL标签用法
5. 扩展某些:
<%@ taglib prefix="c" uri="" %>
<%@ taglib prefix="sql" uri="" %>
<html>
<head>
<title>所有客户</title>
</head>
<body bgcolor="white">
<c:set var="noOfRows" value="2" />
<sql:setDataSource driver =
"com.microsoft.jdbc.sqlserver.SQLServerDriver" url =
"jdbc:microsoft:sqlserver://accp:1433;DataBaseName=pubs;" user="sa" password="sa" var="conn"/>
<c:if test="${custList == null}">
<sql:query var="custList" scope="session"
sql="SELECT * FROM Customers ORDER BY LastName"
dataSource="${conn}"/>
</c:if>
<c:choose>
<c:when test="${custList.rowCount == 0}">
此处不再有其她客户...
</c:when>
<c:otherwise>
<b>如下是客户列表:</b>
<p>
<table border="1">
<th>姓氏</th>
<th>名字</th>
<th>年龄</th>
<c:forEach items="${custList.rows}" var="row"
begin="${param.start}" end="${param.start +
noOfRows - 1}">
<tr>
<td><c:out value="${row.LastName}" /></td>
<td><c:out value="${row.FirstName}" /></td>
<td><c:out value="${row.Age}" /></td>
</tr>
</c:forEach>
</table>
</c:otherwise>
</c:choose>
<p>
<c:choose>
<c:when test="${param.start > 0}">
<a href="foreachexample.jsp?start=<c:out
value="${param.start - noOfRows}" />">
上一页</a>
</c:when>
<c:otherwise>
上一页
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${param.start + noOfRows <
custList.rowCount}">
<a href="foreachexample.jsp?start=<c:out
value="${param.start + noOfRows}" />">
下一页</a>
</c:when>
<c:otherwise>
下一页
</c:otherwise>
</c:choose>
</body>
6. </html>学员问题汇总:
学员问题1: 为什么使用forTokens?
答:forTokens用于对整个由分隔符分隔集合对象重复执行嵌套标签体内容,它是一种迭代标签。
学员问题2: <when>和<otherwise>之间有什么区别?
答:<when>动作指定测试条件。如果条件值为true,则会解决<when>标签体中内容;如果条件值为false,则会解决<otherwise>标签体中内容。在一种<choose>动作中可以有各种<when>,但只能有一种<otherwise>
学员问题3: SQL标签库中哪个动作用于从JSP页面将数据插入数据库?
答:<update>动作用于从JSP页面插入、删除或是更新数据库中数据。
7. 作业:
· 习题1:编写一种程序,使用forEach标签在JSP页面中显示产品名称和成本。
· 习题2:编写一种程序,使用国际化标签分别显示美国和中华人民共和国样式日期和数字。(提示:formantDate和formatNumber标签)
展开阅读全文