JSP

JSP 簡介
什麼是Java Server Pages(Java服務器頁面)?
JSP全稱Java Server Pages,是一種動態網頁開發技術。它使用JSP標籤在HTML網頁中插入Java代碼。標籤通常以<%開頭以%>結束。
JSP是一種Javaservlet(服務器小程序),主要用於實現Javaweb應用程序的用戶界面部分。網頁開發者們通過結合HTML代碼、XHTML代碼、XML元素以及嵌入JSP操作和命令來編寫JSP。
JSP通過網頁表單獲取用戶輸入數據、訪問數據庫及其他數據源,然後動態地創建網頁。
JSP標籤有多種功能,比如訪問數據庫、記錄用戶選擇信息、訪問JavaBeans組件等,還可以在不同的網頁中傳遞控制信息和共享信息。
。。。
爲什麼使用JSP?
http:/ /www.iis7.com/b/plc/
JSP程序與CGI(公共網關接口)程序有着相似的功能,但和CGI程序相比,JSP程序有如下優勢:
-性能更加優越,因爲JSP可以直接在HTML網頁中動態嵌入元素而不需要單獨引用CGI文件。
-服務器調用的是已經編譯好的JSP文件,而不像CGI/Perl那樣必須先載入解釋器和目標腳本。
-JSP基於Java Servlets API,因此,JSP擁有各種強大的企業級Java API,包括JDBC,JNDI,EJB,JAXP等等。
-JSP頁面可以與處理業務邏輯的servlets一起使用,這種模式被Java servlet 模板引擎所支持。
最後,JSP是Java EE不可或缺的一部分,是一個完整的企業級應用平臺。這意味着JSP可以用最簡單的方式來實現最複雜的應用。
。。。
JSP的優勢
以下列出了使用JSP帶來的其他好處:
-與ASP相比:JSP有兩大優勢。首先,動態部分用Java編寫,而不是VB或其他MS專用語言,所以更加強大與易用。第二點就是JSP易於移植到非MS平臺上。
-與純 Servlets相比:JSP可以很方便的編寫或者修改HTML網頁而不用去面對大量的println語句。
-與SSI相比:SSI無法使用表單數據、無法進行數據庫鏈接。
-與JavaScript相比:雖然JavaScript可以在客戶端動態生成HTML,但是很難與服務器交互,因此不能提供複雜的服務,比如訪問數據庫和圖像處理等等。
-與靜態HTML相比:靜態HTML不包含動態信息。
::::::::::::::::::::::::::::::::::::::::
JSP 開發環境搭建
JSP開發環境是您用來開發、測試和運行JSP程序的地方。
我們來搭建JSP開發環境,具體包括以下幾個步驟:

  1. 配置Java開發工具(JDK)
    這一步涉及Java SDK的下載和PATH環境變量的配置。
    您可以從Oracle公司的Java頁面中下載SDK:Java SE Downloads(JavaSE下載)
    JavaSDK下載完後,請按照給定的指示來安裝和配置SDK。最後,通過設置PATH和JAVA_HOME環境變量來指明包括java和javac的文件夾路徑,通常是java_install_dir/bin和java_install_dir。
    假如您用的是Windows系統並且SDK的安裝目錄爲C::\jdk1.5.0_20,那麼您就需要在 C:\autoexec.bat 文件中添加以下兩行:
    set PATH=C:\jdk1.5.0_20\bin;%PATH%
    set JAVA_HOME=C:\jdk1.5.0_20
    或者,在Windows NT/2000/XP下,您可以直接右擊我的電腦圖標,選擇屬性,然後高級,然後環境變量,接下來您就可以很方便地設置PATH變量並且確定退出就行了。
    在Linux/Unix系統下,如果SDK的安裝目錄爲/usr/local/jdk1.5.0_20並且使用的是C shell,那麼您就需要在.cshrc文件中添加以下兩行:
    setenv PATH /usr/local/jdk1.5.0_20/bin:$PATH
    setenv JAVA_HOME /usr/local/jdk1.5.0_20
    或者,假如您正在使用類似於Borland JBuilder、Eclipse、IntelliJ IDEA和Sun ONE Studio這樣的集成開發環境,可以試着編譯並運行一個簡單的程序來確定IDE(集成開發環境)是否已經知道 SDK的安裝目錄。
  2. 設置Web服務器:Tomcat
    目前,市場上有很多支持JSP和Servlets開發的Web服務器。他們中的一些可以免費下載和使用,Tomcat就是其中之一。
    Apache Tomcat是一個開源軟件,可作爲獨立的服務器來運行JSP和Servlets,也可以集成在 Apache Web Server中。以下是Tomcat的配置方法:
    下載最新版本的Tomcat:http://tomcat.apache.org/
    下載完安裝文件後,將壓縮文件解壓到一個方便的地方,比如Windows下的C:\apache-tomcat-5.5.29目錄或者Linux/Unix下的/usr/local/apache-tomcat-5.5.29目錄,然後創建CATALINA_HOME環境變量指向這些目錄。
    在Windows機器下,Tomcat可以通過執行以右命令來啓動:%CATALINA_HOME%\bin\startup.bat 或者 C:\apache-tomcat-5.5.29\bin\startup.bat
    在Linux/Unix機器下,Tomcat可以通過執行以右命令來啓動:$CATALINA_HOME/bin/startup.sh 或者 /usr/local/apache-tomcat-5.5.29/bin/startup.sh
    成功啓動Tomcat後,通過訪問http://localhost:8080/便可以使用Tomcat自帶的一些web應用了。
    在Windows機器下,Tomcat可以通過執行以下命令來停止:%CATALINA_HOME%\bin\shutdown 或者 C:\apache-tomcat-5.5.29\bin\shutdown
    在Linux/Unix機器下,Tomcat可以通過執行以下命令來停止:$CATALINA_HOME/bin/shutdown.sh 或者 /usr/local/apache-tomcat-5.5.29/bin/shutdown.sh
  3. 設置CLASSPATH環境變量
    由於servlets不是Java SE的一部分,所以您必須標示出servlet類的編譯器。
    假如您用的是Windows機器,您需要在C:\autoexec.bat文件中添加以下兩行:
    set CATALINA=C:\apache-tomcat-5.5.29
    set CLASSPATH=%CATALINA%\common\lib\jsp-api.jar;%CLASSPATH%
    或者,在Windows NT/2000/XP下,您只要右擊我的電腦,選擇屬性,然後點擊高級,然後點擊環境變量,接下來便可以設置CLASSPATH變量並且確定退出即可。
    在Linux/Unix機器下,假如您使用的是C shell,那麼您就需要在.cshrc文件中添加以下兩行:
    setenv CATALINA=/usr/local/apache-tomcat-5.5.29
    setenv CLASSPATH $CATALINA/common/lib/jsp-api.jar:$CLASSPATH
    注意:如果您的開發路徑是C:\JSPDev (Windows)或者 /usr/JSPDev (Linux/Unix),那麼您就需要將這些路徑添加進CLASSPATH變量中。
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::
    Eclipse JSP/Servlet 環境搭建
    我們可以使用 Eclipse 來搭建 JSP 開發環境,首先我們分別下載一下軟件包:
    Eclipse J2EE:http://www.eclipse.org/downloads/
    Tomcat:http://tomcat.apache.org/download-70.cgi
    。。。
    Tomcat 下載安裝
    你可以根據你的系統下載對應的包(以下以Window系統爲例):
    注意目錄名不能有中文和空格。目錄介紹如下:
    bin:二進制執行文件。裏面最常用的文件是startup.bat,如果是 Linux 或 Mac 系統啓動文件爲 startup.sh。
    conf:配置目錄。裏面最核心的文件是server.xml。可以在裏面改端口號等。默認端口號是8080,也就是說,此端口號不能被其他應用程序佔用。
    lib:庫文件。tomcat運行時需要的jar包所在的目錄
    logs:日誌
    temp:臨時產生的文件,即緩存
    webapps:web的應用程序。web應用放置到此目錄下瀏覽器可以直接訪問
    work:編譯以後的class文件。
    接着我們可以雙擊 startup.bat 啓動 Tomcat
    這個時候,本地的服務器就已經搭建起來了。如果想關閉服務器,可以直接關閉上面的窗口,或者在裏面輸入Ctrl+C禁止服務。
    接着我們在瀏覽器中輸入 http://localhost:8080/,表示tomcat安裝成功並且啓動起來了
    ::::::::::::::::::::::::::::::::::::::::::::::::
    JSP 結構
    網絡服務器需要一個JSP引擎,也就是一個容器來處理JSP頁面。容器負責截獲對JSP頁面的請求。本教程使用內嵌JSP容器的Apache來支持JSP開發。
    JSP容器與Web服務器協同合作,爲JSP的正常運行提供必要的運行環境和其他服務,並且能夠正確識別專屬於JSP網頁的特殊元素。
    。。。
    JSP處理
    以下步驟表明了Web服務器是如何使用JSP來創建網頁的:
    -就像其他普通的網頁一樣,您的瀏覽器發送一個HTTP請求給服務器。
    -Web服務器識別出這是一個對JSP網頁的請求,並且將該請求傳遞給JSP引擎。通過使用URL或者.jsp文件來完成。
    -JSP引擎從磁盤中載入JSP文件,然後將它們轉化爲servlet。這種轉化只是簡單地將所有模板文本改用println()語句,並且將所有的JSP元素轉化成Java代碼。
    -JSP引擎將servlet編譯成可執行類,並且將原始請求傳遞給servlet引擎。
    -Web服務器的某組件將會調用servlet引擎,然後載入並執行servlet類。在執行過程中,servlet產生HTML格式的輸出並將其內嵌於HTTP response中上交給Web服務器。
    -Web服務器以靜態HTML網頁的形式將HTTP response返回到您的瀏覽器中。
    -最終,Web瀏覽器處理HTTP response中動態產生的HTML網頁,就好像在處理靜態網頁一樣。
    一般情況下,JSP引擎會檢查JSP文件對應的servlet是否已經存在,並且檢查JSP文件的修改日期是否早於servlet。如果JSP文件的修改日期早於對應的servlet,那麼容器就可以確定JSP文件沒有被修改過並且servlet有效。這使得整個流程與其他腳本語言(比如PHP)相比要高效快捷一些。
    總的來說,JSP網頁就是用另一種方式來編寫servlet而不用成爲Java編程高手。除了解釋階段外,JSP網頁幾乎可以被當成一個普通的servlet來對待。
    :::::::::::::::::::::::::::::::::::::::::::::::
    JSP 生命週期
    理解JSP底層功能的關鍵就是去理解它們所遵守的生命週期。
    JSP生命週期就是從創建到銷燬的整個過程,類似於servlet生命週期,區別在於JSP生命週期還包括將JSP文件編譯成servlet。
    以下是JSP生命週期中所走過的幾個階段:
    編譯階段:servlet容器編譯servlet源文件,生成servlet類
    初始化階段:加載與JSP對應的servlet類,創建其實例,並調用它的初始化方法
    執行階段:調用與JSP對應的servlet實例的服務方法
    銷燬階段:調用與JSP對應的servlet實例的銷燬方法,然後銷燬servlet實例
    。。。
    JSP編譯
    當瀏覽器請求JSP頁面時,JSP引擎會首先去檢查是否需要編譯這個文件。如果這個文件沒有被編譯過,或者在上次編譯後被更改過,則編譯這個JSP文件。
    編譯的過程包括三個步驟:
    解析JSP文件。
    將JSP文件轉爲servlet。
    編譯servlet。
    。。。
    JSP初始化
    容器載入JSP文件後,它會在爲請求提供任何服務前調用jspInit()方法。如果您需要執行自定義的JSP初始化任務,複寫jspInit()方法就行了,就像下面這樣:
    public void jspInit(){
    // 初始化代碼
    }
    一般來講程序只初始化一次,servlet也是如此。通常情況下您可以在jspInit()方法中初始化數據庫連接、打開文件和創建查詢表。
    。。。
    JSP執行
    這一階段描述了JSP生命週期中一切與請求相關的交互行爲,直到被銷燬。
    當JSP網頁完成初始化後,JSP引擎將會調用_jspService()方法。
    _jspService()方法需要一個HttpServletRequest對象和一個HttpServletResponse對象作爲它的參數,就像下面這樣:
    void _jspService(HttpServletRequest request,HttpServletResponse response)
    {
    // 服務端處理代碼
    }
    _jspService()方法在每個request中被調用一次並且負責產生與之相對應的response,並且它還負責產生所有7個HTTP方法的迴應,比如GET、POST、DELETE等等。
    。。。
    JSP清理
    JSP生命週期的銷燬階段描述了當一個JSP網頁從容器中被移除時所發生的一切。
    jspDestroy()方法在JSP中等價於servlet中的銷燬方法。當您需要執行任何清理工作時複寫jspDestroy()方法,比如釋放數據庫連接或者關閉文件夾等等。
    jspDestroy()方法的格式如下:
    public void jspDestroy()
    {
    // 清理代碼
    }
    :::::::::::::::::::::::::::::::::::::::::
    JSP 語法
    。。。
    腳本程序
    腳本程序可以包含任意量的Java語句、變量、方法或表達式,只要它們在腳本語言中是有效的。
    腳本程序的語法格式:<% 代碼片段 %>或者,您也可以編寫與其等價的XML語句,就像下面這樣:
    <jsp:scriptlet>
    代碼片段
    </jsp:scriptlet>
    任何文本、HTML標籤、JSP元素必須寫在腳本程序的外面。
    注意:請確保Apache Tomcat已經安裝在C:\apache-tomcat-7.0.2目錄下並且運行環境已經正確設置。
    將以上代碼保存在hello.jsp中,然後將它放置在 C:\apache-tomcat-7.0.2\webapps\ROOT目錄下,打開瀏覽器並在地址欄中輸入http://localhost:8080/hello.jsp。
    。。。
    JSP聲明
    一個聲明語句可以聲明一個或多個變量、方法,供後面的Java代碼使用。在JSP文件中,您必須先聲明這些變量和方法然後才能使用它們。
    JSP聲明的語法格式:<%! declaration; [ declaration; ]+ ... %> 或者,您也可以編寫與其等價的XML語句,就像下面這樣:
    <jsp:declaration>
    代碼片段
    </jsp:declaration>
    。。。
    JSP表達式
    一個JSP表達式中包含的腳本語言表達式,先被轉化成String,然後插入到表達式出現的地方。
    由於表達式的值會被轉化成String,所以您可以在一個文本行中使用表達式而不用去管它是否是HTML標籤。
    表達式元素中可以包含任何符合Java語言規範的表達式,但是不能使用分號來結束表達式。
    JSP表達式的語法格式:<%= 表達式 %> 同樣,您也可以編寫與之等價的XML語句:
    <jsp:expression>
    表達式
    </jsp:expression>
    。。。
    JSP註釋
    JSP註釋主要有兩個作用:爲代碼作註釋以及將某段代碼註釋掉。
    JSP註釋的語法格式:<%-- 這裏可以填寫 JSP 註釋 --%>
    不同情況下使用註釋的語法規則:
    語法 描述
    <%-- 註釋 --%> JSP註釋,註釋內容不會被髮送至瀏覽器甚至不會被編譯 HTML註釋,通過瀏覽器查看網頁源代碼時可以看見註釋內容 代表靜態 %> 常量 \' 在屬性中使用的單引號 \" 在屬性中使用的雙引號 。。。 JSP指令 JSP指令用來設置與整個JSP頁面相關的屬性。 JSP指令語法格式: 這裏有三種指令標籤: 指令 描述 定義頁面的依賴屬性,比如腳本語言、error頁面、緩存需求等等 包含其他文件 引入標籤庫的定義,可以是自定義標籤 。。。 JSP行爲 JSP行爲標籤使用XML語法結構來控制servlet引擎。它能夠動態插入一個文件,重用JavaBean組件,引導用戶去另一個頁面,爲Java插件產生相關的HTML等等。 行爲標籤只有一種語法格式,它嚴格遵守XML標準: 行爲標籤基本上是一些預先就定義好的函數,下面羅列出了一些可用的JSP行爲標籤:: 語法 描述 jsp:include 用於在當前頁面中包含靜態或動態資源 jsp:useBean 尋找和初始化一個JavaBean組件 jsp:setProperty 設置 JavaBean組件的值 jsp:getProperty 將 JavaBean組件的值插入到 output中 jsp:forward 從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象 jsp:plugin 用於在生成的HTML頁面中包含Applet和JavaBean對象 jsp:element 動態創建一個XML元素 jsp:attribute 定義動態創建的XML元素的屬性 jsp:body 定義動態創建的XML元素的主體 jsp:text 用於封裝模板數據 。。。 JSP隱含對象 JSP支持九個自動定義的變量,江湖人稱隱含對象。這九個隱含對象的簡介見下表: 對象 描述 request HttpServletRequest類的實例 response HttpServletResponse類的實例 out PrintWriter類的實例,用於把結果輸出至網頁上 session HttpSession類的實例 application ServletContext類的實例,與應用上下文有關 config ServletConfig類的實例 pageContext PageContext類的實例,提供對JSP頁面所有對象以及命名空間的訪問 page 類似於Java類中的this關鍵字 Exception Exception類的對象,代表發生錯誤的JSP頁面中對應的異常對象 。。。 控制流語句 JSP提供對Java語言的全面支持。您可以在JSP程序中使用Java API甚至建立Java代碼塊,包括判斷語句和循環語句等等。 。。。 判斷語句 If…else塊 。。。 循環語句 在JSP程序中可以使用Java的三個基本循環類型:for,while,和 do…while。 。。。 JSP運算符 JSP支持所有Java邏輯和算術運算符。 下面羅列出了JSP常見運算符,優先級從高到底: 類別 操作符 結合性 後綴 () [] . (點運算符) 左到右 一元 ++ - - ! ~ 右到左 可乘性 * / % 左到右 可加性 + - 左到右 移位 >> >>> << 左到右 關係 > >= < <= 左到右 相等/不等 == != 左到右 位與 & 左到右 位異或 ^ 左到右 位或 | 左到右 邏輯與 && 左到右 邏輯或 || 左到右 條件判斷 ?: 右到左 賦值 = += -= *= /= %= >>= <<= &= ^= |= 右到左 逗號 , 左到右 。。。 JSP常量 JSP語言定義了以下幾個常量: -布爾值(boolean):true 和 false; -整型(int):與Java中的一樣; -浮點型(float):與Java中的一樣; -字符串(string):以單引號或雙引號開始和結束; -Null:null。 ::::::::::::::::::::::::::::::::::: JSP 指令 JSP指令用來設置整個JSP頁面相關的屬性,如網頁的編碼方式和腳本語言。 語法格式如右: 指令可以有很多個屬性,它們以鍵值對的形式存在,並用逗號隔開。 JSP中的三種指令標籤: 指令 描述 定義網頁依賴屬性,比如腳本語言、error頁面、緩存需求等等 包含其他文件 引入標籤庫的定義 。。。 Page指令 Page指令爲容器提供當前頁面的使用說明。一個JSP頁面可以包含多個page指令。 Page指令的語法格式: 等價的XML格式: 。。。 屬性 下面列出與Page指令相關的屬性: 屬性 描述 buffer 指定out對象使用緩衝區的大小 autoFlush 控制out對象的 緩存區 contentType 指定當前JSP頁面的MIME類型和字符編碼 errorPage 指定當JSP頁面發生異常時需要轉向的錯誤處理頁面 isErrorPage 指定當前頁面是否可以作爲另一個JSP頁面的錯誤處理頁面 extends 指定servlet從哪一個類繼承 import 導入要使用的Java類 info 定義JSP頁面的描述信息 isThreadSafe 指定對JSP頁面的訪問是否爲線程安全 language 定義JSP頁面所用的腳本語言,默認是Java session 指定JSP頁面是否使用session isELIgnored 指定是否執行EL表達式 isScriptingEnabled 確定腳本元素能否被使用 。。。 Include指令 JSP可以通過include指令來包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是該JSP文件的一部分,會被同時編譯執行。 Include指令的語法格式如右: Include指令中的文件名實際上是一個相對的URL。如果您沒有給文件關聯一個路徑,JSP編譯器默認在當前路徑下尋找。 等價的XML語法: 。。。 Taglib指令 JSP API允許用戶自定義標籤,一個自定義標籤庫就是自定義標籤的集合。 Taglib指令引入一個自定義標籤集合的定義,包括庫路徑、自定義標籤。 Taglib指令的語法: uri屬性確定標籤庫的位置,prefix屬性指定標籤庫的前綴。 等價的XML語法: :::::::::::::::::::::::::::::::::::::: JSP 動作元素 與JSP指令元素不同的是,JSP動作元素在請求處理階段起作用。JSP動作元素是用XML語法寫成的。 利用JSP動作可以動態地插入文件、重用JavaBean組件、把用戶重定向到另外的頁面、爲Java插件生成HTML代碼。 動作元素只有一種語法,它符合XML標準: 動作元素基本上都是預定義的函數,JSP規範定義了一系列的標準動作,它用JSP作爲前綴,可用的標準動作元素如下: 語法 描述 jsp:include 在頁面被請求的時候引入一個文件。 jsp:useBean 尋找或者實例化一個JavaBean。 jsp:setProperty 設置JavaBean的屬性。 jsp:getProperty 輸出某個JavaBean的屬性。 jsp:forward 把請求轉到一個新的頁面。 jsp:plugin 根據瀏覽器類型爲Java插件生成OBJECT或EMBED標記。 jsp:element 定義動態XML元素 jsp:attribute 設置動態定義的XML元素屬性。 jsp:body 設置動態定義的XML元素內容。 jsp:text 在JSP頁面和文檔中使用寫入文本的模板 。。。 常見的屬性 所有的動作要素都有兩個屬性:id屬性和scope屬性。 id屬性:id屬性是動作元素的唯一標識,可以在JSP頁面中引用。動作元素創建的id值可以通過PageContext來調用。 scope屬性:該屬性用於識別動作元素的生命週期。 id屬性和scope屬性有直接關係,scope屬性定義了相關聯id對象的壽命。 scope屬性有四個可能的值: (a) page, (b)request, (c)session, 和 (d) application。 動作元素 動作元素用來包含靜態和動態的文件。該動作把指定文件插入正在生成的頁面。語法格式如右: 前面已經介紹過include指令,它是在JSP文件被轉換成Servlet的時候引入文件,而這裏的jsp:include動作不同,插入文件的時間是在頁面被請求的時候。 以下是include動作相關的屬性列表。 屬性 描述 page 包含在頁面中的相對URL地址。 flush 布爾屬性,定義在包含資源前是否刷新緩存區。 。。。 動作元素 jsp:useBean動作用來裝載一個將在JSP頁面中使用的JavaBean。 這個功能非常有用,因爲它使得我們既可以發揮Java組件重用的優勢,同時也避免了損失JSP區別於Servlet的方便性。 jsp:useBean動作最簡單的語法爲: 在類載入後,我們既可以通過 jsp:setProperty 和 jsp:getProperty 動作來修改和檢索bean的屬性。 以下是useBean動作相關的屬性列表: 屬性 描述 class 指定Bean的完整包名。 type 指定將引用該對象變量的類型。 beanName 通過 java.beans.Beans 的 instantiate() 方法指定Bean的名字。 。。。 動作元素 jsp:setProperty用來設置已經實例化的Bean對象的屬性,有兩種用法。首先,你可以在jsp:useBean元素的外面(後面)使用jsp:setProperty,如下所示: ... 此時,不管jsp:useBean是找到了一個現有的Bean,還是新創建了一個Bean實例,jsp:setProperty都會執行。第二種用法是把jsp:setProperty放入jsp:useBean元素的內部 如下所示: ... 此時,jsp:setProperty只有在新建Bean實例時纔會執行,如果是使用現有實例則不執行jsp:setProperty。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章