1、EL表达式的使用
* 语法: ${表达式}
EL: Expression Lanuage(表达式语言)
注意:EL表达式只能在支持Servlet2.4和Jsp2.0的容器上才能使用。
表达式=运算符+操作数
* 运算符
a) 算术运算符:+ - * /(div) %(mod)
b) 逻辑元算符:&&(and) ||(or) !(not)
c) 比较运算符:>(gt:great than) <(lt:less than) >=(ge:great and equal) <=(le:less and equal) ==(eq:equal) !=(ne:not equal)
d) 条件运算符: ? :
e) 空运算符: empty:null, ""
说明: 与Java中的运算符比较:多一个空运算符,少赋值运算符
* 操作数
常量
a) 整型
b) 小数
c) 布尔型
d) 字符型(用单引号或双引号均可)
e) 空(null)
变量:
a) 实质:四个标准范围的属性
b) 变量的搜索顺序:按照范围从小到大的顺序搜索:pageContext < request < session < application
c) 变量的访问:可以通过.运算符或者[]运算符访问
隐式对象
a) 与作用范围有关的: pageScope, requestScope, sessionScope, applicationScope
b) 与输入有关的: param, paramValues
c) pageContext:通过这个隐式对象可以访问到request, session, servletContext
d) header, cookie
* 使用场合
a) 用于html标签中
b) 与JavaBean结合使用: 创建的JavaBean必须要放到某一个标准范围中,提供相应的get方法进行对象导航
c) 与jstl结合使用
d) 其他用法:el表达式输出Map, List, 数组和对象数组中的值
2、JSTL的使用
* 基本概念:Jsp Standard Taglib Library,主要用于提供无脚本环境
注意:JSTL只能够在支持Servlet2.4和Jsp2.0的容器上才能正常使用。
* 分类
a) 核心标签库:通用标签库,条件标签库,迭代标签库
b) I18N标签库
c) SQL标签库
d) XML标签库
e) 函数库
在使用JSTL的时候,首先要将JSTL库导入到当前工程中,并且在Jsp页面中通过taglib指令将标签库描述符文件导入
* 核心标签库
a) 通用标签库:用于在JSP页面内设置、删除变量和显示变量的值
set:
功能:设置指定范围内的变量值,如果该变量不存在,则创建它。
语法:<c:set value=”value” var=”varName” [scope=”{page|request|session|application}”]/>
var:指定变量的名称,value:指定变量的值 scope:指定变量的存储范围,默认为page
remove:
功能:用于删除变量
语法:<c:remove var=”varName” [scope=”{page|request|session|application}”]/>
var:指定要删除的变量名 scope:指定变量的存储范围
out:
功能:计算表达式并将结果显示在页面上
语法:<c:out value=”value” [escapeXml=”{true|false}”] [default=”defaultValue”] />
<c:out value=”value” [escapeXml=”{true|false}”]>
default value
</c:out>
value:指定表达式或变量 default:指定输出的默认值 escapteXml:如果value中包含<,>,&,',"
等特殊字符,在输出的时候是否将其转换为其对应的字符实体代码。默认值为true.
b) 条件标签库:用于控制程序执行流程
if(....) {
....
}
if
语法:<c:if test=”testCondition” var=”varName” [scope=”{page|request|session|application}”]/>
<c:if test=”testCondition” [var=”varName”] [scope=”{page|request|session|application}”]>
body content
</c:if>
test:指定条件表达式 var:指定变量名 scope:指定变量存储的范围
switch...case...
choose:
语法:<c:choose>
<c:when test=”testCondition1”>
body content
</c:when>
<c:when test=”testCondition2”>
body content
</c:when>
...
<c:otherwise>
conditional block
</c:otherwise>
</c:choose>
test:指定条件表达式
c) 迭代标签库
forEach:(相当于java中的for循环)
语法:<c:forEach [var=”varName”] items=”collection” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>
body content
</c:forEach>
<c:forEach [var=”varName”][varStatus=”varStatusName”]begin=”begin” end=”end” [step=”step”]>
body content
</c:forEach>
items:指定要迭代的集合 var:指定变量名 varStatus:指定迭代计数变量名 begin:指定迭代集合的开始标号
end:指定迭代集合的结束标号 step:指定迭代步长
示例:对List,Set,Map,数组的循环遍历
forTokens:
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
body content
</c:forTokens>
items:指定要迭代的字符串 delims:指定字符串中的分隔符 var:指定变量名 varStatus:指定迭代中的计数变量
begin:指定迭代的起始标号 end:指定迭代的结束标号 step:指定迭代步长
* I18N标签库
formatNumber
功能:格式化数字
语法:<fmt:formatNumber value=”numericValue”
[type=”{number|currency|percent}”]
[pattern=”customPattern”]
[currencyCode=”currencyCode”]
[currencySymbol=”currencySymbol”]
[groupingUsed=”{true|false}”]
[maxIntegerDigits=”maxIntegerDigits”]
[minIntegerDigits=”minIntegerDigits”]
[maxFractionDigits=”maxFractionDigits”]
[minFractionDigits=”minFractionDigits”]
[var=”varName”]
[scope=”{page|request|session|application}”]/>]
<fmt:formatNumber [type=”{number|currency|percent}”]
[pattern=”customPattern”]
[currencyCode=”currencyCode”]
[currencySymbol=”currencySymbol”]
[groupingUsed=”{true|false}”]
[maxIntegerDigits=”maxIntegerDigits”]
[minIntegerDigits=”minIntegerDigits”]
[maxFractionDigits=”maxFractionDigits”]
[minFractionDigits=”minFractionDigits”]
[var=”varName”]
[scope=”{page|request|session|application}”]>
numeric value to be formatted
</fmt:formatNumber>
formatDate
功能:格式化日期
语法:<fmt:formatDate value="date"
[type="{time|date|both}"]
[dateStyle="{default|short|medium|long|full}"]
[timeStyle="{default|short|medium|long|full}"]
[pattern="customPattern"]
[timeZone="timeZone"]
[var="varName"]
[scope="{page|request|session|application}"]/>
* SQL标签库
setDataSource
功能:设置数据源
语法:<sql:setDataSource {dataSource="dataSource" | url="jdbcUrl"
[driver="driverClassName"]
[user="userName"]
[password="password"]}
[var="varName"]
[scope=”{page|request|session|application}”]/>
示例:<sql:setDataSource driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/studentdb"
user="root"
password="root"
var="con"
scope="page" />
query
功能:执行数据库查询
语法:
<sql:query sql="sqlQuery"
var="varName" [scope=”{page|request|session|application}”]
[dataSource=”dataSource”]
[maxRows="maxRows"]
[startRow="startRow"]/>
<sql:query sql="sqlQuery"
var="varName" [scope=”{page|request|session|application}”]
[dataSource=”dataSource”]
[maxRows="maxRows"]
[startRow="startRow"]>
<sql:param> actions
</sql:query>
<sql:query var="varName"
[scope=”{page|request|session|application}”]
[dataSource=”dataSource”]
[maxRows="maxRows"]
[startRow="startRow"]>
query
optional <sql:param> actions
</sql:query>
示例:
<sql:query var="rows" dataSource="${con}">
select * from student
</sql:query>
<sql:query var="rows" dataSource="${con}">
select * from student where sid = ?
<sql:param value="1" />
</sql:query>
update
功能:执行数据库更新
语法:
<sql:update sql="sqlUpdate"
[dataSource=”dataSource”]
[var="varName"] [scope=”{page|request|session|application}”]/>
<sql:update sql="sqlUpdate"
[dataSource=”dataSource”]
[var="varName"] [scope=”{page|request|session|application}”]>
<sql:param> actions
</sql:update>
<sql:update [dataSource=”dataSource”]
[var="varName"] [scope=”{page|request|session|application}”]>
update statement
optional <sql:param> actions
</sql:update>
示例:
<sql:transaction dataSource="${con}">
<sql:update var="rowCount">
update student set stuAge = ? where sid = ?
<sql:param value="100" />
<sql:param value="2" />
</sql:update>
</sql:transaction>
transaction
功能:执行事务
语法:
<sql:transaction [dataSource=”dataSource”]
[isolation=isolationLevel]>
<sql:query> and <sql:update> statements
</sql:transaction>
isolationLevel ::= "read_committed" | "read_uncommitted" | "repeatable_read" | "serializable"
示例:
param
功能:设置sql参数
语法:
<sql:param value=”value”/>
<sql:param>
parameter value
</sql:param>
示例:
* 函数库
格式:前缀 + 冒号 + 函数名
自定义函数的实现步骤:
1、创建Java类,在类中提供静态的方法(定义)
2、要到WEB-INF创建标签库描述符文件(.tld)(描述)
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>my functions library</description>
<display-name>my functions</display-name>
<tlib-version>1.0</tlib-version>
<short-name>http://www.westaccp.com/functions</short-name>
<uri>http://www.westaccp.com/functions</uri>
<function>
<name>finduser</name>
<function-class>
com.westaccp.store.MyFounctions
</function-class>
<function-signature>
java.util.List findUsers()
</function-signature>
</function>
</taglib>
3、在Jsp页面中,通过taglib指令引入标签库并使用(使用)
<c:set var="userList" value="${my:finduser() }" scope="page" />
<select>
<c:forEach items="${userList}" var="u">
<option value="${u.age }">${u.group.name }</option>
</c:forEach>
</select>
* 语法: ${表达式}
EL: Expression Lanuage(表达式语言)
注意:EL表达式只能在支持Servlet2.4和Jsp2.0的容器上才能使用。
表达式=运算符+操作数
* 运算符
a) 算术运算符:+ - * /(div) %(mod)
b) 逻辑元算符:&&(and) ||(or) !(not)
c) 比较运算符:>(gt:great than) <(lt:less than) >=(ge:great and equal) <=(le:less and equal) ==(eq:equal) !=(ne:not equal)
d) 条件运算符: ? :
e) 空运算符: empty:null, ""
说明: 与Java中的运算符比较:多一个空运算符,少赋值运算符
* 操作数
常量
a) 整型
b) 小数
c) 布尔型
d) 字符型(用单引号或双引号均可)
e) 空(null)
变量:
a) 实质:四个标准范围的属性
b) 变量的搜索顺序:按照范围从小到大的顺序搜索:pageContext < request < session < application
c) 变量的访问:可以通过.运算符或者[]运算符访问
隐式对象
a) 与作用范围有关的: pageScope, requestScope, sessionScope, applicationScope
b) 与输入有关的: param, paramValues
c) pageContext:通过这个隐式对象可以访问到request, session, servletContext
d) header, cookie
* 使用场合
a) 用于html标签中
b) 与JavaBean结合使用: 创建的JavaBean必须要放到某一个标准范围中,提供相应的get方法进行对象导航
c) 与jstl结合使用
d) 其他用法:el表达式输出Map, List, 数组和对象数组中的值
2、JSTL的使用
* 基本概念:Jsp Standard Taglib Library,主要用于提供无脚本环境
注意:JSTL只能够在支持Servlet2.4和Jsp2.0的容器上才能正常使用。
* 分类
a) 核心标签库:通用标签库,条件标签库,迭代标签库
b) I18N标签库
c) SQL标签库
d) XML标签库
e) 函数库
在使用JSTL的时候,首先要将JSTL库导入到当前工程中,并且在Jsp页面中通过taglib指令将标签库描述符文件导入
* 核心标签库
a) 通用标签库:用于在JSP页面内设置、删除变量和显示变量的值
set:
功能:设置指定范围内的变量值,如果该变量不存在,则创建它。
语法:<c:set value=”value” var=”varName” [scope=”{page|request|session|application}”]/>
var:指定变量的名称,value:指定变量的值 scope:指定变量的存储范围,默认为page
remove:
功能:用于删除变量
语法:<c:remove var=”varName” [scope=”{page|request|session|application}”]/>
var:指定要删除的变量名 scope:指定变量的存储范围
out:
功能:计算表达式并将结果显示在页面上
语法:<c:out value=”value” [escapeXml=”{true|false}”] [default=”defaultValue”] />
<c:out value=”value” [escapeXml=”{true|false}”]>
default value
</c:out>
value:指定表达式或变量 default:指定输出的默认值 escapteXml:如果value中包含<,>,&,',"
等特殊字符,在输出的时候是否将其转换为其对应的字符实体代码。默认值为true.
b) 条件标签库:用于控制程序执行流程
if(....) {
....
}
if
语法:<c:if test=”testCondition” var=”varName” [scope=”{page|request|session|application}”]/>
<c:if test=”testCondition” [var=”varName”] [scope=”{page|request|session|application}”]>
body content
</c:if>
test:指定条件表达式 var:指定变量名 scope:指定变量存储的范围
switch...case...
choose:
语法:<c:choose>
<c:when test=”testCondition1”>
body content
</c:when>
<c:when test=”testCondition2”>
body content
</c:when>
...
<c:otherwise>
conditional block
</c:otherwise>
</c:choose>
test:指定条件表达式
c) 迭代标签库
forEach:(相当于java中的for循环)
语法:<c:forEach [var=”varName”] items=”collection” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>
body content
</c:forEach>
<c:forEach [var=”varName”][varStatus=”varStatusName”]begin=”begin” end=”end” [step=”step”]>
body content
</c:forEach>
items:指定要迭代的集合 var:指定变量名 varStatus:指定迭代计数变量名 begin:指定迭代集合的开始标号
end:指定迭代集合的结束标号 step:指定迭代步长
示例:对List,Set,Map,数组的循环遍历
forTokens:
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
body content
</c:forTokens>
items:指定要迭代的字符串 delims:指定字符串中的分隔符 var:指定变量名 varStatus:指定迭代中的计数变量
begin:指定迭代的起始标号 end:指定迭代的结束标号 step:指定迭代步长
* I18N标签库
formatNumber
功能:格式化数字
语法:<fmt:formatNumber value=”numericValue”
[type=”{number|currency|percent}”]
[pattern=”customPattern”]
[currencyCode=”currencyCode”]
[currencySymbol=”currencySymbol”]
[groupingUsed=”{true|false}”]
[maxIntegerDigits=”maxIntegerDigits”]
[minIntegerDigits=”minIntegerDigits”]
[maxFractionDigits=”maxFractionDigits”]
[minFractionDigits=”minFractionDigits”]
[var=”varName”]
[scope=”{page|request|session|application}”]/>]
<fmt:formatNumber [type=”{number|currency|percent}”]
[pattern=”customPattern”]
[currencyCode=”currencyCode”]
[currencySymbol=”currencySymbol”]
[groupingUsed=”{true|false}”]
[maxIntegerDigits=”maxIntegerDigits”]
[minIntegerDigits=”minIntegerDigits”]
[maxFractionDigits=”maxFractionDigits”]
[minFractionDigits=”minFractionDigits”]
[var=”varName”]
[scope=”{page|request|session|application}”]>
numeric value to be formatted
</fmt:formatNumber>
formatDate
功能:格式化日期
语法:<fmt:formatDate value="date"
[type="{time|date|both}"]
[dateStyle="{default|short|medium|long|full}"]
[timeStyle="{default|short|medium|long|full}"]
[pattern="customPattern"]
[timeZone="timeZone"]
[var="varName"]
[scope="{page|request|session|application}"]/>
* SQL标签库
setDataSource
功能:设置数据源
语法:<sql:setDataSource {dataSource="dataSource" | url="jdbcUrl"
[driver="driverClassName"]
[user="userName"]
[password="password"]}
[var="varName"]
[scope=”{page|request|session|application}”]/>
示例:<sql:setDataSource driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/studentdb"
user="root"
password="root"
var="con"
scope="page" />
query
功能:执行数据库查询
语法:
<sql:query sql="sqlQuery"
var="varName" [scope=”{page|request|session|application}”]
[dataSource=”dataSource”]
[maxRows="maxRows"]
[startRow="startRow"]/>
<sql:query sql="sqlQuery"
var="varName" [scope=”{page|request|session|application}”]
[dataSource=”dataSource”]
[maxRows="maxRows"]
[startRow="startRow"]>
<sql:param> actions
</sql:query>
<sql:query var="varName"
[scope=”{page|request|session|application}”]
[dataSource=”dataSource”]
[maxRows="maxRows"]
[startRow="startRow"]>
query
optional <sql:param> actions
</sql:query>
示例:
<sql:query var="rows" dataSource="${con}">
select * from student
</sql:query>
<sql:query var="rows" dataSource="${con}">
select * from student where sid = ?
<sql:param value="1" />
</sql:query>
update
功能:执行数据库更新
语法:
<sql:update sql="sqlUpdate"
[dataSource=”dataSource”]
[var="varName"] [scope=”{page|request|session|application}”]/>
<sql:update sql="sqlUpdate"
[dataSource=”dataSource”]
[var="varName"] [scope=”{page|request|session|application}”]>
<sql:param> actions
</sql:update>
<sql:update [dataSource=”dataSource”]
[var="varName"] [scope=”{page|request|session|application}”]>
update statement
optional <sql:param> actions
</sql:update>
示例:
<sql:transaction dataSource="${con}">
<sql:update var="rowCount">
update student set stuAge = ? where sid = ?
<sql:param value="100" />
<sql:param value="2" />
</sql:update>
</sql:transaction>
transaction
功能:执行事务
语法:
<sql:transaction [dataSource=”dataSource”]
[isolation=isolationLevel]>
<sql:query> and <sql:update> statements
</sql:transaction>
isolationLevel ::= "read_committed" | "read_uncommitted" | "repeatable_read" | "serializable"
示例:
param
功能:设置sql参数
语法:
<sql:param value=”value”/>
<sql:param>
parameter value
</sql:param>
示例:
* 函数库
格式:前缀 + 冒号 + 函数名
自定义函数的实现步骤:
1、创建Java类,在类中提供静态的方法(定义)
public static List findUsers() {
Group g1 = new Group("少年组");
Group g2 = new Group("中年组");
Group g3 = new Group("老年组");
User u1 = new User("zs", 10, g1);
User u2 = new User("lisi", 30, g2);
User u3 = new User("wangwu", 60, g3);
List userList = new ArrayList();
userList.add(u1);
userList.add(u2);
userList.add(u3);
return userList;
}
2、要到WEB-INF创建标签库描述符文件(.tld)(描述)
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>my functions library</description>
<display-name>my functions</display-name>
<tlib-version>1.0</tlib-version>
<short-name>http://www.westaccp.com/functions</short-name>
<uri>http://www.westaccp.com/functions</uri>
<function>
<name>finduser</name>
<function-class>
com.westaccp.store.MyFounctions
</function-class>
<function-signature>
java.util.List findUsers()
</function-signature>
</function>
</taglib>
3、在Jsp页面中,通过taglib指令引入标签库并使用(使用)
<c:set var="userList" value="${my:finduser() }" scope="page" />
<select>
<c:forEach items="${userList}" var="u">
<option value="${u.age }">${u.group.name }</option>
</c:forEach>
</select>