「JSP」:修訂間差異
從 JSON 檔案批量匯入 |
從 JSON 檔案批量匯入 標籤:手動回退 |
(未顯示同一使用者於中間所作的 1 次修訂) | |
(無差異)
|
於 2025年8月21日 (四) 15:44 的最新修訂
JSP(全稱JakartaServerPages,曾稱做JavaServerPages)是由 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 編譯器來編譯做快速執行的二進位機器碼,嘛會當直接編譯做二進位碼。
綜合
JSP 對二鋪零版本開始,增加了表達式語言(EL), 以提供閣較緊閣較簡單的建立新標籤的方法,並且允准開發者建立 Velocity 式板仔。如舊版本代碼「` Hello , < %=request . getParameter ( " visitor " ) % > `」會當簡省做「` Hello , $ { param . visitor }”`。
特點
- 會當一改我模仔的方式簡單、高效地添加動態網頁的內容。
- 通利用 JavaBean 佮標籤庫技術復用捷用的功能代碼(設計好的組件容易實現重複利用,減少愛重複勞動)。 標籤庫毋但有紮有通用的內建標籤(JSTL ),而且支援可延伸功能的自訂標籤。
- 有良好的工具支援。
- 繼承矣 Java 語言的相對用性。
- 繼承矣 Java 的迒平台的優勢,實現「一改編寫,四界執行」。 因為支援 Java 佮其相關技術的開發平台濟,網站開發人員會當選擇佇上適合家己的系統平台頂進行 JSP 開發;無仝環境下開發的 JSP 專案,佇咧所有客戶頭頂懸攏會當順利提。
- 頁面當中的動(控制變動內容的部份)/ 靜(內容無需要變動的部份)區域以分散但是閣有序的形式組合做伙,會當予人閣較直觀地看出頁面代碼的規个結構,嘛予設計頁面效果佮程式邏輯這二部份工課較好分離(外觀視圖佮邏輯分離)。 對而且方便分配人員並行揮各自長處,實現高效地分工合作。
- 會當佮其他的企業級 Java 技術相配合。JSP 會當干焦專門負責頁面中的資料呈現,實現分層開發。
有包含內容
JSP 指令
JSP 指令控制 JSP 編譯器按怎去生成 servlet,以下是會使用的指令:
- 包含講指令 include–包含講令通知 JSP 編譯器共另外一个檔案完全包含入去當前檔案中。效果就敢若予包含檔案的內容直接予人貼起去到當前檔案中仝款。這个功能佮 C 預處理器所提供的足類似的。予人包含檔案的副檔名一般攏是 " jspf "(即 JSPFragment,JSP 片段):
- 頁面指令 page–頁面指令有以下幾个選項:
注意:佇仝一个 JSP 檔案中干焦「import」匯入頁面指令會當予人加改使用。
- 標籤庫指令 taglib–標籤庫指令講欲使用的 JSP 標籤庫。該指令需要指定一个字首 prefix(和 C + + 的號名空間足類似的)佮標籤庫的描述 URI :
JSP 指令碼元素佮變數
標準指令碼變數
以下是永遠會當用的指令碼變數:
- out:JSPWriter,用來寫入回應流的資料
- page:servlet 自身
- pageContext:一个 PageContext 實例包括和規个頁面相聯絡的資料,一个予定的 HTML 頁面會當佇咧幾个 JSP 之間傳遞。
- request:HTTP request(請求)東西
- response:HTTP response(回應)東西
- session:HTTP session(侍服器捀對談)東西
指令碼元素
有三个基本的指令碼元素,作用是 JAVA 代碼會當直接插入去 servlet .
- 一種是聲明標籤,佇咧 JAVA SERVLET 的類體內底囥一个變數的定義。靜態的資料成員嘛會當按呢定義。
- 一種是指令碼標籤,佇咧 JAVA SERVLET 的類的 \ _ jspService ( ) 方法內底囥入所包含的語句。
- 一種是表達式標籤,佇咧 JAVA SERVLET 伊的類中囥入等等的表達式,表達式注意袂當分號結尾。
JSP 動作
JSP 動作是系列會當呼叫內建佇咧網路侍服器的功能的 XML 標籤。JSP 提供了後動作:
標籤樣例
jsp : include
jsp : forward
佇本例中,請求傳達到 " subpage . jsp ",而且請求的處理權袂閣倒轉去進前者。
jsp : useBean
scope 屬性會當是 request , page , session or application,伊有以下用意:
- request—該屬性咧請求的性命周期內有效,一旦會當請求被所有的 JSP 頁處理了後,按呢遮爾該屬性就袂當參照。
- page—屬性只是做前頁內底的效果。
- session—該屬性佇咧使用者對談的性命周期內有效。
- application—該屬性佇各種狀況之下攏有效,並且永遠袂予人變做袂當參照,佮全域變數 global variable 相仝。
欲寫例將會用一个建立一个類別的實例,並且共該實例儲存佇咧屬性中,該屬性將佇該請求的性命周期內有效。伊會當佇所有的被包含抑是對頭頁面(上代先接收請求的頁面)斡向來的 JSP 頁之間共享。
JSP 標籤庫
除了 JSP 預定義動作以外,開發者閣會使使用 JSP 標籤擴充 API 添加𪜶自訂的 _ 動作 _。開發者寫一種實現一个標籤的介面佮一个標籤庫的 XML 描述檔案的 JAVA 類,這就有法度指定標籤佮實現標籤的 JAVA 類請看如下 JSP:
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 會有一个類似下跤例的用佇實現的類似:
在地化
JSP 的在地化是通過佮 JAVA 應用程式相仝的方式完成的,就算是用資源包。
模型-視圖-控制器模式
為著欲共表現層(presentation)對請求處理(request processing)佮資料儲存(data storage)中分離開來(按呢加真利開發、查錯佮功能擴充), 昇陽公司推薦佇 JSP 檔案中使用一種叫做模型-視圖-控制器(MVC)的架構模式。按呢設計,做使用者存取網站頂的特定網址的時陣,使用者的處理請求會先對網站侍服器取得著,然後先交由網站的控制器程式來做初步處理。使用者的存取請求可能愛加種多樣,譬如講查詢資訊抑是進行資料計算攏是捷看著的網站的業務。控制器程式會初步判斷使用者呼請求的種類,然後共使用者請求轉發予佮特定業務對應的 Servlet 程式抑是另外一个獨立的 JSP 檔案進行業務處理。做請求處理了後,閣通過一个專門負責輸出資訊的 JSP 頁以清楚、美觀的方式向使用者的瀏覽器輸出結果。我簡來講,先由控制器攔截使用者請求並做初步判斷,才由業務處理程式存取資料(對資料庫內底存取)佮處理業務,最後由視圖組件生成結果頁面並行送結果予使用者。其中 JSP 一般用做展示輸出結果,會當用展示經過 Servlet 查詢抑是處理了後的結果;嘛會當用一个 JSP 檔案處理業務邏輯,閣用另外一个 JSP 檔案展示結果。揤功能做這款的檔案拆分(所以講足由一个泛浡的 JSP 頁面包攬所有功能)是為著便於團隊分工。MVC 本身是一種由來已經久的設計思想,是因為 JSP 的技術只是實現 MVC 架構的流行方案之一。Struts 和 Spring 框架等幾若種流行的網站建設框架攏是因為 MVC 模式設計的。
JSP 和 Servlets
對架構頂懸講,JSP 會當予人看做是對 Servlets 進階提煉而成做 JAVA Servlet 二嬸一 API 的擴充來應用。Servlets 和 JSP 上早嘛是攏由 Sun Microsystems(日頭公司)開發的。對 JSP 一鋪二版本以來,JSP 因為 Java Community Process(有人咧譯做:Java 社群組織)開發模式下。JSR 抹五十三規定矣 JSP 一孵二和 Servlet 二鋪四的規範,JSR 抹一百五十二規定矣 JSP 二鋪零的規範。二空空六年五月,JSP 二嬸一的規範作為 Java EE 無五的一部份,佇咧 JSR 鋪排兩百四十五中發布。
靜態資料佇輸入檔案內底的內容佮輸出予 HTTP 回應的內容完全一致。現此時,該 JSP 輸入檔案會是一个無內嵌 JAVA 抑是動作的 HTML 頁面。而且,客戶捀每改請求攏會得著仝款的回應內容。
看仿
不管 JSP 編譯器是生成 SERVLET 的 JAVA 原始碼,抑是直接發布二進位碼,了解一下 JSP 編譯器是按怎共檔案轉做一个 JAVA SERVLET,攏是足有幫助的。比如講,輸入看覓一下 JSP 佮伊最後生成的 JAVA SERVLET:
Input JSP
Resulting servlet
參見
- JSTL
- Java 企業版
- JavaServer Faces
- Java Servlet
- SSJS
- WAR ( file format )
- EAR ( file format )
- JAR ( file format )
- Tomcat 侍服器
參考資料
文內參照
冊目
- Kin-man Chung . JavaServer Pages Specification ( pdf ) 二嬸三 . 甲骨文公司 . 二千空一十三 [二空一八年三月十六] .
- Hans Bergsten . JavaServer Pages 三 . Sebastopol , California : O'Reilly . 兩千空三 [二千空六孵七孵二十] . ISBN 空白五百九十六鋪五百六十三鋪六 .(原始內容存檔佇兩千空一十九九分十七).
外部連結
- Sun's JSP product description
- JSR 兩百四十五 ( JSP 二嬸一 )
- JSR 一仔五 ( JSP 二孵空 )
- JSR 五十三 ( JSP 一孵二 )