1,JSTL是一個不斷完善的開放源代碼的jsp標簽庫,有Apache組織的jakarta小組維護。JSTL只能運行在支持jsp1.2和Servlet2.3規范及其以后的web容器上,Tomcat4.x版本以上均可使用。從jsp2.0開始作為javaee標準支持的。
2,jsp標簽庫:jsp標簽庫規范指出,開發這可以通過實現javax.servlet.jsp.tagext.JspTag接口,并提供一個標簽庫的描述文件(XML格式,以.tld結尾)來實現一個標簽庫。使用該標簽庫的jsp文件需要使用taglib指令元素進行導入。
jsp標簽庫最大的有點是把某種特定的功能進行封裝,需要使用這種功能的地方可以直接調用,而不必重復些類似的代碼,尤其對于web開發常見的功能非常有幫助。
例子如下
(1)完成標簽類:
package JSTL;
import java.io.IOException;
import java.util.Date;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class MyTag extends TagSupport {
@Override
public int doEndTag() throws JspException {
JspWriter out= pageContext.getOut();
try {
out.print(new Date().toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return EVAL_PAGE;
}
}
(2)完成標簽庫描述文件:
<?xml version="1.0" encoding="UTF-8"?>
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>2.0</jspversion>
<shortname>tagLib</shortname>
<uri>/WEB-INF/TagDescription.tld</uri>
<info>myTagLib</info>
<tag>
<name>currentName</name>
<tagclass>JSTL.MyTag</tagclass>
<bodycontent>empty</bodycontent>
</tag>
</taglib>
(3),在jsp頁面中使用:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/WEB-INF/TagDescription.tld" prefix="m" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
µ±Ç°Ê±¼ä£º<m:currentName/>
</body>
</html>
3,jstl的優點:(1)簡化了jsp的開發,減少了jsp中的scriptlet代碼數量。jsp主要用于顯示業務邏輯代碼處理以后的數據結果。不可避免的會使用循環,布爾邏輯,數據格式轉換等語句,如果使用jsp腳本的for、if或其他語句,不僅需要導入必要的包,而且每個類似的地方都要寫相同的代碼,非常不利于維護。使用jstl可以大大簡化這方面的開發。
(2),在應用程序服務器之間提供了一致的接口,最大程度提高了web應用在各應用服務器之間的移植。jstl屬于javaee規范以內,所有符合web規范的服務器都必須支持jstl,所以將web應用程序進行移植完全不存在問題。反過來,如果是其他第三方提供的標簽庫,就需要提供另外的資源才能進行移植。
(3),jstl的開源性決定了它具有很強的擴展性。jstl的給類標簽幾乎覆蓋了所有web應用程序的常見功能,如果這些功能還不能滿足開發者的需求的話,可以對他本身的實現類繼續進行擴展,及利用率jstl的良好設計,又可以滿足特定的需求。
4,JSTL標簽庫使用方法:
標簽庫 URI 前綴 使用模式
核心標簽庫 http://java.sun.com/jstl/core c <c:tagname…>
國際化標簽(I18N) http://java.sun.com/jstl/fmt fmt <fmt:tagname…>
SQL標簽庫 http://java.sun.com/jstl/sql sql <sql:tagname…>
XML標簽庫 http://java.sun.com/jstl/xml x <x:tagname…>
函數標簽庫 http://java.sun.com/jstl/functions fn <fn:tagname…>
(1)核心標簽庫:包含了常用的標簽、迭代標簽和其他一些一般用標簽。在jsp頁面中使用核心標簽庫的引用格式:
<%@ taglib uri=" 一般用途標簽:<c:out><c:set><c:remove>
<c:out>用于向jsp的輸出流打印一個表達式的結果。
<c:set>用于向特定的作用范圍設置一個屬性對象或設置一個javabean的屬性值。
迭代標簽<c:foreach>:在web應用程序中,迭代主要用于訪存和顯示數據集。通常以列表和表中的一系列行的形式顯示。實現迭代內容的主要的jstl標簽是<c:foreach>.該標記支持兩種不同樣式的迭代,整數范圍的迭代(類似java語言的for循環語句)和集合上的迭代(類似java語言的iterator和foreach);
使用<c:if>和<c:choose>實現布爾邏輯判斷。
jstl核心標簽庫的其余標簽主要是關于url的,這些標簽中首推<C:url>,用于生成url。它提供了三個功能元素,為javaweb應 用程序構造url時特別有用。
(1),在前面附加當前servlet上下文的名稱。
(2),為會話管理重寫url
(3),請求參數的名稱和值的url編碼。
(2),jstl數據庫標簽庫(sql):
jstl數據庫標簽庫是為了減少操作數據庫的jsp腳本代碼而設計的。讓開發者快捷的操作數據庫,他的本質上也是使用jdbc進行數據庫操作的。
使用數據庫標簽庫的:<%@ taglib uri="使用jstl數據庫標簽進行數據庫數據的添加,刪除,查詢,修改操縱大致分為三步,:準備數據源、執行sql語句,及根據執行結構進行相應的操作。
(1),使用<sql:setDataSource>標簽為所有的sql標簽準備數據源對象,。一般來說,一個web應用程序只需要一個數據源即可。
<sql:setDataSource
driver="驅動類名"
url="連接字符串"
user="用戶名"
password="密碼"
var="數據源保存的變量名"
scope="作用范圍"
/>
(2),<sql:query>標簽用于執行select的sql語句,得到 查詢的結果集。
<sql:query var="結果變量"sq="sql"
[scope="作用范圍"
datasource="數據源"
maxRows="最大行數"
startRow="其實行數"]>
[<sql:param>指定sql參數]
</sql:query>
使用<sql:update>標簽更新數據庫數據:<sql:update>標簽用于執行insert、update和delete的sql語句得到的結果為影響的記錄條數:
<sql:update var="結果變量" sql="sql語句"
[
scope="作用范圍"
datasource="數據源"]>
[<sql:param>指定sql參數]
<sql:update>
<sql:update var="結果變量"
[scope="作用范圍"
datasource="數據源"]>
sql語句
[<sql:param>指定sql參數]
</sql:update>
使用<sql:transaction>標簽來使用數據庫事務
事務處理用于保護作為一組必須成功或必須失敗的一系列數據庫操作。當使用jstl的數據表標簽庫來進行數據庫操作的時候同樣可以使用事物,將相應的<sql:query>和<sql:update>操作嵌套到<sql:transaction>標簽的主體內容中,把一系列的查詢和更新操縱打包到一個事物處理中即可。
<sql:transaction [dataSource="數據源" isolation="隔離級別"]>
<sql:query .../>
or
<sql:update.../>
...
</sql:transaction>
(3)JSTL函數標簽庫(Function)
函數標簽庫相對于其他的標簽庫來說比較特殊,它是jstl定義的標準的el函數集合。直接在el中使用,使用方式:fn:函數名(參數)。該標簽庫定義的函數基本上都是對字符串進行相關操作的函數。
布爾表達式函數:contains,containsIgnoreCase startWith endWith返回的true和false
fn:contains("源字符串","匹配字符串")
fn:contains("源字符串","匹配字符串");
fn:startWith("源字符串","匹配的開頭字符串");
fn:endWith("源字符串","匹配的結尾字符串");
整型表達式函數:indexOf和length分別是返回字符串的下表和整個字符串的長度
fn:indexOf("源字符串","匹配字符串")
fn:length("源字符串")
字符修改函數:fn:replace("源字符串","匹配字符串","替換后的字符串")用于替換字符串的某些內容
fn:subString ("源字符串",開始下標,"結束下標")用于截取字符串的一段
fn:toUppercase()轉換成大寫
fn:toLowerCase()轉換成小寫
fn:trim 去掉字符串兩頭的空格