當前位置:編程學習大全網 - 源碼下載 - jsp好學麽?是語言還是開發工具?

jsp好學麽?是語言還是開發工具?

JSP(JavaServer Pages)是由Sun Microsystems公司倡導、許多公司參與壹起建立的壹種動態網頁技術標準。JSP技術有點類似ASP技術,它是在傳統的網頁HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件(*.jsp)。

用JSP開發的Web應用是跨平臺的,即能在Linux下運行,也能在其他操作系統上運行。

JSP技術使用Java編程語言編寫類XML的tags和scriptlets,來封裝產生動態網頁的處理邏輯。網頁還能通過tags和scriptlets訪問存在於服務端的資源的應用邏輯。JSP將網頁邏輯與網頁設計和顯示分離,支持可重用的基於組件的設計,使基於Web的應用程序的開發變得迅速和容易。

Web服務器在遇到訪問JSP網頁的請求時,首先執行其中的程序段,然後將執行結果連同JSP文件中的HTML代碼壹起返回給客戶。插入的Java程序段可以操作數據庫、重新定向網頁等,以實現建立動態網頁所需要的功能。

JSP與Java Servlet壹樣,是在服務器端執行的,通常返回該客戶端的就是壹個HTML文本,因此客戶端只要有瀏覽器就能瀏覽。

JSP的1.0規範的最後版本是1999年9月推出的,12月又推出了1.1規範。目前較新的是JSP1.2規範,JSP2.0規範的征求意見稿也已出臺。

JSP頁面由HTML代碼和嵌入其中的Java代碼所組成。服務器在頁面被客戶端請求以後對這些Java代碼進行處理,然後將生成的HTML頁面返回給客戶端的瀏覽器。Java Servlet 是JSP的技術基礎,而且大型的Web應用程序的開發需要Java Servlet和JSP配合才能完成。JSP具備了Java技術的簡單易用,完全的面向對象,具有平臺無關性且安全可靠,主要面向因特網的所有特點。

JSP技術的強勢

[編輯本段]

(1)壹次編寫,到處運行。在這壹點上Java比PHP更出色,除了系統之外,代碼不用做任何更改。

(2)系統的多平臺支持。基本上可以在所有平臺上的任意環境中開發,在任意環境中進行系統部署,在任意環境中擴展。相比ASP/PHP的局限性是顯而易見的。

(3)強大的可伸縮性。從只有壹個小的Jar文件就可以運行Servlet/JSP,到由多臺服務器進行集群和負載均衡,到多臺Application進行事務處理,消息處理,壹臺服務器到無數臺服務器,Java顯示了壹個巨大的生命力。

(4)多樣化和功能強大的開發工具支持。這壹點與ASP很像,Java已經有了許多非常優秀的開發工具,而且許多可以免費得到,並且其中許多已經可以順利的運行於多種平臺之下。

JSP技術的弱勢

[編輯本段]

(1) 與ASP壹樣,Java的壹些優勢正是它致命的問題所在。正是由於為了跨平臺的功能,為了極度的伸縮能力,所以極大的增加了產品的復雜性。

(2) Java的運行速度是用class常駐內存來完成的,所以它在壹些情況下所使用的內存比起用戶數量來說確實是“最低性能價格比”了。從另壹方面,它還需要硬盤空間來儲存壹系列的.java文件和.class文件,以及對應的版本文件。

JSP九種內置對象:

[編輯本段]

request, response, out, session, application, config, pagecontext, page, exception.

壹.request對象:

該對象封裝了用戶提交的信息,通過調用該對象相應的方法可以獲取封裝的信息,即使用該對象可以獲取用戶提交信息。

二.response對象:

對客戶的請求做出動態的響應,向客戶端發送數據。

三.session對象

1.什麽是session:session對象是壹個JSP內置對象,它在第壹個JSP頁面被裝載時自動創建,完成會話期管理。

從壹個客戶打開瀏覽器並連接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱為壹個會話。當壹個客戶訪問壹個服務器時,可能會在這個服務器的幾個頁面之間反復連接,反復刷新壹個頁面,服務器應當通過某種辦法知道這是同壹個客戶,這就需要session對象。

