複製鏈接
請複製以下鏈接發送給好友

JSP

(java服務器頁面)

鎖定
JSP(全稱Java Server Pages)是由Sun Microsystems公司主導創建的一種動態網頁技術標準。JSP部署於網絡服務器上,可以響應客户端發送的請求,並根據請求內容動態地生成HTML、XML或其他格式文檔的Web網頁,然後返回給請求者。JSP技術以Java語言作為腳本語言,為用户的HTTP請求提供服務,並能與服務器上的其它Java程序共同處理複雜的業務需求。
JSP將Java代碼和特定變動內容嵌入到靜態的頁面中,實現以靜態頁面為模板,動態生成其中的部分內容。JSP引入了被稱為“JSP動作”的XML標籤,用來調用內建功能。另外,可以創建JSP標籤庫,然後像使用標準HTML或XML標籤一樣使用它們。標籤庫能增強功能和服務器性能,而且不受跨平台問題的限制。JSP文件在運行時會被其編譯器轉換成更原始的Servlet代碼。JSP編譯器可以把JSP文件編譯成用Java代碼寫的Servlet,然後再由Java編譯器來編譯成能快速執行的二進制機器碼,也可以直接編譯成二進制碼
中文名
JAVA服務器頁面
外文名
Java Server Pages
外語縮寫
JSP
本    質
動態網頁技術標準

JSP特點

  • 能以模板化的方式簡單、高效地添加動態網頁內容。
  • 可利用JavaBean和標籤庫技術複用常用的功能代碼(設計好的組件容易實現重複利用,減少重複勞動)。標籤庫不僅帶有通用的內置標籤JSTL),而且支持可擴展功能的自定義標籤。
  • 有良好的工具支持。
  • 繼承了Java語言的相對易用性。
  • 繼承了Java的跨平台優勢,實現“一次編寫,處處運行”。因為支持Java及其相關技術的開發平台多,網站開發人員可以選擇在最適合自己的系統平台上進行JSP開發;不同環境下開發的JSP項目,在所有客户端上都能順利訪問。
  • 頁面中的動(控制變動內容的部分)/靜(內容不需變動的部分)區域以分散但又有序的形式組合在一起,能使人更直觀地看出頁面代碼的整體結構,也使得設計頁面效果和程序邏輯這2部分工作容易分離(外觀視圖與邏輯分離)。從而方便分配人員併發揮各自長處,實現高效地分工合作。
  • 可與其它企業級Java技術相互配合。JSP可以只專門負責頁面中的數據呈現,實現分層開發。

JSP包含內容

JSPJSP指令

JSP指令控制JSP編譯器如何去生成servlet,以下是可用的指令:
  • 包含指令include –包含指令通知JSP編譯器把另外一個文件完全包含入當前文件中。效果就好像被包含文件的內容直接被粘貼到當前文件中一樣。這個功能和C預處理器所提供的很類似。被包含文件的擴展名一般都是"jspf"(即JSPFragment,JSP片段):
<%@ include file="somefile.jsp" %>
  • 頁面指令page –頁面指令有以下幾個選項:
import
使一個JAVA導入聲明被插入到最終頁面文件。
contentType
規定了生成內容的類型。當生成非HTML內容或者當前字符集並非默認字符集時使用。
errorPage
處理HTTP請求時,如果出現異常則顯示該錯誤提示信息頁面。
isErrorPage
如果設置為TRUE,則表示當前文件是一個錯誤提示頁面。
isThreadSafe
表示最終生成的servlet是否具有線程安全性。
<%@ page import="java.util.*" %> //example import導入樣例<%@ page contentType="text/html" %> //example contentType頁面類型樣例<%@ page isErrorPage=false %> //example for non error page無錯頁面樣例<%@ page isThreadSafe=true %> //example for a thread safe JSP執行緒安全JSP樣例
注意:在同一個JSP文件中只有“import”導入頁面指令可以被多次使用。
  • 標籤庫指令taglib –標籤庫指令描述了要使用的JSP標籤庫。該指令需要指定一個前綴prefix(和C++的名字空間很類似)和標籤庫的描述URI:
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>

JSPJSP腳本元素和變量

