JSP網站的特點
JSP
虛擬主機是利用獨特的技術手段把一台伺服器上的JSP環境劃分為獨立的小的JSP環境,來供大家執行所需要的JSP語言,您可以把自己的JSP語言的網站上傳到JSP虛擬主機上,設定好資料庫的連線,您的JSP網站就可正常運行了,JSP虛擬主機其實就是在網路上提供一個JSP環境,您買了後可以把自己的網站放上去讓全世界的人都能瀏覽到,而如果不用JSP虛擬主機,您在自己的電腦上只能您自己看到,這樣就失去做網站的意義!
JSP虛擬主機有什麼好處
JSP使用
java健壯語言,安全性強,目前大型企業網站絕大多數都是用JSP技術構建,JSP主機不需要擔心被跨站黑掉的問題。
JSP技術為創建顯示動態生成內容的Web頁面提供了一個簡捷而快速的方法。JSP技術的設計目的是使得構造基於Web的應用程式更加容易和快捷,而這些應用程式能夠與各種Web伺服器,
套用伺服器,瀏覽器和開發工具共同工作。這裡提供了JSP技術的全面概述,描述了其開發背景以及這項技術的總體目標。同時,在一個簡單示例中,還描述了一個基於JavaTM技術的頁面的關鍵組成部分。
在全球資訊網短暫的歷史中,它已經從一個大部分顯示靜態信息的網路演化到對股票進行交易和進行購書操作的一個基礎設施。在各種各樣的應用程式中,對於可能使用的基於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或應用程式伺服器上運行
將應用程式邏輯和頁面顯示分離
能夠快速地開發和測試
簡化開發基於Web的互動式應用程式的過程
JavaServer Pages (JSP)技術就是被設計用來滿足這樣的要求的。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和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實際上只用於簡單的包含,而不是面向那些能夠處理
表單數據、訪問資料庫的“真正的”程式。
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><li>Year: <%=clock.getYear() %></li></ul><% if (Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM) { %>Good Morning<% } else { %>Good Afternoon<% } %><%@ include file="copyright.html" %></html>
這個頁面包含下面這些組件:
一個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擴展。當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工具不是不兼容的。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規範的1.0版本是通向動態Web頁面生成的一個開放的工業標準方法的第一步。1.0版本通過一個核心標識集、隱含對象以及開始創建動態Web頁面所需的基本功能構成了該方法的基礎。已經有幾個Web伺服器,套用伺服器和開發工具供應商正在為他們的產品添加JSP1.0的支持,這樣在業界已經擁有了最初的、立即的支持。
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 ”頁面提供。