JSP
一、概述
Java Server Pages,中文名叫java服務器頁面,其根本是一個簡化的Servlet設計。
二、執行過程
三、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 語法格式如下: