JSTL
------------------------------------------------------------------------------
功能領域 URI 前綴 描述
Core http://java.sun.com/jsp/jstl/core c 核心標記庫
format http://java.sun.com/jsp/jstl/fmt fmt 格式化標記庫-進間、日期、國際化
SQL http://java.sun.com/jsp/jstl/sql sql 對數(shù)據(jù)庫的操作
XML http://java.sun.com/jsp/jstl/xml xml 對XML的操作
Functions http://java.sun.com/jsp/jstl/functions fn 函數(shù)標記庫,主要是字符串
用在視圖層的技術
--------------------------------------------------------------------------------
用使:
1 引用標記庫
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<body>
用戶名:<c:out value="${username}" />
</body>
</html>
-----------------------------------------------------------------------------------
Core核心標記庫
操作變量 條件操作 循環(huán)操作 URI操作
out if forEach import
set choose forTokens url
remove when redirect轉向
catch otherwise param
--------------------------------------------------------------------------------------
<c:out>標記
使用語法
1 <c:out value="vlaue" [escapeXml="{true|false}"]
[default="defaultValue"] />
2 <c:out value="vlaue" [escapeXml="{true|false}"]>
default value
</c:out>
屬性
------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 | 缺省值
value | 需要輸出的值,可以是EL表達式或常量 | 可以 | 是 | 無
default | value值為空時所輸出的內(nèi)容 | 可以 | 否 | 無
escapeXml | 為true對輸出內(nèi)容中的<、>、'、"和& | 可以 | 否 | true
| 字符進行轉義,分別轉成都市<,>, | | |
| ',"和&.為false不進行轉義 | | |
------------------------------------------------------------------------
<c:set>標記
使用語法
1 <c:set value="value" var="name" [scope="{page|request|session|application}"] />
2 <c:set var="name" [scope="{page|request|session|application}"]>
value
</c:set>
3 <c:set var="name" target="target" property="propertName">
4 <c:set target="target" propert="propertyName">
value
</c:set>
3和4是給已有的對象屬性賦值
屬性
-----------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 | 缺省值
value | 要保存的內(nèi)容,可以是EL表達式或常量 | 可以 | 是 | 無
target | 要修改屬性的對象名,一般為javaBeans對象名 | 可以 | 否 | 無
property | 要修改的javaBeans的屬性 | 可以 | 否 | 無
var | 要保存內(nèi)容的變量名 | 否 | 是 | 無
scope | 保存內(nèi)容的變量的作用范圍 | 否 | 否 | page
-----------------------------------------------------------------------------
<c:remove>標記
使用語法
<c:remove var="name" [scope="{page|request|session|application}"] />
屬性
------------------------------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 | 缺省值
var | 被刪除的變量的名字 | 否 | 是 | 無
scope | 被刪除的變量的作用范圍 | 否 | 否 | page,request,session,application
------------------------------------------------------------------------------------------------
<c:catch>標記
使用語法
<c:catch [var="name"]>
body content
</c:catch>
屬性
------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 | 缺省值
var | 用來保存違例信息的變量名 | 否 | 否 | 無
------------------------------------------------------------------------
例子:
<c:catch var="ex">
<%
String number="none";
int i=Integer.parseInt(number);
%>
</c:catch>
${ex}
將違例信息保存在ex變量中,如沒有發(fā)生違例,則什么也不作
<c:if>標記
使用語法
1 <c:if test="condition" var="name" [scope="{page|request|session|application}"] />
2 <c:if test="condition" [var="name"] [scope="{page|request|session|application}"]>
body content
</c:if>
屬性
-----------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 | 缺省值
test | 判斷所要使用的條件 | 可以 | 是 | 無
var | 保存條件結果的變量的名稱 | 否 | 否 | 無
scope | 保存條件結果的變量的作用范圍 | 否 | 否 | page
-----------------------------------------------------------------------------
<c:choose>標記
使用語法
<c:choose>
body content(<when>and<otherwise>)
</c:choose>
<c:when>標記
使用語法
<c:when test="condition">
body content
</c:when>
屬性
-----------------------------------------------------------------------------
屬性名 | 描述 | 動態(tài) | 必選 | 缺省值
test | 如果它的結果為true,執(zhí)行<c:when>所包含的 | 可以 | 是 | 無
| 內(nèi)容,false則不執(zhí)行<c:when>所包含的內(nèi)容 | | |
-----------------------------------------------------------------------------
<c:otherwise>標記
使用語法
<c:otherwise>
body content
</c:otherwise>
---------------------------------------------------------------------------
例子:
<c:choose>
<c:when test="${param.age>=70}">
70以上
</c:when>
<c:when test="${param.age>35 and param.age<70}">
35-70
</c:when>
<c:otherwise>
35以下
</c:otherwise>
</c:choose>
--------------------------------------------------------------------------------------------
<c:forEach>標記
使用語法
1 <c:forEach [var="name"] items="collection" [varStatus="varStatusName"]
[begin="begin"] [end="end"] [step="step"]>
body content
</c:forEach>
2 <c:forEach [var="name"] items="collection" [varStatus="varStatusName"]
begin="begin" end="end" [step="step"]>
body content
</c:forEach>
屬性
------------------------------------------------------------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 | 類型 |缺省值
begin | 開始下標 | 可以 | 否 | int |0
end | 結束下標 | 可以 | 否 | int |集合中最后一個成員的索引
step | 步長 | 可以 | 否 | int |1
var | 代表當前成員的變量名 | 否 | 否 | String |無
items | 進得循環(huán)的集合 | 否 | 否 | String,數(shù)組,Map,Collection,Iterator,Enumeration |無
varStatus | 顯示循環(huán)狀態(tài)的變量 | 可以 | 否 | String |無
-------------------------------------------------------------------------------------------------------------------------------
varStatus屬性
----------------------------------------------------------
名稱 | 類型 | 描述
index | int | 現(xiàn)在所操作的成員的索引
count | int | 現(xiàn)在所操作的成員的總數(shù)
first | boolean | 現(xiàn)在所操作的成員,是否為第一個成員
last | boolean | 現(xiàn)在所操作的成員,是否為最后一個成員
----------------------------------------------------------
<%
String names[]=new String[4];
names[0]="afdsaf";
names[1]="dggh";
names[2]="bcbncn";
names[3]="434535";
pageContext.setAttribute("names",names);
Map map=new HashMap();
map.put("k1","v1");
map.put("k2","v2");
request.setAtrribute("map1",map);
%>
<c:forEach items="${names}" var="name" begin="1" end="2" step="1" varStatus="i">
${name } ${i.index } ${i.count } ${i.first } ${i.last }<br/>
</c:forEach>
<c:forEach items="${map1}" var="v">
${v.key } = ${v.value }<br/>
</c:forEach>
<c:forTokens>標記 將一個字符串進行分隔
使用語法
<c:forTokens items="stringOfTokens" delims="delimiters" [var="name"]
[varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
body content
</c:forTokens>
屬性
------------------------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 | 類型 |缺省值
items | 進行迭代處理的變量 | 可以 | 是 | String |無
delims | 分割符號 | 可以 | 是 | char |無
begin | 開始下標 | 可以 | 否 | int |0
end | 結束下標 | 可以 | 否 | int |集合中最后一個成員的索引
step | 步長 | 可以 | 否 | int |1
var | 代表當前成員的變量名 | 否 | 否 | String |無
varStatus | 顯示循環(huán)狀態(tài)的變量 | 否 | 否 | String |無
-------------------------------------------------------------------------------------------
<c:forTokens items="dsf:dsafsa:dsffs,dfdfs" var="name" delims=":,">
${name }<br/>
</c:forTokens>
-------------------------------------------------------------------------------------------
<c:import>標記 相當于include將另外一個頁面的內(nèi)容引入到當前頁面來
使用語法
1 <c:import url="url" [context="context"] [var="name"] [scope="{page|request|session|application}"]
[charEncoding="charEncoding"]>
<c:param>//可傳參數(shù)
</c:import>
2 <c:import url="url" [context="context"] varReader="varReaderName"
[charEncoding="charEncoding"]>
body content//內(nèi)容
</c:import>
屬性
------------------------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 |缺省值
url | 需要導入頁面url地址 | 是 | 是 |無
context | 本地web應用的名字 | 是 | 否 |當前應用的名子
charEncoding | 設置導入數(shù)據(jù)的字符編碼 | 是 | 否 |ISO-8859-1
var | 接受導入文本的變量的名稱 | 否 | 否 |無
scope | 接受導入文本內(nèi)容的變量的作用范圍 | 否 | 否 |page
varReader | 用于接受導入文本的java.io.Reader變量的名稱 | 否 | 否 |無
-------------------------------------------------------------------------------------------
<c:url>標記 創(chuàng)建鏈接
使用語法
1 <c:url value="value" [context="context"] [var="name"] [scope="{page|request|session|application}"] />
2 <c:url value="value" [context="context"] [var="name"] [scope="{page|request|session|application}"] />
<c:param />
</c:url>
屬性
------------------------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 |缺省值
value | url地址 | 是 | 是 |無
context | web應用的名字 | 是 | 否 |當前web應用的名子
var | 保存url地址的變量的名稱 | 否 | 否 |輸出到當前頁面
scope | 存儲url地址的變量的作用范圍 | 否 | 否 |page
-------------------------------------------------------------------------------------------
<c:url var="website" value="http://localhost:8080/webproject/out.jsp">
<c:param name="p" value="hello" />
</c:url>
${website }<br>
<a href=" ${website }">dddd</a>
--------------------------------------------------------------------------------
<c:redirect>標記 頁面跳轉
使用語法
1 <c:redirect url="value" [context="context"] />
2 <c:redirect url="value" [context="context"]>
<c:param />
</c:redirect>
屬性
------------------------------------------------------------------------------------------
屬性名 | 描述 | 必選 |缺省值
url | url地址 | 是 |無
context | 要轉向到的web應用的名字 | 否 |當前web應用的名子
-------------------------------------------------------------------------------------------
<c:redirect url="LoopTag.jsp">
<c:param name="p" value="aa" />
</c:redirect>
-------------------------------------------------------------------------------
Format標記庫
-----------------------------------------
國際化有關 | 時間日期有關(一般不在頁面作處理)
setLocale | formatNumber
requestEncoding | formatDate
bundle | parseDate
message | parseNumber
param | setTimeZone
setBundle | timeZone
-----------------------------------------
<fmt:setLocale>標記 設置國際化語言
使用語法
<fmt:setLocale value="locale" [variant="variant"] [scope="{page|request|session|application}"] />
屬性
---------------------------------------------------------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 |缺省值
value | 表示該語言環(huán)境的一個字符串,或者是java.util.Locale類的對象 | 可以 | 是 |無
scope | 指定這個對象的作用范圍,有效值為page,requset,session,applicattion | 否 | 否 |page
variant | 進一步針對特定的平臺或供應商定制語言環(huán)境。如,MAC和WIN分別對應Macintosh和Windows平臺 | 可以 | 否 |無
---------------------------------------------------------------------------------------------------------------------------
<fmt:setBundle>標記 設定國際化資源束的位置
使用語法
<fmt:setBundle basename="basename" [var="name"] [scope="{page|request|session|application}"] />
屬性
---------------------------------------------------------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 |缺省值
basename | 設置使用的資源文件束文件的路徑與名稱,不應當包含任保本地化后綴或文件擴展名 | 可以 | 是 |無
var | 設置了該屬性,那么將把basename屬性所標識的資源束賦給該屬性值所命名的變量 | 否 | 否 |無
scope | 指明缺省資源束設置所應用的JSP作用域 | 否 | 否 |page
---------------------------------------------------------------------------------------------------------------------------
束文件名resources_zh_CN.properties(basename屬性)
<fmt:setBundle basename="com.v512.examples.resources" />
<fmt:bundle>標記 設定某個頁面或某幾行國際化資源束的位置
使用語法
<fmt:bundle basename="basename" [prefix="prefix"]>
body content
<fmt:bundle>
屬性
---------------------------------------------------------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 |缺省值
basename | 設置使用的資源文件束文件的路徑與名稱,不應當包含任保本地化后綴或文件擴展名 | 可以 | 是 |無
prefix | 為所嵌套的<fmt:message>標記的key值指定缺省前綴 | 可以 | 否 |無
---------------------------------------------------------------------------------------------------------------------------
<fmt:message>標記 (核心)設置資料束文件中的KEY和對應的內(nèi)容
使用語法
1 <fmt:message key="messageKey" [bundle="resourceBundle"] [var="varName"] [scope="{page|request|session|application}"] />
2 <fmt:message [bundle="resourceBundle"] [var="varName"] [scope="{page|request|session|application}"]>
key
[<fmt:param>]
</fmt:message>
屬性
-----------------------------------------------------------------------------------------------------------------------------------------------
屬性名 | 描述 | EL | 必選 |缺省值
key | 用來確定在資源束中定義哪個文本消息進行輸出顯示 | 可以 | 是 |無
bundle | 用來指定一個顯式的資源束,用來查找由key屬性標識的消息.請注意,該屬性的值必須是實際的資源束. | 可以 | 否 |無
| 如當指定<fmt:setBundle>操作的var屬性時同該標記所賦予的資源束.<fmt:message>的bundle屬性不支持字符串值
var | 該標記所生成的文本消息賦給指定的變量,而不是輸出到JSP頁面中 | 否 | 否 |無
scope | 由來指定的var屬性指定的變量的作用域,有效值:page,request,session,application | 否 | 否 |page
-----------------------------------------------------------------------------------------------------------------------------------------------
<fmt:requestEncoding>標記 設置編碼方式
使用語法
<fmt:requestEncoding [value="charsetName"] />
作用等同于
request.setCharacterEncoding()
--------------------------------------------------------------------------------
<fmt:param>標記 設置編碼方式
使用語法
1 <fmt:param value="messageParameter" />
2 <fmt:param>
body content
</fmt:param>
-----------------------------------------------------------------
<fmt:formatDate> 標記
使用方法:
<fmt:formatDate value="${today}" type="date" />
<fmt:formatDate value="${today}" dateStyle="full" />
<fmt:formatDate value="${today}" pattern="yyyy/MM/dd HH:mm:ss" />
<fmt:formatDate value="${today}" pattern="yyyy/MM/dd HH:mm:ss" var="d"/>
----------------------------------------------------------------------------
屬性名 | 描述 | 值 |結果
value | 要格式化的日期值 | default |2008-8-1
type | 顯現(xiàn)的日期格式 | date |2008-8-1
| | time |14:47:59
| | both |2008-8-1 14:47:59
dateStyle | 顯現(xiàn)的日期格式 | short |08-8-1
| | medium |2008-8-1
| | long |2008年8月1日
| | full |2008年8月1日 星期一
pattern | 定義日期格式 |yyy/MM/dd HH:mm:ss |2008/08/01 14:47:59
var | 保存值變量名 | |
scope | 保存變量的scope | |
-----------------------------------------------------------------------------
<fmt:formatNumber> 標記
<fmt:formatNumber value="${n}" pattern="###,###.##"/>
<fmt:formatNumber value="${n}" pattern="###,###.0000"/>
----------------------------------------------------------------------------
屬性名 | 描述 | 值 |結果
value | 要格式化的日期值 | default |123,456.123
type | 顯現(xiàn)的數(shù)據(jù)格式 | number(數(shù)字) |123,456.123
| | currency(貨幣) |¥123,456.123
| | percent(百分比) |23.33%
groupingUsed| 是否分組顯示 | true/false |
pattern | 定義數(shù)據(jù)格式 |###,###.## |123,456.123
| |###,###.0000 |123,456.1230
var | 保存值變量名 | |
scope | 保存變量的scope | |
-----------------------------------------------------------------------------
<format>標記例子
1 建立resources.properties文件(英文)
內(nèi)容:guestbook.display.welcome=welcome to my website
2 建立resources.properties_zh_CN.properties文件(中文)
方法:
(1)在臨時目錄下建立一個臨時文件resources_t.properties
內(nèi)容:guestbook.display.welcome=歡迎大家訪問網(wǎng)站
(2)在DOS下進行該臨時目錄,執(zhí)行DOS命今
c:\temp>native2ascii -encoding uft-8 resources_t.properties resources_zh_CN.properties
(3)將轉換好的文件復制到項目目錄下
3 建立JSP頁面
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
fmt:bundle basename="com.tags.resources">
<fmt:message key="guestbook.display.welcome">
</fmt:message>
</fmt:bundle>
-----------------------------------------------------------------------------------------------------------
<sql>標簽
<setDatasource>
<update>
<query>
<param>
1 導入sql的jar包
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<sql:setDataSource driver="" url="" user="" password="" var="" scope=""/>
<sql:update var="oerder" dataSource="${conn}">
insert into BookOrder(username,zipcode,phone,creditcard,total)
values(?,?,'88888833333','123432432423',50.00)
<sql:param value="accp"/>
<sql:param value="1111"/>
</sql:update>
<sql:query var="rs" dataSource="${conn}">
select * from aa
</sql:query>
<C:forEach var="row" items="${rs.rows}">
${row.username} ${row.password}
</c:forEach>