JSP基礎知識

JSP
一、概述
Java Server Pages,中文名叫java服務器頁面,其根本是一個簡化的Servlet設計。
二、執行過程
JSP基礎知識
三、JSP文件結構及主要標籤

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.*“ %>
...
<HTML>
  <BODY>
其他 HTML 語言
<%
  符合JAVA 語法的 JAVA 語句
%>

  其他 HTML 語言

  </BODY>
</HTML>

四、內置對象
1、request
request 對象是 javax.servlet.httpServletRequest類型的對象。 該對象代表了客戶端的請求信息,主要用於接受通過HTTP協議傳送到服務器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對象的作用域爲一次請求。
2、response
response 代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內有效。
3、session
(1)session:從一個客戶打開瀏覽器並連接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱爲一個會話。當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間反覆連接,反覆刷新一個頁面,服務器應當通過某種辦法知道這是同一個客戶,這就需要session對象。
(2)session對象的ID:當一個客戶首次訪問服務器上的一個JSP頁面時,JSP引擎產生一個session對象,同時分配一個String類型的ID號,JSP引擎同時將這個ID號發送到客戶端,存放在Cookie中,這樣session對象和客戶之間就建立了一一對應的關係。當客戶再訪問連接該服務器的其他頁面時,不再分配給客戶新的session對象,直到客戶關閉瀏覽器後,服務器端該客戶的session對象才取消,並且和客戶的會話對應關係消失。當客戶重新打開瀏覽器再連接到該服務器時,服務器爲該客戶再創建一個新的session對象。
(3)session對象存在一定時間過期問題,所以存在session中的名值對會在一定時間後失去,可以通過更改session有效時間來避免這種情況。同時編程時儘量避免將大量有效信息存儲在session中,request是一個不錯的替代對象。
4、application
(1)概述:
服務器啓動後就產生了這個application對象,當客戶在所訪問的網站的各個頁面之間瀏覽時,這個application對象都是同一個,直到服務器關閉。但是與session不同的是,所有客戶的application對象都是同一個,即所有客戶共享這個內置的application對象。
(2)application對象常用方法:
a、public void setAttribute(String key,Object obj): 將參數Object指定的對象obj添加到application對象中,併爲添加的對象指定一個索引關鍵字。
b、public Object getAttribute(String key): 獲取application對象中含有關鍵字的對象。
5、out
out 對象用於在Web瀏覽器內輸出信息,並且管理應用服務器上的輸出緩衝區。在使用 out 對象輸出數據時,可以對數據緩衝區進行操作,及時清除緩衝區中的殘餘數據,爲其他的輸出讓出緩衝空間。待數據輸出完畢後,要及時關閉輸出流。
6、page
page 對象代表JSP本身,只有在JSP頁面內纔是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,類似於Java編程中的 this 指針。
7、config
config 對象的主要作用是取得服務器的配置信息。通過 pageContext對象的 getServletConfig() 方法可以獲取一個config對象。當一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。 開發者可以在web.xml 文件中爲應用程序環境中的Servlet程序和JSP頁面提供初始化參數。
8、exception
java.lang.Throwable 的實例,該實例代表其他頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性爲true 時,該對象纔可以使用。常用的方法有getMessage()和printStackTrace()等。
9、pageContext
pageContext 對象的作用是取得任何範圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的創建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。

五、JSP語法概述

JSP原始代碼中包含了JSP元素和Template(模板) data兩類 ,
Template data指的是JSP引擎不處理的部分,即標記<%……%>以外的部分,例如代碼中的HTML的內容等 ,這些數據會直接傳送到客戶端的瀏覽器
JSP元素則是指將由JSP引擎直接處理的部分,這一部分必須符合JSP語法,否則會導致編譯錯誤。
JSP語法分爲三種不同的類型
1、編譯器指令(DIRECTIVE) 例如: <%@ page import=“java.io.*” %>
編譯器指令包括“包含指令”, “頁指令”和“taglib指令”
它們包含在“<%@ %>”卷標裏。
兩個主要的指令是page與include。
(1)包含指令
include指令:向當前頁中插入一個靜態文件的內容。
JSP 語法格式如下:<%@ include file="relativeURL" %> 或<%@ include file="相對位置" %>
(2)頁指令
“Page”指令用於定義JSP文件中的全局屬性。
JSP 語法格式如下:

<%@ page 
[ language="java" ] 
[ extends="package.class" ] 
[import="{package.class | package.*},..." ] 
[ session="true | false" ] 
[ buffer="none | 8kb | sizekb" ] 
[ autoFlush="true | false" ] 
 [ isThreadSafe="true | false" ] 
 [ info="text" ] 
 [ errorPage="relativeURL" ] 
