什麼是JSP虛擬主機,技術,背景,組件,JSP,詳細描述,JSP標識,腳本元件,一個簡單套用,使用Java Servlet的一個靈活的套用,JSP頁面與XML技術的集成,增加一個JSP根元件,JSP技術的未來,JSP與ASP 的簡單比較,JSP和Active Server Pages(ASP)相比,JSP和純Servlet相比,JSP和JavaScript相比,選購虛擬主機注意事項,
什麼是JSP虛擬主機 在Sun正式發布 JSP(JavaServer Pages) 之後,這種新的Web套用開發技術很快引起了人們的關注。JSP為創建高度動態的Web套用提供了一個獨特的開發環境。按照Sun的說法,JSP能夠適應市場上包括 Apache WebServer 、 IIS4.0 在內的 85% 的
伺服器 產品。即使您對ASP“一往情深”,我們認為,關注JSP的發展仍舊很有必要。
技術 JSP虛擬主機
這裡提供了JSP技術的全面
概述 ,描述了其開發背景以及這項技術的總體目標。同時,在一個簡單示例中,還描述了一個基於JavaTM技術的頁面的關鍵組成部分。
背景 開發基於Web的應用程式:在全球資訊網短暫的歷史中,它已經從一個大部分顯示靜態信息的網路演化到對股票進行交易和進行購書操作的一個基礎設施。在各種各樣的應用程式中,對於可能使用的基於Web的客戶端,看上去沒有任何限制。
基於
瀏覽器 客戶端的應用程式比傳統的基於客戶機/
伺服器 的應用程式有幾個好處。這些好處包括幾乎沒有限制的
客戶端 訪問和極其簡化的應用程式部署和管理(要更新一個應用程式,管理人員只需要更改一個基於
伺服器 的程式,而不是成千上萬的安裝在客戶端的應用程式)。這樣,軟體工業正迅速地向建造基於
瀏覽器 客戶端的多層次應用程式邁進。
這些快速增長的精巧的基於Web的應用程式要求開發技術上的改進。
靜態 HTML對於顯示相對靜態的內容是不錯的選擇;新的挑戰在於創建互動的基於Web的應用程式,在這些程式中,頁面的內容是基於用戶的請求或者系統的狀態,而不是預先定義的文字。
對於這個問題的一個早期解決方案是使用CGI-BIN接口;
開發人員 編寫與接口相關的單獨的程式,以及基於Web的應用程式,後者通過Web
伺服器 來調用前者。這個方案有著嚴重的擴展性問題——每個新的CGI要求在
伺服器 上新增一個進程。如果多個用戶並發地訪問該程式,這些進程將消耗該Web
伺服器 所有的可用資源,並且系統性能降低到極其低下的地步。
某些Web
伺服器 供應商已經嘗試通過為他們的
伺服器 提供“
外掛程式 ”和API來簡化Web應用程式的開發。這些解決方案是與特定的Web
伺服器 相關的,不能解決跨多個供應商的解決方案的問題。例如,
微軟 的Active Server PagesTM(ASP) 技術使得在Web頁面上創建動態內容更加容易,但是也只能
工作 在微軟的IIS和Personal Web Server上。
還存在其他的解決方案,但是都不能使一個普通的頁面設計者能夠輕易地掌握。例如,象Java Servlets這樣的技術就可以使得用Java語言編寫互動的應用程式的
伺服器 端的代碼變得容易。一個Java Servlets就是一個基於Java技術的運行在
伺服器 端的程式(與Applet不同,後者運行在
瀏覽器 端)。開發人員能夠編寫出這樣的Servlet,以接收來自Web
瀏覽器 的HTTP請求,動態地生成回響(可能要查詢資料庫來完成這項請求),然後傳送包含HTML或XML文檔的回響到瀏覽器。
採用這種
方法 ,整個網頁必須都在Java Servlet中製作。如果開發人員或者Web管理人員想要調整頁面顯示,就不得不編輯並重新編譯該Java Servlet,即使在邏輯上已經能夠運行了。採用這種
方法 ,生成帶有動態內容的頁面仍然需要應用程式的開發技巧。
很顯然,目前所需要的是一個業界範圍內的創建動態內容頁面的解決方案。這個方案將解決當前方案所受到的限制,即:
將應用程式邏輯和頁面顯示分離
能夠快速地開發和測試
簡化開發基於Web的互動式應用程式的過程
JavaServer Pages (JSP)技術就是被設計用來滿足這樣的要求的。JSP規範是Web
伺服器 、
套用伺服器 、交易系統、以及開發工具供應商間廣泛合作的結果。太陽微系統公司(Sun Microsystems Inc.)開發出這個規範來整合和平衡已經存在的對Java
編程環境 (例如,Java Servlet和JavaBeansTM)進行支持的技術和工具。其結果是產生了一種新的、開發基於Web應用程式的
方法 ,給予使用基於組件套用邏輯的頁面設計者以強大的功能。
Web套用開發的JavaServer Pages技術
方法 在開發JSP規範的過程中,太陽微系統公司(Sun Microsystems Inc.)與許許多多主要的Web伺服器、
套用伺服器 和開發工具供應商,以及各種各樣富有經驗的開發團體進行合作。其結果是找到了一種為套用和頁面開發人員平衡了可移植性和易用性的開發
方法 。
JSP技術在多個方面加速了動態Web頁面的開發:
將內容的生成和顯示進行分離
使用JSP技術,Web頁面開發人員可以使用HTML或者XML標識來設計和格式化最終頁面。使用JSP標識或者小腳本來生成頁面上的動態內容(內容是根據請求來變化的,例如請求帳戶信息或者特定的一瓶酒的價格)。生成內容的邏輯被
封裝 在標識和JavaBeans組件中,並且捆綁在小腳本中,所有的腳本在
伺服器 端運行。如果核心邏輯被
封裝 在標識和Beans中,那么其他人,如Web管理人員和頁面設計者,能夠編輯和使用JSP頁面,而不影響內容的生成。
在
伺服器 端,JSP引擎解釋JSP標識和小
腳本 ,生成所請求的內容(例如,通過訪問JavaBeans組件,使用JDBCTM技術訪問資料庫,或者包含檔案),並且將結果以HTML(或者XML)頁面的形式傳送回
瀏覽器 。這有助於作者保護自己的代碼,而又保證任何基於HTML的Web
瀏覽器 的完全可用性。
強調可重用的組件
絕大多數JSP頁面依賴於可重用的,跨平台的組件(JavaBeans或者Enterprise JavaBeansTM組件)來執行應用程式所要求的更為複雜的處理。開發人員能夠共享和交換執行普通操作的組件,或者使得這些組件為更多的使用者或者客戶團體所使用。基於組件的
方法 加速了總體開發過程,並且使得各種組織在他們現有的技能和最佳化結果的開發努力中得到平衡。
採用標識簡化頁面開發
Web頁面開發人員不會都是熟悉
腳本語言 的編程人員。JavaServer Page技術封裝了許多功能,這些功能是在易用的、與JSP相關的XML標識中進行動態內容生成所需要的。標準的JSP標識能夠訪問和實例化JavaBeans組件,設定或者檢索組件屬性,下載Applet,以及執行用其他
方法 更難於編碼和耗時的功能。
通過開發定製化標識庫,JSP技術是可以擴展的。今後,第三方開發人員和其他人員可以為常用功能創建自己的標識庫。這使得Web頁面開發人員能夠使用熟悉的工具和如同標識一樣的執行特定功能的
構件 來
工作 。
JSP技術很容易整合到多種套用體系結構中,以利用現存的工具和技巧,並且擴展到能夠支持企業級的
分散式套用 。作為採用Java技術家族的一部分,以及Java 2(企業版體系結構)的一個組成部分,JSP技術能夠支持高度複雜的基於Web的套用。
由於JSP頁面的內置
腳本語言 是基於Java程式語言的,而且所有的JSP頁面都被編譯成為Java Servlet,JSP頁面就具有Java技術的所有好處,包括健壯的
存儲管理 和安全性。
作為Java平台的一部分,JSP擁有Java程式語言“一次編寫,各處運行”的特點。隨著越來越多的供應商將JSP支持添加到他們的產品中,您可以使用自己所選擇的
伺服器 和工具,更改工具或伺服器並不影響當前的套用。
當與Java 2平台,企業版(J2EE)和Enterprise JavaBean技術整合時,JSP頁面將提供企業級的擴展性和性能,這對於在虛擬企業中部署基於Web的套用是必需的。
JSP頁面看上去象什麼?
JSP頁面看上去象標準的HTML和XML頁面,並附帶有JSP引擎能夠處理和抽取的額外元件。通常,JSP元件創建插入最終頁面的文本。
使用示例是描述JSP技術的最好
方法 。下面的JSP頁面非常簡單;它列印帶年、當月的天,並且根據時間使用"Good Morning"和"Good Afternoon"對您表示歡迎。
該頁面結合了普通的HTML和大量JSP元件組成。
對時鐘JavaBeans組件的調用
對一個外部檔案的包含(用於著作權信息)
JSP表達式和腳本
<HTML>
<%@ page language=="java" imports=="com.wombat.JSP.*" %>
<H1>Welcome</H1>
<P>Today is </P>
<jsp:useBean id=="clock" class=="calendar.jspCalendar" />
<UL>
<LI>Day: <%==clock.getDayOfMonth() %>
<LI>Year: <%==clock.getYear() %>
</UL>
<% if (Calendar.getInstance().get({ %>
Good Morning
<% } else { %>
Good Afternoon
<% } %>
<%@ include file=="copyright.html" %>
</HTML>
組件 JSP 一個JSP指示將信息傳送到JSP引擎。在這個示例中,第一行指出從該頁面即將訪問的一些Java程式語言的擴展的位置。指示被設定在<%@和%>標記中。
固定模板數據:所有JSP引擎不能識別的標識將隨結果頁面傳送。通常,這些標識是HTML或者XML標識。在上面的例子中包括無序列表(UL)和H1標識。
JSP動作或者標識:這些通常作為標準或定製標識被實現,並且具有XML標識的語法。在這個例子中,jsp:useBean標識實例化
伺服器 端的Clock JavaBean。
一個表達式:JSP引擎計算在<%==和%>標記間的所有東西。在上面的列表項中,時鐘組件(Clock)的Day和Year屬性值作為字元串返回,並且作為輸出插入到JSP檔案中。在上面的例子中,第一個列表項是日子,第二個是年份。
小腳本是執行不為標識所支持的功能或者將所有的東西捆綁在一起的小的腳本。JSP 1.0軟體的內置
腳本語言 是基於Java語言的。在上面示例中的小腳本確定現在是上午還是下午,並且據此來歡迎用戶。
這個例子可能小了一點,但是技術上卻不是。從業務上可以將關鍵的處理封裝在
伺服器 端的組件中,並且Web開發人員能夠使用熟悉的語法和工具很容易地訪問這些信息。基於Java的小
腳本 提供了一種靈活的方式以執行其他功能,而不要求擴展的
腳本語言 。頁面作為整體是可讀和可理解的,這就使得查找或者預防問題以及
詳細描述 這些組件中的一部分在下面有更詳細的描述。
JSP指示
JSP頁面使用JSP指示將指令傳遞到JSP引擎。這其中包括:
JSP頁面指示傳遞頁面相關的信息,例如緩衝區和執行緒信息或者出錯處理。
包含指示(在上面例子中有顯示)可以被用來在頁面中包含一個外部的文檔。一個好的例子是著作權文檔或者公司信息文檔——在一個集中地點保存該文檔並且在頁面中包含比在各個JSP頁面中更新要容易些。當然,被包含的檔案也可能是另一個JSP檔案。
標識庫指示指出頁面可以調用的一個客戶標識庫。
JSP標識 絕大多數JSP處理將通過與JSP相關的基於XML的標識完成。JSP 1.0中包含大量標準標識,這些標識作為核心標識包括:
jsp:useBean 這個標識聲明對一個JavaBeans組件實例的使用。如果該組件的實例不存在,JavaBeans組件將實例化和註冊這個標識。
jsp:setProperty 這個標識在組件的實例中設定一個屬性的值。
jsp:getProperty 這個標識獲取一個組件的實例的屬性值,將其轉化為字元串,並且將它放入隱含對象"out"中。
jsp:include
jsp:forward
1.1版本將包含更多的標準標識。
標識的好處在於它們易於在應用程式間使用和共享。基於標識的語法的真正威力來自於客戶標識庫的開發,使得工具供應商或其他人員能夠為特定的要求創建和分派標識。
腳本元件 JSP頁面可以在頁面中包含小的腳本,稱之為小腳本(scriptlets)。小腳本是一個代碼片段,在請求的處理過程中被執行。小腳本可以和頁面中的
靜態 元件組合(正如上面的例子一樣)起來創建動態生成的頁面。
腳本在<%和%>標誌中被描述。在這對標誌中的所有東西都會被
腳本 描述語言引擎執行,在我們的例子中是主機上的Java
虛擬機 。
JSP規範支持所有常用的腳本元件,包括表達式和聲明。
JSP頁面的套用模型
JSP頁面由JSP引擎執行,引擎安裝在Web
伺服器 或者使用JSP的
套用伺服器 上。JSP引擎接受客戶端對JSP頁面的請求,並且生成JSP頁面給客戶端的回響。
JSP頁面通常被編譯成為Java Servlet。後者是一個標準的Java擴展,在www.java.站點有更詳細的描述。頁面開發人員能夠訪問全部的Java套用環境,以利用Java技術的擴展性和可移植性。
當JSP頁面第一次被調用時,如果它還不存在,就會被編譯成為一個Java Servlet類,並且存儲在
伺服器 的記憶體中。這使得在接下來的對該頁面的調用有非常快的回響。(這避免了CGI-BIN為每個HTTP請求生成一個新的進程的問題,或是
伺服器 端引用所引起的運行時
語法分析 。)
JSP頁面可以包含在多種不同的套用體系結構或者模型中。JSP頁面可以用於由不同協定、組件和格式所組成的
聯合體 中。下面的小節描述了一些可能發生的情況。
一個簡單套用 在一個簡單實現中,
瀏覽器 直接調用JSP頁面,JSP頁面自己生成被請求的內容(可能會調用JDBC直接從資料庫中獲取信息)。JSP頁面能夠調用JDBC或者Java BlendTM組件來生成結果,並且創建標準的HTML,作為結果傳送回
瀏覽器 。
這個模型基本上用JSP頁面(編譯成為Java Servlet)代替了CGI-BIN概念。這個
方法 擁有下列優點:
簡單而快速地編程
頁面作者可以很容易地根據請求和資源狀態生成動態內容
這個結構在許多套用上
工作 良好,但不能擴展到大量的基於Web的並發客戶訪問稀少的企業資源,因為每個客戶必須建立或者共享一個到可用內容資源的連線。例如,如果JSP頁面訪問資料庫,可能生成許多到資料庫的連線,這將影響到資料庫的性能。
使用Java Servlet的一個靈活的套用 在另一種可能的配置中,基於Web的客戶機可能直接對Java Servlet進行請求,Servlet生成動態內容,將結果捆綁到一個結果對象中並且調用JSP頁面。JSP頁面從該對象中訪問動態內容,並且將結果(例如HTML)傳送回
瀏覽器 。
這個
方法 創建了更多的可以為應用程式間共享的可重用的組件,並且可以作為更大的套用的一部分完成。但是,在處理如資料庫一樣的企業資源的連線時,還是存在擴展性問題。
採用企業級JavaBean技術的可擴展處理
JSP頁面也可以作為企業級JavaBean(EJB)體系結構中的一個中間層。在這種情況下,JSP頁面和後端資源通過EJB組件進行互動。
EJB組件管理對後端資源的訪問,從而為眾多的並發使用者提供可擴展的性能。對於電子商務或者其他套用,EJB管理交易和潛在的安全性。這將簡化JSP頁面。這個模型將為Java 2企業版(J2EE)平台所支持。
JSP頁面與XML技術的集成 JSP頁面可以用於生成XML和HTML頁面。
對於簡單的XML生成,開發人員可以包含XML標識和JSP頁面的
靜態 模板部分。對於動態XML生成,使用基於
伺服器 的對象和生成XML輸出的客戶化標識。
JSP頁面與XML工具不是不兼容的。儘管Sun在設計JSP規範時使得JSP頁面即使手工操作對於創作者而言也是很容易的,JSP規範同時也提供了一個機制以便於創建任意JSP頁面的一個XML版本。通過這種
方法 ,XML工具能夠創作和操作JSP頁面。
通過將JSP標識和元件轉換為與XML兼容的對等物,可以使用基於XML的工具來操作JSP頁面。例如,
腳本 可以被包含在<%和%>之中,或者基於XML標誌的<jsp:scriptlet>和</jsp:scriptlet>中。事實上,經過下面這樣簡單的幾步將JSP頁面轉換為XML頁面是可能的,這些步驟包括:
增加一個JSP根元件 將元件和指示轉換為XML兼容的對等物
為頁面上其他的元件(通常非JSP)創建CDATA元件
通過這個與XML兼容的
方法 ,創建HTML頁面的設計者仍然擁有一個快速創建動態Web頁面的易用環境,同時,基於XML的工具和服務可以與JSP頁面集成並且和JSP兼容的
伺服器 一起
工作 。
JSP技術的未來 JSP技術被設計為一個開放的,可擴展的建立動態Web頁面的標準。開發人員可以使用JSP頁面來創建可移植的Web套用,在不同的Web和
套用伺服器 上為不同的場合所運行,而不論採用什麼適合本身場合和需要的創建工具。
JSP虛擬主機 通過與業界領袖的合作,Sun保證JSP規範是開放的和可移植的。可以使用任何客戶機和
伺服器 平台,在任何地方編寫和部署它們。將來,工具供應商和其他廠商將通過為專門的功能提供客戶化的標識庫而擴展平台的功能。
JSP規範的1.0版本是通向動態Web頁面生成的一個開放的工業標準
方法 的第一步。1.0版本通過一個核心標識集、隱含對象以及開始創建動態Web頁面所需的基本功能構成了該
方法 的基礎。已經有幾個Web
伺服器 ,
套用伺服器 和開發工具供應商正在為他們的產品添加JSP1.0的支持,這樣在業界已經擁有了最初的、立即的支持。
在1999晚些時候將完成的1.1版本,通過更多的XML支持、客戶化標識、以及與J2EE的集成而擴展這個版本。並且供應商們可能會有選擇地擴展和擴充在JSP規範中基本的、必需的功能。JSP引擎能夠強有力地支持多種
腳本語言 和對象模型。在業界擴充和使用JSP技術能力的同時,也向Sun承諾將保證JSP技術保持平台和
伺服器 間固有的可移植性。
JSP與ASP 的簡單比較 JSP與 Microsoft 的ASP技術非常相似。兩者都提供在 HTML 代碼中混合某種程式代碼、由語言引擎
解釋執行 程式代碼的能力。在ASP或JSP環境下,HTML代碼主要負責描述信息的顯示樣式,而程式代碼則用來描述處理邏輯。普通的HTML頁面只依賴於Web
伺服器 ,而ASP和JSP頁面需要附加的語言引擎分析和執行程式代碼。程式代碼的執行結果被重新嵌入到 HTML 代碼中,然後一起傳送給
瀏覽器 。ASP和JSP都是面向Web
伺服器 的技術,
客戶端 瀏覽器 不需要任何附加的軟體支持。ASP的
程式語言 是VBScript 之類的
腳本語言 ,JSP使用的是 Java ,這是兩者最明顯的區別。此外,ASP與JSP還有一個更為本質的區別:兩種語言引擎用完全不同的方式處理頁面中嵌入的程式代碼。在ASP下, VBScript 代碼被ASP引擎
解釋執行 ;在JSP下,代碼被編譯成 Servlet 並由 Java
虛擬機 執行,這種編譯操作僅在對JSP頁面的第一次請求時發生。
運行環境
JSP規範定義了供應商在創建JSP引擎時所必須遵從的一些規則。執行JSP代碼需要在
伺服器 上安裝JSP引擎。此處我們使用的是Sun的 JavaServerWebDevelopment Kit ( JSWDK )。為便於學習,這個
軟體包 提供了大量可供修改的示例。安裝 JSWDK 之後,只需執行 startserver 命令即可啟動
伺服器 。在默認配置下
伺服器 在連線埠 8080 監聽,使用 http://localhost:8080 即可打開預設頁面。在運行JSP示例頁面之前,請注意一下安裝 JSWDK 的目錄,特別是“ work ”子目錄下的內容。執行示例頁面時,可以在這裡看到JSP頁面如何被轉換成 Java
源檔案 ,然後又被編譯成 class 檔案(即 Servlet )。 JSWDK
軟體包 中的示例頁面分為兩類,它們或者是JSP檔案,或者是包含一個
表單 的 HTML 檔案,這些表單均由JSP代碼處理。與ASP一樣,JSP中的 Java 代碼均在
伺服器 端執行。因此,在
瀏覽器 中使用“查看
源檔案 ”選單是無法看到JSP
原始碼 的,只能看到結果 HTML 代碼。所有示例的
原始碼 均通過一個單獨的“ examples ”頁面提供。
JSP和Active Server Pages(ASP)相比 Microsoft的ASP是一種和JSP類似的技術。JSP和ASP相比具有兩方面的優點。首先,動態部分用Java編寫,而不是VB Script或其他Microsoft語言,不僅功能更強大而且更易於使用。第二,JSP套用可以移植到其他作業系統和非Microsoft的Web伺服器上。
JSP和純Servlet相比 JSP並沒有增加任何本質上不能用Servlet實現的功能。但是,在JSP中編寫
靜態 HTML更加方便,不必再用 println語句來輸出每一行HTML代碼。更重要的是,藉助內容和外觀的分離,頁面製作中不同性質的任務可以方便地分開:比如,由頁面設計專家進行HTML設計,同時留出供Servlet程式設計師插入動態內容的空間。
JSP和JavaScript相比 JavaScript能夠在
客戶端 動態地生成HTML。雖然JavaScript很有用,但它只能處理以
客戶端 環境為基礎的動態信息。除了Cookie之外,HTTP狀態和
表單 提交數據對JavaScript來說都是不可用的。另外,由於是在
客戶端 運行,JavaScript不能訪問
伺服器 端資源,比如資料庫、目錄信息等等。
JSP和
伺服器 端包含(Server-Side Include,SSI)相比
SSI是一種受到廣泛支持的在
靜態 HTML中引入外部代碼的技術。JSP在這方面的支持更為完善,因為它可以用Servlet而不是獨立的程式來生成動態內容。另外,SSI實際上只用於簡單的包含,而不是面向那些能夠處理
表單 數據、訪問資料庫的“真正的”程式。
選購虛擬主機注意事項 1、IIS數和CPU占用率
IIS數:IIS或WEB連線數指同一時間伺服器可以回響的訪問請求,可以簡單的理解為允許多少個瀏覽器視窗同時訪問您的站點,比如說:100個IIS連線數就可以有100個瀏覽器視窗同時與伺服器連線。
虛擬主機CPU占用率:CPU是指你的虛擬主機在運行過程中,所占的整台伺服器的CPU資源的比例。
現在很多虛擬主機商都標榜不限制IIS數,以吸引客戶。但實際情況是IIS可以不作出限制,但對你的CPU占用率作出嚴格的限制,這樣的話,雖然你的IIS不受限制,但由於CPU占用率極少,反而降低了你的虛擬主機的可用性。其實是虛擬主機商在玩文字遊戲。
2、流量與頻寬限制
流量:虛擬主機的某段時間內用戶數量以及用戶所瀏覽的頁面數量等指標。
頻寬:虛擬主機頻寬是指,虛擬主機在同一時間內傳輸檔案的能力。
現在很多虛擬主機商寫明,不限制月流量。但由於伺服器的頻寬不是無限的,為了能儘量降低成本,一般伺服器的頻寬都是百兆共享的。所以為了不影響其它客戶的正常使用,虛擬主機租用商往往對每個用戶的頻寬作出嚴格的限制,即使你的網站一天24小時在運行。可能月總流量也只有那么一點。
總結:對於什麼都不限制的虛擬主機大家可要擦亮眼睛,因為什麼都不限制,到頭來是什麼都受限制。