JSP
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:HTTPsession(伺服器端對談)物件
指令元素
有三隻基本个指令元素,作用係使用 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 176一百五十二規定吔 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
- JavaServlet
- 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 一千擔二百空二 )