標準腳本變量
以下是永遠可用的腳本變量:
  • out:JSPWriter,用來寫入響應流的數據
  • page:servlet自身
  • pageContext:一個PageContext實例包括和整個頁面相聯繫的數據,一個給定的HTML頁面可以在多個JSP之間傳遞。
  • request:HTTP request(請求)對象
  • response:HTTP response(響應)對象
  • session:HTTP session(服務端會話)對象
腳本元素
有三個基本的腳本元素,作用是使JAVA代碼可以直接插入servlet.
  • 一種是聲明標籤,在JAVA SERVLET的類體中放入一個變量的定義。靜態的數據成員也可以如此定義。
    • <%! int serverInstanceVariable = 1; %>
  • 一種是腳本標籤,在JAVA SERVLET的類的_jspService()方法中放入所包含的語句。
    • 1 <% int localStackBasedVariable = 1; out.println(localStackBasedVariable); %>
  • 一種是表達式標籤,在JAVA SERVLET的類中放入待賦值的表達式,表達式注意不能以分號結尾。
    • <%= "expanded inline data " + 1 %>

JSPJSP動作

JSP動作是一系列可以調用內建於網絡服務器中的功能的XML標籤。JSP提供了以下動作:
jsp:include
和子過程類似,JAVA SERVLET暫時接管對其它指定的JSP頁的請求和響應。當處理完該JSP頁後就馬上把控制權交還當前JSP頁。這樣JSP代碼就可以在多個JSP頁中共享而不用複製。
jsp:param
可以在jsp:include, jsp:forward或jsp:params塊之間使用。指定一個將加入請求的當前參數組中的參數。
jsp:forward
用於處理對另一個JSP或SERVLET的請求和響應。控制權永遠不會交還給當前JSP頁。
jsp:plugin
Netscape Navigator的老版本和Internet Explorer使用不同的標籤以嵌入一個applet。這個動作產生為嵌入一個APPLET所需要的指定瀏覽器標籤。
jsp:fallback
如果瀏覽器不支持APPLETS則會顯示的內容。
jsp:getProperty
從指定的JavaBean中獲取一個屬性值。
jsp:setProperty
在指定的JavaBean中設置一個屬性值。
jsp:useBean
創建或者複用一個JavaBean變量到JSP頁。

JSPJSP標籤庫

除了JSP預定義動作之外,開發者還可以使用JSP標籤擴展API添加他們自定義的動作。開發者寫一種實現一個標籤的界面和一個標籤庫的XML描述文件的JAVA類,這就能指定標籤和實現標籤的JAVA類 請看如下JSP:
<%@ taglib uri="mytaglib.tld" prefix="myprefix" %>
...
<myprefix:myaction> <%-- the start tag %>
...
/myprefix:myaction> <%-- the end tag %>
...
JSP編譯器將會加載mytaglib.tld這個XML文件,然後可以看到標籤myaction由JAVA類MyActionTag實現。當該標籤首次在文件中使用時,將會創建一個MyActionTag的實例。然後(而且當每次該標籤被使用時),當出現開始標籤時,將會調用doStartTag()方法,根據開始標籤的結果,來決定如何處理標籤的主體。主體是指開始標籤和結束標籤之間的文本。這個doStartTag()方法將會返回如下之一:
  • SKIP_BODY - 標籤之間不做處理。
  • EVAL_BODY_INCLUDE - 對標籤之內主體進行賦值。
  • EVAL_BODY_TAG - 對標籤之內主體進行賦值並把結果輸出到流(保存在標籤的主體內容屬性中)。
  • 注意:如果標籤擴展了BodyTagSupport類,當主體被執行時會在調用doEndTag()之前調用doAfterBody()方法。該方法用於實現循環結構。
當結束標籤出現時,它會調用doEndTag()方法,該方法會返回如下兩做之一:
  • EVAL_PAGE - 表示JSP文件的剩餘部分將會被執行。this indicates that the rest of the JSP file should be processed.
  • SKIP_PAGE - 表示將不會再有更多執行操作。當前JSP頁交出控制權。就象在轉發動作中的作用一樣。