2.session對象的ID:當壹個客戶首次訪問服務器上的壹個JSP頁面時,JSP引擎產生壹個session對象,同時分配壹個String類型的ID號,JSP引擎同時將這個ID號發送到客戶端,存放在Cookie中,這樣session對象和客戶之間就建立了壹壹對應的關系。當客戶再訪問連接該服務器的其他頁面時,不再分配給客戶新的session對象,直到客戶關閉瀏覽器後,服務器端該客戶的session對象才取消,並且和客戶的會話對應關系消失。當客戶重新打開瀏覽器再連接到該服務器時,服務器為該客戶再創建壹個新的session對象。

四.aplication對象

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對象是壹個輸出流,用來向客戶端輸出數據。out對象用於各種數據的輸出。

六?page java.lang.Object

對應this關鍵字。JSP網頁本身

page對象是當前頁面轉換後的Servlet類的實例。從轉換後的Servlet類的代碼中,可以看到這種關系:

Object page = this;

在JSP頁面中,很少使用page對象。

七?config

javax.servlet. ServletConfig 的實例,該實例代表該JSP 的配置信息。常用的方法有getInitPararneter(String paramNarne) 及getInitPararneternarnes() 等方法。事實上, JSP 頁面通常無須配置,也就不存在配置信息。因此,該對象更多地在Servlet 中有效。

八? exception

java.lang.Throwable 的實例,該實例代表其他頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性為true 時,該對象才可以使用。常用的方法有getMessageO和printStackTraceO等。

九? pageContext

javax.servlet.jsp.PageContext 的實例,該對象代表該JSP 頁面上下文,使用該對象可以訪問頁面中的***享數據。常用的方法有getServletContextO和getServletConfigO等。

//使用pageContext 設置屬性,該屬性默認在page 範圍內

pageContext. setAttribute ("page" , "hello") ;

//使用request 設置屬性,該屬性默認在request 範圍內

request. setAttribute ("request" , "hello");

//使用pageContext將屬性設置在request 範圍中

pageContext.setAttribute("request2" , "hello" , pageContext.REQUEST_SCOPE);

// 使用session將屬性設置在session 範圍中