[ contentType="mimeType 
    [;charset=characterSet]" | "text/html
    ; charset=ISO-8859-1" ] 
[ isErrorPage="true | false" ] 
%> 

屬性:
a.language="java"
聲明腳本語言的種類,目前只能用"java" 。
b.import="{package.class | package. },..."
需要導入的Java包的列表,這些包作用於程序段,表達式,以及聲明。下面的包在JSP編譯時已經導入了,所以就不需要再指明瞭:
java.lang.
javax.servlet. javax.servlet.jsp. javax.servlet.http.*
c.errorPage="relativeURL"
設置處理異常事件的JSP文件。
d.isErrorPage="true | false"
設置此頁是否爲出錯頁,如果被設置爲true,你就能使用exception對象
“<%@ page %>”指令作用於整個JSP頁面,同樣包括靜態的包含文件。但是“<%@ page %>”指令不能作用於動態的包含文件,比如 “<jsp:include>”。
可以在一個頁面中用上多個“<%@ page %>”指令,但是其中的屬性只能用一次,不過也有例外,那就是import屬性。因爲import屬性和Java中的import語句類似(參照Java Language,import語句引入得是Java語言中的類),所以此屬性就能多用幾次。
(4)taglib指令
JSP語法
<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
用於引入定製標籤庫
屬性
a.uri="URIToTagLibrary"
Uniform Resource Identifier (URI)根據標籤的前綴對自定義的標籤進行唯一的命名,URI可以是以下的內容:
Uniform Resource Locator (URL), 由 RFC 2396 定義, 可以從以下位置查看 (http://www.hut.fi/u /jkorpela/rfc/2396/full.html)。
 Uniform Resource Name (URN), 由 RFC 2396定義 一個相對或絕對的路徑 可以是標籤庫描述文件。
b.prefix="tagPrefix"
表示標籤在JSP中的名稱。
在自定義標籤之前的前綴,比如,在<public:loop>中的public,如果這裏不寫public,那麼這就是不合法的。請不要用jsp, jspx, java, javax, servlet, sun, 和sunw做爲你的前綴,這些已被Sun公司聲明保留。
2、腳本語法(SCRIPTING)
(1)“HTML註釋”:<!— comments -->
JSP 語法格式如下:

或 這種註釋發送到客戶端,但不直接顯示,在源代碼中可以查看到。 (2)“隱藏註釋”: JSP 語法格式:  不發送到客戶端。 (3)“聲明” JSP 語法格式如下: 或 (4)“表達式” 用於在頁面上輸出信息,語法格式如下: 或 (5)“腳本段” JSP 語法格式如下: 或 3、動作語法(ACTION) 例如: 動作語法包括。 (1) JSP 語法格式如下: a."} /> b."} > [] (“[]”指可以有多個“”標記。) 屬性: a、page="{relativeURL | }" 這裏是一個表達式或是一個字符串用於說明你將要定向的文件或URL。這個文件可以是JSP,程序段,或者其它能夠處理request對象的文件(如asp,cgi,php)。 b. 向一個動態文件發送一個或多個參數,這個文件必須是動態文件。如果想傳遞多個參數,可以在一個JSP文件中使用多個“”;“name”指定參數名,“value”指定參數值。 注意: “”標籤從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象。“”標籤以後的代碼,將不能執行。 (2) 包含一個靜態或動態文件.  JSP 語法格式如下: a. b. [] (“[]”指可以有多個“”標記。) 屬性: a.page="{relativeURL | }" 參數爲一相對路徑,或者是代表相對路徑的表達式。 b.flush="true" 這裏必須使用flush="true",不能使用false值。而缺省值爲false 。  (3) 創建一個Bean實例並指定它的名字和作用範圍。  JSP 語法格式如下: ``` |             > other elements         } ``` 屬性 a.id="beanInstanceName" 在所定義的範圍中確認Bean的變量,使之能在後面的程序中使用此變量名來分辨不同的Bean ,這個變量名對大小寫敏感,必須符合所使用的腳本語言的規定,這個規定在Java Language 規範已經寫明。如果Bean已經在別的“”標記中創建,則當使用這個已經創建過Bean時,id的值必須與原來的那個id值一致;否則則意味着創建了同一個類的兩個不同的對象。  b.scope="page | request | session | application" Bean存在的範圍以及id變量名的有效範圍。缺省值是page,以下是詳細說明: page - 能在包含“”元素的JSP文件以及此文件中的所有靜態包含文件中使用這個Bean,直到頁面執行完畢向客戶端發回響應或轉到另一個文件爲止。 request - 在任何執行相同請求的Jsp文件中使用這個Bean,直到頁面執行完畢向客戶端發回響應或轉到另一個文件爲止。能夠使用Request對象訪問這個Bean,比如request.getAttribute(beanInstanceName)。 session - 從創建Bean開始,就能在任何使用相同session的jsp文件中使用這個Bean。這個Bean存在於整個Session生存週期內,任何在分享此Session的Jsp文件都能使用同一Bean。注意在創建這個Bean的Jsp文件中“”指令中必須指定“session="true"”。 application - 從創建Bean開始,就能在任何使用相同application的Jsp文件中使用Bean。這個Bean存在於整個application生存週期內,任何在分享此application的Jsp文件都能使用同一Bean. c.beanName="{package.class | }" type="package.class" 使用java.beans.Beans.instantiate方法來從一個class或串行化的模板中實例化一個Bean,同時指定Bean的類型。 Beans.instantiate方法將檢查此名稱是否表示一個類或一個串行化模板。如果這個Bean是被串行化的,那麼Beans.instantiate方法將通過使用一個類裝載器讀取串行化格式(類似package.class.ser)。 beanName可以是package和class,也可以是表達式,它的值會傳給Beans.instantiate方法。type的值可以和Bean相同,也可以是它的基類,或者是它所實現的接口。  package和 class 名字區分大小寫。 (4) JSP 語法格式如下:  屬性: a.name="beanInstanceName" bean的名字,由指定。 b.property="propertyName" 所指定的Bean的屬性名。 (5) 設置Bean的屬性值.  JSP 語法格式如下: ``` ”中創建的Bean實例的名字。 b.property="*" 儲存用戶在jsp輸入的所有值,用於匹配Bean中的屬性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章