上述myaction標籤tag會有一個類似下面例子的用於實現的類:
public class MyActionTag extends  TagSupport {    //Releases all instance variables.    public void release() {...}    public MyActionTag() { ... }    //called for the start tag    public int doStartTag() { ... }    //called at the end tag}

JSP發展歷程

1.2版本
JSP1.2不支持EL,但可以使用外部的JSTL標籤以便使用EL。 [1] 
2.0版本
JSP 2.0的一個主要特點是它支持表達語言(expression language)。JSTL表達式語言可以使用標記格式方便地訪問JSP的隱含對象和JavaBeans組件,JSTL的核心標記提供了流程和循環控制功能。自制標記也有自定義函數的功能,因此基本上所有scriptlet能實現的功能都可以由JSTL替代。在JSP 2.0中,建議儘量使用EL而使JSP的格式更一致。
SimpleTag
JSP 2.0中加入了新的創建自制標記的API,javax.servlet.jsp.tagext.SimpleTag定義了用來實現簡單標記的接口。和 JSP 1.2中的已有接口不同的是,SimpleTag接口不使用doStartTag和doEndTag方法,而提供了一個簡單的doTag方法。這個方法在調用該標記時只被使用一次。而需要在一個自制標記中實現的所有邏輯過程、循環和對標記體的評估等都在這個方法中實現。從這個方面來講, SimpleTag和IterationTag可以達到同等的作用。但SimpleTag的方法和處理週期要簡單得多。在SimpleTag中還有用來設置JSP內容的setJspBody和getJspBody方法。Web容器會使用setJspBody方法定義一個代表JSP內容的 JspFragment對象。實現SimpleTag標記的程序可以在doTag方法中根據需要多次調用getJspBody.invoke方法以處理JSP內容。
重要功能
JSP2.0中的一個主要功能是JSP fragment,它的基本特點是可以使處理JSP的容器推遲評估JSP標記屬性。我們知道一般JSP是首先評估JSP標記的屬性,然後在處理JSP標記時使用這些屬性,而JSP fragment提供了動態的屬性。也就是説,這些屬性在JSP處理其標記體時是可以被改變的。JSP需要將這樣的屬性定義為 javax.servlet.jsp.tagext.JspFragment類型。當JSP標記設置成這種形式時,這種標記屬性實際上的處理方法類似於標記體。在實現標記的程序中,標記屬性可以被反覆評估多次。這種用法稱為JSP fragment。JSP fragment還可以定義在一個SimpleTag處理程序中使用的自制標記動作。像前面例子説明的,getJspBody返回一個 JspFragment對象並可以在doTag方法中多次使用。需要注意的是,使用JSP fragment的JSP只能有一般的文本和JSP action,不能有scriptlet和scriptlet表達式。 [2] 

JSP語言標準

JSP句法

一個JSP頁面可以被分為以下幾部份:
  • 靜態數據,如HTML
  • JSP指令,如include指令
  • JSP腳本元素和變量
  • JSP動作
  • 用户自定義標籤

JSP靜態數據

靜態數據輸入文件中的內容和輸出給HTTP響應的內容完全一致。此時,該JSP輸入文件會是一個沒有內嵌JAVA或動作的HTML頁面。而且,客户端每次請求都會得到相同的響應內容。

JSPJSP指令

JSP指令控制JSP編譯器如何去生成servlet,以下是可用的指令:
  • 包含指令include –包含指令通知JSP編譯器把另外一個文件完全包含入當前文件中。效果就好像被包含文件的內容直接被粘貼到當前文件中一樣。這個功能和C預處理器所提供的很類似。被包含文件的擴展名一般都是"jspf"(即JSPFragment,JSP碎片):
<%@ include file="somefile.jsp" %>
  • 頁面指令page –頁面指令有以下幾個選項:
import
使一個JAVA導入聲明被插入到最終頁面文件。
contentType
規定了生成內容的類型。當生成非HTML內容或者當前字符集character set並非默認字符集時使用。
errorPage
處理HTTP請求時,如果出現異常則顯示該錯誤提示信息頁面。
isErrorPage
如果設置為TRUE,則表示當前文件是一個錯誤提示頁面。
isThreadSafe
表示最終生成的servlet是否安全線程(threadsafe)。
<%@ page import="java.util.*" %> //example import導入樣例<%@ page contentType="text/html" %> //example contentType頁面類型樣例<%@ page isErrorPage=false %> //example for non error page無錯頁面樣例<%@ page isThreadSafe=true %> //example for a thread safe JSP安全線程JSP樣例
注意:在同一個JSP文件中只有"import"導入頁面指令可以被多次使用。
  • 標籤庫指令taglib –標籤庫指令描述了要使用的JSP標籤庫。該指令需要指定一個前綴prefix(和C++的命名空間很類似)和標籤庫的描述URI:
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>

JSPJSP腳本

標準腳本變量
以下是永遠可用的腳本變量:
  • out – JSPWriter用來寫入響應流的數據
  • page – servlet自身
  • pageContext –一個PageContext實例包括和整個頁面相聯繫的數據,一個給定的HTML頁面可以在多個JSP之間傳遞。
  • request –HTTP request對象
  • response –HTTP response對象
  • session –用於保持客户端與服務器連接的對象

JSP腳本元素

有三個基本的腳本元素,作用是使JAVA代碼可以直接插入servlet.
  • 一種是聲明標籤,在JAVA SERVLET的類體中放入一個變量的定義。靜態的數據成員也可以如此定義。
    • <%! int serverInstanceVariable = 1; %>
  • 一種是腳本標籤,在JAVA SERVLET的類的_jspService()方法中放入所包含的語句。
    • <% int localStackBasedVariable = 1; out.println(localStackBasedVariable); %>
  • 一種是表達式標籤,在JAVA SERVLET的類中放入待賦值的表達式,表達式注意不能以分號結尾。
    • <%= "expanded inline data " + 1 %>

JSPJSP動作

JSP動作是一系列可以調用內建於網絡服務器中的功能的XML標籤。JSP提供了以下動作:
jsp:include
和子過程類似,JAVA SERVLET暫時接管對其它指定的JSP頁的請求和響應。當處理完該JSP頁後就馬上把控制權交還當前JSP頁。這樣JSP代碼就可以在多個JSP頁中共享而不用複製。
jsp:param
可以在jsp:include, jsp:forward或jsp:params塊之間使用。指定一個將加入請求的當前參數組中的參數。
jsp:forward
用於處理對另一個JSP或SERVLET的請求和響應。控制權永遠不會交還給當前JSP頁。
jsp:plugin
Netscape Navigator的老版本和Internet Explorer使用不同的標籤以嵌入一個applet。這個動作產生為嵌入一個APPLET所需要的指定瀏覽器標籤。
jsp:fallback
如果瀏覽器不支持APPLETS則會顯示的內容。
jsp:getProperty
從指定的JavaBean中獲取一個屬性值。
jsp:setProperty
在指定的JavaBean中設置一個屬性值。
jsp:useBean
創建或者複用一個JavaBean變量到JSP頁。

JSP技術方法

為了快速方便地進行動態網站的開發,JSP在以下幾個方面做了改進,使其成為快速建立跨平台的動態網站的首選方案。
1.將內容的生成和顯示進行分離
用JSP技術,Web頁面開發人員可以使用HTML或者XML標識來設計和格式化最終頁面,並使用JSP標識或者小腳本來生成頁面上的動態內容(內容是根據請求變化的,例如請求賬户信息或者特定的一瓶酒的價格等)。生成內容的邏輯被封裝在標識和JavaBeans組件中,並且捆綁在腳本中,所有的腳本在服務器端運行。由於核心邏輯被封裝在標識和JavaBeans中,所以Web管理人員和頁面設計者,能夠編輯和使用JSP頁面,而不影響內容的生成。
在服務器端,JSP引擎解釋JSP標識和腳本,生成所請求的內容(例如,通過訪問JavaBeans組件,使用JDBC技術訪問數據庫或者包含文件),並且將結果以HTML(或者XML)頁面的形式發送回瀏覽器。這既有助於作者保護自己的代碼,又能保證任何基於HTML的Web瀏覽器的完全可用性
絕大多數JSP頁面依賴於可重用的、跨平台的組件(JavaBeans或者Enterprise JavaBeans組件)來執行應用程序所要求的複雜的處理。開發人員能夠共享和交換執行普通操作的組件,或者使得這些組件為更多的使用者和客户團體所使用。基於組件的方法加速了總體開發過程,並且使得各種組織在他們現有的技能和優化結果的開發努力中得到平衡。
採用標識
Web頁面開發人員不會都是熟悉腳本語言編程人員。JSP技術封裝了許多功能,這些功能是在易用的、與JSP相關的XML標識中進行動態內容生成所需要的。標準的JSP標識能夠訪問和實例化JavaBeans組件,設置或者檢索組件屬性,下載Applet,以及執行用其他方法更難於編碼和耗時的功能。
適應平台
幾乎所有平台都支持Java,JSP+JavaBeans幾乎可以在所有平台下通行無阻。從一個平台移植到另外一個平台,JSP和JavaBeans甚至不用重新編譯,因為Java字節碼都是標準的與平台無關的。
數據庫連接
Java中連接數據庫的技術是JDBC,Java程序通過JDBC驅動程序與數據庫相連,執行查詢、提取數據等操作。Sun公司還開發了JDBC-ODBC bridge,利用此技術Java程序可以訪問帶有ODBC驅動程序的數據庫,大多數數據庫系統都帶有ODBC驅動程序,所以Java程序能訪問諸如Oracle、Sybase、MS SQL Server和MS Access等數據庫。
此外,通過開發標識庫,JSP技術可以進一步擴展。第三方開發人員和其他人員可以為常用功能創建自己的標識庫。這使得Web頁面開發人員能夠使用熟悉的工具和如同標識一樣的執行特定功能的構件來進行工作。
JSP技術很容易整合到多種應用體系結構中,以利用現存的工具和技巧,並且能擴展到支持企業級的分佈式應用中。作為採用Java技術家族的一部分,以及Java 2(企業版體系結構)的一個組成部分,JSP技術能夠支持高度複雜的基於Web的應用。 由於JSP頁面的內置腳本語言是基於Java的,而且所有的JSP頁面都被編譯成為Java Servlets,所以JSP頁面具有Java技術的所有好處,包括健壯的存儲管理和安全性。作為Java平台的一部分,JSP擁有Java編程語言“一次編寫,各處運行”的特點。

JSP語言特點

JSP優點

(1)一次編寫,到處運行。除了系統之外,代碼不用做任何更改。
(2)系統的多平台支持。基本上可以在所有平台上的任意環境中開發,在任意環境中進行系統部署,在任意環境中擴展。相比ASP的侷限性JSP的優勢是顯而易見的。
(3)強大的可伸縮性。從只有一個小的Jar文件就可以運行Servlet/JSP,到由多台服務器進行集羣和負載均衡,到多台Application進行事務處理,消息處理,一台服務器到無數台服務器,Java顯示了一個巨大的生命力。
JSP JSP
(4)多樣化和功能強大的開發工具支持。這一點與ASP很像,Java已經有了許多非常優秀的開發工具,而且許多可以免費得到,並且其中許多已經可以順利的運行於多種平台之下。
(5)支持服務器端組件。web應用需要強大的服務器端組件來支持,開發人員需要利用其他工具設計實現複雜功能的組件供web頁面調用,以增強系統性能。JSP可以使用成熟的JAVA BEANS 組件來實現複雜商務功能。

JSP缺點

(1) 與ASP也一樣,Java的一些優勢正是它致命的問題所在。正是由於為了跨平台的功能,為了極度的伸縮能力,所以極大的增加了產品的複雜性。
(2) Java的運行速度是用class常駐內存來完成的,所以它在一些情況下所使用的內存比起用户數量來説確實是“最低性能價格比”了。

JSP語言組成

內置對象
request
request 對象是 javax.servlet.httpServletRequest類型的對象。 該對象代表了客户端的請求信息,主要用於接受通過HTTP協議傳送到服務器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對象的作用域為一次請求。
response
response 代表的是對客户端的響應,主要是將JSP容器處理過的對象傳回到客户端。response對象也具有作用域,它只在JSP頁面內有效。
session
1.什麼是session:從一個客户打開瀏覽器並連接到服務器開始,到客户關閉瀏覽器離開這個服務器結束,被稱為一個會話。當一個客户訪問一個服務器時,可能會在這個服務器的幾個頁面之間反覆連接,反覆刷新一個頁面,服務器應當通過某種辦法知道這是同一個客户,這就需要session對象。
2.session對象的ID:當一個客户首次訪問服務器上的一個JSP頁面時,JSP引擎產生一個session對象,同時分配一個String類型的ID號,JSP引擎同時將這個ID號發送到客户端,存放在Cookie中,這樣session對象和客户之間就建立了一一對應的關係。當客户再訪問連接該服務器的其他頁面時,不再分配給客户新的session對象,直到客户關閉瀏覽器後,服務器端該客户的session對象才取消,並且和客户的會話對應關係消失。當客户重新打開瀏覽器再連接到該服務器時,服務器為該客户再創建一個新的session對象。
3.session對象存在一定時間過期問題,所以存在session中的名值對會在一定時間後失去,可以通過更改session有效時間來避免這種情況。同時編程時儘量避免將大量有效信息存儲在session中,request是一個不錯的替代對象。
application
1.什麼是application:
服務器啓動後就產生了這個application對象,當客户在所訪問的網站的各個頁面之間瀏覽時,這個application對象都是同一個,直到服務器關閉。但是與session不同的是,所有客户的application對象都是同一個,即所有客户共享這個內置的application對象。
2.application對象常用方法:
(1)public void setAttribute(String key,Object obj): 將參數Object指定的對象obj添加到application對象中,併為添加的對象指定一個索引關鍵字。
(2)public Object getAttribute(String key): 獲取application對象中含有關鍵字的對象。
out
out 對象用於在Web瀏覽器內輸出信息,並且管理應用服務器上的輸出緩衝區。在使用 out 對象輸出數據時,可以對數據緩衝區進行操作,及時清除緩衝區中的殘餘數據,為其他的輸出讓出緩衝空間。待數據輸出完畢後,要及時關閉輸出流
page
page 對象代表JSP本身,只有在JSP頁面內才是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,類似於Java編程中的 this 指針。
config
config 對象的主要作用是取得服務器的配置信息。通過 pageContext對象的 getServletConfig() 方法可以獲取一個config對象。當一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。 開發者可以在web.xml 文件中為應用程序環境中的Servlet程序和JSP頁面提供初始化參數。
exception
java.lang.Throwable 的實例,該實例代表其他頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性為true 時,該對象才可以使用。常用的方法有getMessage()和printStackTrace()等。
pageContext
pageContext 對象的作用是取得任何範圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的創建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。

JSP語言對比

與servlets的區別
從架構上説,JSP可以被看作是從Servlets高級提煉而作為JAVA Servlet2.1 API的擴展而應用。Servlets和JSP最早都是由Sun Microsystems(昇陽公司)開發的。從JSP1.2版本以來,JSP處於Java Community Process(有人譯為:JAVA社區組織)開發模式下。JSR-53規定了JSP 1.2和Servlet 2.4的規範,JSR-152規定了JSP 2.0的規範。2006年5月,JSP 2.1的規範作為Java EE5的一部份,在JSR-245中發佈。
與ASP的比較
JSP(Java Server Page)與ASP(Active Server Page)兩者都是常用的動態網頁技術,也都是可以嵌入HTML中的程序,但兩者是有着本質的不同,主要從以下幾個方面對其進行比較:
1.Web服務器的支持:大多數通用的 Web服務器如:Apache、Netscape和Microsoft IIS都支持JSP頁面,只有微軟本身的Microsoft IIS和Personal Web Server可以支持ASP。
2.平台的支持:JSP具有平台獨立性,只要是一般的Java程序可以運行的平台,都支持JSP程序。Windows平台可以很好的支持ASP,但ASP對於基於Win32逐漸模型的依賴,使得它難於移植到其它平台上。
3.組件模型:JSP是建立在可重用的、跨平台的組件(如:JavaBeans、Enterprises JavaBeans和用户定製的標籤庫等組件)之上的,而ASP使用的是基於Win32的COM組件模型。
4.腳本語言:JSP可以使用Java編程語言或JavaScript作為腳本語言,而ASP使用VBScript或Jscript作為腳本語言。
5.安全性:JSP使用Java安全模型,而ASP使用Windows NT的安全結構。
6.與Access數據庫的連接:JSP使用JDBC建立與Access數據庫的連接,而ASP對Access數據庫使用Data Active Objects。
7.用户定製的標籤:JSP可以使用用户定製標籤庫進行擴充,而ASP中沒有用户定製標籤庫,ASP是不能擴充的。

JSPJSP標準標籤庫

根據JSTL標籤所提供的功能,可以將其分為5個類別。

JSPJSTL 庫安裝

Apache Tomcat安裝JSTL 庫步驟如下:
  • 從Apache的標準標籤庫中下載的二進包(jakarta-taglibs-standard-current.zip)。下載地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
  • 下載jakarta-taglibs-standard-1.1.1.zip 包並解壓,將jakarta-taglibs-standard-1.1.1/lib/下的兩個jar文件:standard.jar和jstl.jar文件拷貝到/WEB-INF/lib/下。
使用任何庫,你必須在每個JSP文件中的頭部包含<taglib>標籤。

JSP核心標籤

核心標籤是最常用的JSTL標籤。引用核心標籤庫的語法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
標籤
描述
用於在JSP中顯示數據,就像<%= ... >
用於保存數據
用於刪除數據
用來處理產生錯誤的異常狀況,並且將錯誤信息儲存起來
與我們在一般程序中用的if一樣
本身只當做<c:when>和<c:otherwise>的父標籤
<c:choose>的子標籤,用來判斷條件是否成立
<c:choose>的子標籤,接在<c:when>標籤後,當<c:when>標籤判斷為false時被執行
檢索一個絕對或相對 URL,然後將其內容暴露給頁面
基礎迭代標籤,接受多種集合類型
根據指定的分隔符來分隔內容並迭代輸出
用來給包含或重定向的頁面傳遞參數
重定向至一個新的URL.
使用可選的查詢參數來創造一個URL

JSP格式化標籤

JSTL格式化標籤用來格式化並輸出文本、日期、時間、數字。引用格式化標籤庫的語法如下:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
標籤
描述
使用指定的格式或精度格式化數字
解析一個代表着數字,貨幣或百分比的字符串
使用指定的風格或模式格式化日期和時間
解析一個代表着日期或時間的字符串
綁定資源
指定地區
綁定資源
指定時區
指定時區
顯示資源配置文件信息
設置request的字符編碼

JSPSQL標籤

JSTL SQL標籤庫提供了與關係型數據庫OracleMySQL,SQL Server等等)進行交互的標籤。引用SQL標籤庫的語法如下:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
標籤
描述
指定數據源
運行SQL查詢語句
運行SQL更新語句
將SQL語句中的參數設為指定值
將SQL語句中的日期參數設為指定的java.util.Date 對象值
在共享數據庫連接中提供嵌套的數據庫行為元素,將所有語句以一個事務的形式來運行