session.setAttribute("session" , "hello"l;

//使用pageContext將屬性設置在session範圍中

pageContext.setAttribute("session2" , "hello" , pageContext.SESSION_SCOPE);

//使用application將屬性設置在application範圍中

application. setAttribute ("app" , "hello") ;

//使用pageContext 將屬性設置在application 範圍中

pageContext.setAttribute("app2" , "hello" , pageContext.APPL 工CATION_SCOPE) ;

JSP動態網站開發技術

[編輯本段]

早期的動態網站開發技術使用的是CGI-BIN接口。開發人員編寫與接口相關的單獨的程序和基於Web的應用程序,後者通過Web服務器來調用前者。這種開發技術存在著嚴重的擴展性問題——每壹個新的CGI程序要求在服務器上新增壹個進程。如果多個用戶並發地訪問該程序,這些進程將耗盡該Web服務器所有的可用資源,直至其崩潰。

為克服這壹弊端,微軟公司提出了Active Server Pages(ASP)技術,該技術利用“插件”和API簡化了Web應用程序的開發。ASP與CGI相比,其優點是可以包含HTML標簽,可以直接存取數據庫及使用無限擴充的ActiveX控件,因此在程序編制上更富有靈活性。但該技術基本上是局限於微軟的操作系統平臺之上,主要工作環境是微軟的IIS應用程序結構,所以ASP技術不能很容易地實現跨平臺的Web服務器程序開發。

Hypertext Preprocessor(超文本預處理器),即PHP動態網站開發技術與ASP相似,也是壹種嵌入HTML文檔的服務器端腳本語言。其語法大部分與C、Java、Perl等語言相似,並形成了自己的獨有風格,利用該語言Web程序員可以快速地開發出動態網頁。PHP在大多數Unix平臺、GUN/Linux和微軟Windows平臺上均可以運行。PHP的優點主要有:安裝方便,學習過程簡單;數據庫連接方便,兼容性強;擴展性強;可以進行面向對象編程等。但PHP也存在壹些弱點,主要是PHP是壹種解釋型語言,不支持多線程結構,支持平臺和連接的數據庫都有限,特別是在支持的標準方面存在先天不足,對於某些電子商務應用來說,PHP是不適合的。

還有壹些技術,如Java Servlets技術,利用該技術可以很容易地用Java語言編寫交互式的服務器端代碼。壹個Java Servlets就是壹個基於Java技術的運行在服務器端的程序(與Applet不同,後者運行在瀏覽器端)。開發人員編寫這樣的Java Servlets,以接收來自Web瀏覽器的HTTP請求,動態地生成響應(可能需要查詢數據庫來完成這種請求),然後發送包含HTML或XML文檔的響應到瀏覽器。這種技術對於普通的頁面設計者來說要輕易地掌握是很困難的。采用這種方法,整個網頁必須都在Java Servlets中制作。如果開發人員或者Web管理人員想要調整頁面顯示,就不得不編輯並重新編譯該Java Servlets。

太陽微系統公司(Sun Microsystems Inc.)在Web服務器、應用服務器、交易系統以及開發工具供應商間廣泛支持與合作下,整合並平衡了已經存在的對Java編程環境(例如Java Servlets和JavaBeans)進行支持的技術和工具後產生了壹種新的、開發基於Web應用程序的方法——JavaServer Pages技術(JSP)。這種動態網站開發技術主要有以下壹些特點:

能夠在任何Web或應用程序服務器上運行;

分離了應用程序的邏輯和頁面顯示;

能夠進行快速的開發和測試;

簡化了開發基於Web的交互式應用程序的過程。

JSP的技術方法

為了快速方便地進行動態網站的開發,JSP在以下幾個方面做了改進,使其成為快速建立跨平臺的動態網站的首選方案。

1.將內容的生成和顯示進行分離

用JSP技術,Web頁面開發人員可以使用HTML或者XML標識來設計和格式化最終頁面,並使用JSP標識或者小腳本來生成頁面上的動態內容(內容是根據請求變化的,例如請求賬戶信息或者特定的壹瓶酒的價格等)。生成內容的邏輯被封裝在標識和JavaBeans組件中,並且捆綁在腳本中,所有的腳本在服務器端運行。由於核心邏輯被封裝在標識和JavaBeans中,所以Web管理人員和頁面設計者,能夠編輯和使用JSP頁面,而不影響內容的生成。

在服務器端,JSP引擎解釋JSP標識和腳本,生成所請求的內容(例如,通過訪問JavaBeans組件,使用JDBC技術訪問數據庫或者包含文件),並且將結果以HTML(或者XML)頁面的形式發送回瀏覽器。這既有助於作者保護自己的代碼,又能保證任何基於HTML的Web瀏覽器的完全可用性。

2.可重用組件

絕大多數JSP頁面依賴於可重用的、跨平臺的組件(JavaBeans或者Enterprise JavaBeans組件)來執行應用程序所要求的復雜的處理。開發人員能夠***享和交換執行普通操作的組件,或者使得這些組件為更多的使用者和客戶團體所使用。基於組件的方法加速了總體開發過程,並且使得各種組織在他們現有的技能和優化結果的開發努力中得到平衡。

3.采用標識

Web頁面開發人員不會都是熟悉腳本語言的編程人員。JSP技術封裝了許多功能,這些功能是在易用的、與JSP相關的XML標識中進行動態內容生成所需要的。標準的JSP標識能夠訪問和實例化JavaBeans組件,設置或者檢索組件屬性,下載Applet,以及執行用其他方法更難於編碼和耗時的功能。

4.適應平臺

幾乎所有平臺都支持Java,JSP+JavaBeans幾乎可以在所有平臺下通行無阻。從壹個平臺移植到另外壹個平臺,JSP和JavaBeans甚至不用重新編譯,因為Java字節碼都是標準的與平臺無關的。

5.數據庫連接

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技術,動態信息由JSP頁面來表現,JSP頁面由安裝在Web服務器或者使用JSP的應用服務器上的JSP引擎執行。JSP引擎接受客戶端對JSP頁面的請求,並且生成JSP頁面作為對客戶端的響應。

JSP頁面通常被編譯成為Java Servlets,這是壹個標準的Java擴展。頁面開發人員能夠訪問全部的Java應用環境,以利用Java技術的擴展性和可移植性。當JSP頁面第壹次被調用時,如果它還不存在,就會被編譯成為壹個Java Servlets類,並且存儲在服務器的內存中。這就使得在接下來的對該頁面的調用中,服務器會有非常快的響應(這避免了CGI-BIN為每個HTTP請求生成壹個新的進程的問題)。

JSP頁面可以包含在多種不同的應用體系結構或者模型中,可以用於由不同協議、組件和格式所組成的聯合體中。基於JSP的動態信息發布技術是壹個開放的、可擴展的建立動態Web頁面的標準。不論采用什麽創建工具,開發人員都可以使用JSP頁面來創建可移植的Web應用,在不同的Web應用服務器上運行。

JSP 2.0介紹

[編輯本段]

新的JSP規範版本包括新的用於提升程序員工作效率功能,主要有:

An Expression Language (EL) 允許開發者創建 Velocity-樣式 templates (among other things).

更快更簡單的創建新標簽的方法。

Hello, ${param.visitor} <%-- same as: Hello, <%=request.getParameter("visitor")%> --%>

[編輯] 模-視圖-控件 模式

為了把表現層presentation從請求處理request processing 和數據存儲data storage中分離開來,升陽公司推薦在JSP文件中使用壹種模-視圖-控件Model-view-controller 模式。 規範的SERVLET或者分離的JSP文件用於處理請求。當請求處理完後,控制權交給壹個只作為創建輸出作用的JSP頁。有幾種平臺都基於服務於網絡層的模-視圖-控件 模式(比如Struts 和Spring framework)。

JSP2.0樣例

[編輯本段]

不管JSP編譯器是生成SERVLET的JAVA源碼,或者是直接發布二進制碼,了解壹下JSP編譯器是如何把文件轉換成壹個JAVA SERVLET,都是很有幫助的。例如,看壹下如下輸入JSP和它最後生成的JAVA SERVLET:

Input JSP

<%@ page errorPage="myerror.jsp" %>

<%@ page import="com.foo.bar" %>

<html>

<head>

<%! int serverInstanceVariable = 1;%>

...

<% int localStackBasedVariable = 1; %>

[table]

[tbody][tr][td]<%= "expanded inline data " + 1 %>[/tr][/tr]

...

Resulting servlet

package jsp_servlet;

import java.util.*;

import java.io.*;

import javax.servlet.*;

import javax.servlet..foo.bar; //imported as a result of <%@ page import="com.foo.bar" %>

import ...

class _myserlvet implements javax.servlet.Servlet, javax.servlet.jsp.HttpJspPage {

//inserted as a

//result of <%! int serverInstanceVariable = 1;%>

int serverInstanceVariable = 1;

...

public void _jspService( javax.servlet.http.HttpServletRequest request,

javax.servlet.http.HttpServletResponse response )

throws javax.servlet.ServletException,

java.io.IOException

{

javax.servlet.ServletConfig config = ...;//get the servlet config

Object page = this;

PageContext pageContext = ...;//get the page context for this request

javax.servlet.jsp.JspWriter out = pageContext.getOut();

HttpSession session = request.getSession( true );

try {

out.print( "<html>\r\n" );

out.print( "<head>\r\n" );

...

//from <% int localStackBasedVariable = 1; %>

int localStackBasedVariable = 1;

...

out.print( "[/tbody][/table][table]\r\n" );

out.print( " [tbody][tr][td]" );

//note, toStringOrBlank() converts the expression into a string or if

// the expression is null, it uses the empty string.

//from <%= "expanded inline data " + 1 %>

out.print( toStringOrBlank( "expanded inline data " + 1 ) );

out.print( " [/tr][/tr]\r\n" );

...

} catch ( Exception _exception ) {

//clean up and redirect to error page in <%@ page errorPage="myerror.jsp" %>

}

}

}

[/tbody][/table]

  • 上一篇:大連明珠卡為什麽要實名認證?
  • 下一篇:後來會有別人嗎歌詞是什麽歌
  • copyright 2024編程學習大全網