JSPXML 標籤

JSTL XML標籤庫提供了創建和操作XML文檔的標籤。引用XML標籤庫的語法如下:
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
在使用xml標籤前,你必須將XML 和 XPath 的相關包拷貝至你的<Tomcat 安裝目錄>\lib下:
  • XercesImpl.jar:
  • xalan.jar:
標籤
描述
與<%= ... >,類似,不過只用於XPath表達式
解析 XML 數據
設置XPath表達式
判斷XPath表達式,若為真,則執行本體中的內容,否則跳過本體
迭代XML文檔中的節點
<x:when>和<x:otherwise>的父標籤
<x:choose>的子標籤,用來進行條件判斷
<x:choose>的子標籤,當<x:when>判斷為false時被執行
將XSL轉換應用在XML文檔中
與<x:transform>共同使用,用於設置XSL樣式表

JSPJSTL函數

JSTL包含一系列標準函數,大部分是通用的字符串處理函數。引用JSTL函數庫的語法如下:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
函數
描述
fn:contains()
測試輸入的字符串是否包含指定的子串
fn:containsIgnoreCase()
測試輸入的字符串是否包含指定的子串,大小寫不敏感
fn:endsWith()
測試輸入的字符串是否以指定的後綴結尾
fn:escapeXml()
跳過可以作為XML標記的字符
fn:indexOf()
返回指定字符串在輸入字符串中出現的位置
fn:join()
將數組中的元素合成一個字符串然後輸出
fn:length()
返回字符串長度
fn:replace()
將輸入字符串中指定的位置替換為指定的字符串然後返回
fn:split()
將字符串用指定的分隔符分隔然後組成一個子字符串數組並返回
fn:startsWith()
測試輸入字符串是否以指定的前綴開始
fn:substring()
返回字符串的子集
fn:substringAfter()
返回字符串在指定子串之後的子集
fn:substringBefore()
返回字符串在指定子串之前的子集
fn:toLowerCase()
將字符串中的字符轉為小寫
fn:toUpperCase()
將字符串中的字符轉為大寫
fn:trim()
移除首位的空白符
參考資料