HTML網頁基礎語言

Download Report

Transcript HTML網頁基礎語言

第4章 JSP元素與隱含物件








4-1
4-2
4-3
4-4
4-5
4-6
4-7
4-8
JSP的腳本元素
JSP的指引元素
JSP的動作元素
JSP的隱含物件
Servlet相關的page和config物件
out物件的輸出與緩衝區處理
response物件的標頭和快取處理
物件範圍的變數存取
4-1 JSP的腳本元素



4-1-1 JSP腳本元素的基礎
4-1-2 Declarations元素 – 宣告變數
4-1-3 Declarations元素 – 宣告Java方法
4-1 JSP的腳本元素

JSP程式檔案的內容主要分為HTML標籤的範本本
文和JSP元素兩大部分,如下所示:
• 範本本文(Template Text):這部分是直接送到
客戶端瀏覽程式顯示的資料,主要是指靜態網頁內容
的HTML標籤或一般文字內容,用來作為網頁內容的範
本(因為我們是在HTML標籤中插入動態顯示的JSP元
素)。
• JSP元素(JSP Elements):JSP元素是JSP容器
需要處理或翻譯成Servlet程式碼的部分,可以分為腳
本元素(Scripting Elements)、指引元素
(Directive Elements)和動作元素(Action
Elements)三種。
4-1-1 JSP腳本元素的基礎-說明

JSP程式架構是為了方便我們開發Servlet
程式,所以JSP程式需要翻譯成Servlet類
別檔的程式碼,然後在Servlet容器編譯和
執行,翻譯成的Servlet程式檔案是一個類
別檔案,Resin是繼承自JavaPage類別,
Tomcat是繼承自HttpJspBase類別,這兩
個類別都實作Servlet介面。
4-1-1 JSP腳本元素的基礎-Servlet
類別檔

JSP腳本元素(Scripting Elements)翻
譯成Servlet類別檔的說明,如下所示:
• Expression和Scriptlets元素:Java程式
碼片斷是翻譯成置於_jspService()方法之中
的程式碼。
• Declarations元素:翻譯成類別的實例變數
和方法(或稱為物件屬性)。
4-1-1 JSP腳本元素的基礎-呼叫過程

Servlet類別的_jspService()方法並不能覆寫
(Overridden),不過我們可以在
Declarations元素宣告jspInit()和jspDestroy()
方法來初始JSP和結束JSP的執行,如下圖所示:
4-1-1 JSP腳本元素的基礎-處理
HTTP請求和回應

因為Servlet支援多執行緒,各執行緒的
_jspService()方法都可以負責處理HTTP請求和
回應,如下圖所示:
4-1-2 Declarations元素 – 宣告變
數(說明)

JSP的Declarations元素是位在"<%!"和
"%>"符號之間的程式碼,Declarations
元素並不會產生輸出,其宣告的變數將翻
譯成Servlet的實例變數,如下所示:
<%!
int pageCount = 0;
%>
4-1-2 Declarations元素 – 宣告變
數(範圍)

對比在Scriptlets元素宣告的變數,以
Servlet類別檔來說,如下所示:
• Declarations元素宣告的變數:Servlet實
例的全域變數,所有提出請求同一頁JSP程式
的每位使用者都可以存取這些變數。
• Scriptlets元素宣告的變數:_jspService()
方法的區域變數,只有請求JSP程式的這位使
用者可以存取此變數。
4-1-3 Declarations元素 – 宣告
Java方法(說明)

JSP程式的Declarations元素還可以宣告
Java方法(在Scriptlets元素不可以宣告方
法,因為程式碼會轉換置於_jspService()
方法),不過在使用上有一些限制,宣告
的方法並不能直接存取本章後的JSP隱含物
件,換句話說,我們只能用來建立JSP程式
所需的一些工具函數。
4-1-3 Declarations元素 – 宣告Java
方法(範例)

在Declarations元素宣告的方法是翻譯成
Servlet的實例方法。例如:溫度轉換的
convert()方法,如下所示:
<%!
double convert(double c) {
double f;
f = (9.0 * c) / 5.0 + 32.0;
return f;
}
%>
4-2 JSP的指引元素



4-2-1 page指引元素
4-2-2 include指引元素
4-2-3 taglib指引元素
4-2 JSP的指引元素

JSP指引元素可以提供JSP程式的特殊資訊
給伺服端的JSP容器,JSP提供多種指引元
素:page、include和taglib等,其語法格
式,如下所示:
<%@ directive attribute1="value1"
attribute2="value2"
………
attributeN="valueN"%>

directive是指引元素指令,attribute1~N
是指令的屬性,如有多個請以空白字元分
隔,value1~N是對應的屬性值。
4-2-1 page指引元素-說明1

page指引元素是指定JSP程式的相關處理資訊,
提供屬性設定JSP容器的相關參數,如下表:
屬性
language
說明
指定 JSP 程式使用的腳本
語言,預設是 Java 語言
contentType 指定 JSP 程式的文件類型
和語系,使用 MIME 型態
extends
指定 JSP 容器轉換成
Servlet 程式的父類別
import
在 JSP 程式匯入所需的
Java 套件,即 Java API
session
設定 JSP 程式是否使用
Session,屬性值為 true 或
false,預設值為 true
範例
<%@ page language="java"%>
<%@ page contentType="text/html;
charset=Big5"%>
<%@ page extends="com.Tag"%>
<%@ page import="java.util.*"%>
<%@ page session="false"%>
4-2-1 page指引元素-說明2
屬性
buffer
說明
範例
<%@ page buffer="none"%>
設定 JSP 容器輸出的緩衝
區大小,預設值是 8kb,none
為不使用
autoFlush 當緩衝區已滿,是否自動
<%@ page autoFlush="true"%>
送出緩衝區內容,預設值
為 true 自動送出
isThreadSafe 指定 Servlet 是否支援多執 <%@ page isThreadSafe="true"%>
行緒,如為 false,Servlet
將實作 SingleThreadModel
介面,每一個 Servlet 實例
只能處理單一的請求
info
在 JSP 程式新增相關資訊, <%@ page info="copyright 2004"%>
例如:作者和版本的版權
宣告
4-2-1 page指引元素-說明3
屬性
errorPage
說明
範例
指定其它 JSP 程式來進行 <%@ page errorPage="error.jsp"%>
錯誤處理
isErrorPage 旗標屬性指定 JSP 程式是 <%@ page isErrorPage="true"%>
否是錯誤處理程式,true
為是,表示此 JSP 程式可
以存取隱含物件 exception
isELIgnored JSP 程式是否執行運算式 <%@ page isELIgnored="true"%>
語言(Expression
Language,EL)
,true 為不
執行,預設值為 false
4-2-1 page指引元素-contentType屬
性
page指引元素常用的屬性有contentType和
import屬性,對於中文內容的網頁,JSP程式可
以使用contentType屬性指定網頁編碼為中文
Big5,如下所示:
<%@ page contentType="text/html;
charset=Big5"%>
 指定網頁編碼為Big5一般來說可解決大部分中文
亂碼的問題,如果網頁中仍然顯示中文亂碼,請
更改charset為微軟中文編碼MS950,如下:
<%@ page contentType="text/html;
charset=MS950"%>

4-2-1 page指引元素-import屬性
雖然JSP程式在編譯時即預設匯入一些常用的
Java套件,所以JSP程式可以建立陣列、執行字
串處理和使用Math類別,如果不是預設匯入的套
件,在使用前,JSP程式需要匯入所需的Java套
件,例如:日期/時間的Date類別需要匯入
java.util.*套件,如下所示:
<%@ page import="java.util.*"%>
 上述程式碼是JSP的指引元素page,使用import
屬性匯入java.util.*套件,如此在JSP程式就可
以使用Date類別建立Date物件,如下所示:
Date today = new Date();

4-2-2 include指引元素
JSP的include指引元素可以在JSP程式插入其它
檔案,這是在翻譯成Servlet階段進行的檔案插入,
通常是使用在網站共通部分的導覽、表格、標題
列、頁首或頁尾,以便網站擁有一致的網頁外觀。
 include指引元素主要是用來取代SSI(Server
Side Include)指令#include。例如:在首尾插
入版權宣告的網頁,副檔名通常是.jspf、.jsf
或.inc,如下所示:.
<%@ include file="copyright.inc"%>
<%@ include file="navigation.jsp"%>

4-2-3 taglib指引元素

JSP的taglib指引元素可以指定JSP程式使
用的自訂標籤庫,標籤庫是用來定義自訂
標籤(Custom Tags),這是JSP 1.1版
新增的功能,可以讓JSP程式的開發者隱藏
複雜的程式碼,直接使用自訂的XML標籤
來執行相關功能,其基本語法如下所示:
<%@ taglib uri="標籤庫的URI" prefix="標
籤字首"%>
4-3 JSP的動作元素




4-3-1 JavaBeans的動作元素
4-3-2 <jsp:include>與<jsp:param>
元素
4-3-3 <jsp:forward>與<jsp:param>
元素
4-3-4 <jsp:plugin>、<jsp:params>
和<jsp:fallback>元素
4-3 JSP的動作元素

JSP的動作元素在JSP 2.0版新增到二十多個,依
版本和功能可以分為數種,如下所示:
• 標準動作元素(Standard Action
Elements):標準動作元素是JSP 1.2版就
存在的動作元素。
• JSP文件(JSP Document)的動作元素:
JSP文件的動作元素是用來建立XML格式的
JSP程式,這是使用XHTML和JSP元素所建立
的JSP程式。
• 標籤檔(Tag File)的動作元素:標籤檔的動
作元素是只能在標籤檔使用的動作元素,這也
是JSP 2.0版新增的元素。
4-3-1 JavaBeans的動作元素<jsp:useBean>元素



JavaBeans的動作元素是用來存取JavaBeans元
件,在這一節筆者只準備簡易說明其基本語法,
詳細的使用說明請參閱第10章。
<jsp:useBean>動作元素可以在JSP程式宣告和
初始化JavaBeans元件,其基本語法如下所示:
<jsp:useBean id="name"
class="package.class" scope="page"/>
上述元素屬性id是參考JavaBean的變數名稱,
class屬性指定JavaBean的完整套件名稱,
scope屬性指定物件範圍。
4-3-1 JavaBeans的動作元素<jsp:setProperty>元素

<jsp:setProperty>動作元素可以指定
JavaBean的屬性值,其基本語法如下所示:
<jsp:setProperty name="beans_name"
property="property_name"
value="property_value"/>

上述元素屬性name是對應
<jsp:useBean>元素載入JavaBeans的
id屬性,property屬性是指定的屬性名稱,
value是屬性值。
4-3-1 JavaBeans的動作元素<jsp:getProperty>元素

<jsp:getProperty>動作元素可以取得
JavaBean指定的屬性值,其基本語法如下
所示:
<jsp:getProperty name="beans_name"
property="property_name"/>

上述元素屬性name是對應
<jsp:useBean>元素載入JavaBeans的
id屬性,property屬性是取得的屬性名稱。
4-3-2 <jsp:include>與
<jsp:param>元素-說明

<jsp:include>動作元素是在JSP程式的執行階
段插入檔案,我們可以將它視為是再將HTTP請求
轉址到其它HTML文件或JSP程式,如下圖所示:
4-3-2 <jsp:include>與
<jsp:param>元素-語法


<jsp:include>動作元素轉址的檔案只要能夠處
理HTTP請求/回應即可,所以可以使用靜態
HTML文件、JSP程式、Servlets、ASP或
ASP.NET程式。<jsp:include>動作元素的基本
語法,如下所示:
<jsp:include page="relative URL |
<%=Expression%>" flush="true |
false"/>
上述<jsp.include>動作元素擁有2個屬性,
page是相對路徑的URL網址或Expression元素,
flush屬性值在JSP 1.2版前一定是true,2.0版
可以是true或false,true表示當緩衝區已滿時,
送出緩衝區內容。
4-3-2 <jsp:include>與
<jsp:param>元素-傳遞參數
<jsp:include>動作元素可以使用
<jsp:param>動作元素傳遞HTTP請求的參數到
目地文件,如下所示:
<jsp:include page="included.jsp"
flush="true">
<jsp:param name="cols" value="6" />
<jsp:param name="rows" value="4" />
</jsp:include>

4-3-2 <jsp:include>與<jsp:param>
元素-取得參數
<jsp:param>動作元素傳遞的參數是使用
request隱含物件的getParameter()方法來取得
參數值的字串,如下所示:
int rows = Integer.parseInt(
request.getParameter("rows"));
int cols = Integer.parseInt(
request.getParameter("cols"));
 上述程式碼getParameter()方法的參數字串就
是參數名稱,Integer.parseInt()是Math類別的
類別方法,可以將字串轉換成整數。

4-3-3 <jsp:forward>與
<jsp:param>元素
<jsp:forward>動作元素可以將網頁請求轉址到
其它HTML文件或JSP程式,也就是任何合法的
URL網址,其基本語法如下所示:
<jsp:forward page="relative URL |
<%=Expression%>"/>
 同樣的,<jsp:forward>動作元素也可以使用
<jsp:param>動作元素來傳遞參數,如下所示:
<jsp:forward page="included.jsp">
<jsp:param name="cols" value="6" />
<jsp:param name="rows" value="4" />
</jsp:forward>

4-3-4 <jsp:plugin>、<jsp:params>
和<jsp:fallback>元素-說明

<jsp:plugin>動作元素可以在瀏覽程式插
入物件,通常是用來插入Java Applet或
JavaBeans,相當於是HTML的
<OBJECT>、<APPLET>或<EMBED>
標籤。
4-3-4 <jsp:plugin>、<jsp:params>和
<jsp:fallback>元素-語法
<jsp:plugin type="bean | applet"
code="物件的檔案名稱路徑"
codebase="物件的基礎路徑"
align="對齊方式"
archive="其它相關檔案的清單"
height="顯示高度"
hspace="水平間距"
vspace="垂直間距"
width="顯示寬度"
jversion="JRE的版本"
name="物件名稱"
nspluginurl="Netscapte需要使用的Plugin下載位址"
iepluginurl="IE需要使用的Plugin下載位址">
<jsp:params>
<jsp:param name="參數名稱1" value="參數值1"/>
………..
<jsp:param name="參數名稱N" value="參數值N"/>
</jsp:params>
<jsp:fallback>瀏覽程式並不支援物件的顯示</jsp:fallback>
</jsp:plugin>
4-3-4 <jsp:plugin>、<jsp:params>和
<jsp:fallback>元素-範例
在JSP程式插入TestApplet.class的Java Applet,
傳遞Inc和Offset參數,如下所示:
<jsp:plugin type="applet"
code="TestApplet.class"
width="300" height="160">
<jsp:params>
<jsp:param name="Inc" value="20"/>
<jsp:param name="Offset"
value="25"/>
</jsp:params>
<jsp:fallback>載入Java Applet失
敗....</jsp:fallback>
</jsp:plugin>

4-4 JSP的隱含物件


4-4-1 隱含物件(Implicit Objects)
4-4-2 物件範圍(Object Scope)
4-4-1 隱含物件-說明


在JSP 2.0版定義9種隱含物件(Implicit
Objects) :application、session、
page、pageContext、out、request、
response、config和exception。
JSP的隱含物件可以直接在Expression和
Scriptlets元素的Java程式碼使用,而不用
自行建立這些物件,這是因為JSP程式在翻
譯成Servlet類別檔時,_jspService()方
法預設傳入隱含物件request和response
參數,並且在方法開頭依序取得這些隱含
物件的變數。
4-4-1 隱含物件-物件說明
變數
application
對應的類別與介面
javas.servlet.ServletContext
說明
取得伺服器的系統環境變數和建立所
有使用者的共用資料
session
javax.servlet.http.HttpSession
JSP 的 Session 處理物件
page
java.lang.Object(Tomcat)
這是目前請求和正在處理的 JSP 程式,
javax.servlet.Servlet(Resin)
相當於 Java 語言的 this
pageContext java.servlet.jsp.PageContext(Tomcat) 提供單一 API 介面可以取得所有隱含
com.caucho.jsp.PageContextImpl(Resin) 物件的屬性值,也就是目前網頁的狀
態
out
javax.servlet.jsp.JspWriter
輸出串流,輸出到客戶端瀏覽程式顯
示
request
javax.servlet.ServletRequest
取得客戶端請求的相關資訊,包含參
數、方法 Cookie 和 HTTP 標頭資訊
response
javax.servlet.ServletResponse
回應客戶端請求的狀態碼、標頭和
Cookie 等資訊
config
javax.servlet.ServletConfig
JSP 程式翻譯成 Servlet 初始資訊的相
關參數
exception
java.lang.Throwable
JSP 的錯誤處理物件
4-4-2 物件範圍-說明


JSP程式的物件範圍(Object Scope)簡稱範圍
(Scope),這是JSP組織Web應用程式各種資
料(物件)的方法,大部分是指上一節建立的隱
含物件或第5章的EL隱含物件。例如:有些物件
屬於整個Web應用程式的Application範圍,有
些物件是使用者專屬的Session範圍。
在JSP程式的物件可能是使用者以Java程式碼建
立、JSP指引元素或動作元素等所建立的物件,
例如:<jsp:include>和<jsp:forward>元素傳
遞的參數就會建立request物件。
4-4-2 物件範圍-圖例

在JSP程式的物件依其生命周期(Life-Cycles)
區分為四種物件範圍:Application、Session、
Request和Page範圍,如下圖所示:
4-4-2 物件範圍-範圍說明1


Application範圍(Application Scope):
Application範圍的物件只需屬於同一個Web應
用程式的生命周期,直到卸除Web應用程式或
JSP容器關機前的JSP程式都可以存取,這是最大
的物件範圍。JSP的application隱含物件所建立
的變數就屬於此範圍,關於Web應用程式的說明
請參閱第8章。
Session範圍(Session Scope):Session
範圍的物件只需屬於同一個交談期(Session)
生命周期的JSP程式都可以存取。JSP的session
隱含物件所建立的變數就是屬於此範圍,關於交
談期的進一步說明請參閱第8章。
4-4-2 物件範圍-範圍說明2


Request範圍(Request Scope):HTTP請
求所產生的物件,因為HTTP請求是從一頁JSP程
式到另一個JSP程式(例如:<jsp:include>和
<jsp:forward>動作元素),所以其生命周期可
以跨越2頁JSP程式,之後就消失,除非持續使用
HTTP請求,如此才能跨過多頁JSP程式。JSP的
request隱含物件屬於此範圍。
Page範圍(Page Scope):在目前JSP程式
所建立的物件,也只有目前JSP程式可以存取,
這是最小的物件範圍。JSP的page、
pageContext、response、out、config和
exception隱含物件都屬於此範圍。
4-5 Servlet相關的page和config
物件


4-5-1 page隱含物件
4-5-2 config隱含物件
4-5-1 page隱含物件


JSP的page隱含物件代表翻譯成Servlet類
別檔的Servlet類別,在Tomcat伺服器是
java.lang.Object類別的物件,Resin伺服
器是javax.servlet.Servlet類別的物件。
在JSP程式很少會直接使用page物件,我
們通常只會使用page物件的
getServletInfo()方法來取得page指引元
素的info屬性值,如下所示:
<%= page.getServletInfo() %>
4-5-2 config隱含物件-說明


JSP的config隱含物件可以取得JSP程式轉
換成Servlet初始資訊的相關參數,屬於
javax.servlet.ServletConfig類別的物件。
目前JSP程式並沒有辦法直接取得Servlet
初始資訊的相關參數,除非先編譯JSP程式
成為Servlet,然後將它註冊成為Servlet
容器的Servlet程式。如此,編譯成
Servlet的JSP程式才能夠取得Servlet初始
資訊的參數。
4-5-2 config隱含物件-方法

config隱含物件的相關方法說明,如下表
所示:
方法
說明
String getServletName()
取得 Servlet 的名稱
ServletContext getServletContext() 取得 Servlet 的 ServletContext 物件,可
以用來取得 application 隱含物件
String getInitParameter(String)
傳回參數 String 的 Servlet 初始參數的值
Enumeration
傳回所有 Servlet 初始參數的 Enumeration
getInitParameterNames()
物件
4-6 out物件的輸出與緩衝區處理
-說明

JSP的out隱含物件是Java I/O輸出串流,
這是javax.jsp.JspWriter物件,屬於
page範圍,可以將資料輸出到客戶端瀏覽
程式顯示和執行緩衝區處理。
4-6 out物件的輸出與緩衝區處理-輸
出

out物件可以將資料輸出到客戶端瀏覽程式
顯示,即之前在JSP程式使用的print()和
println()方法,其說明如下所示:
方法
說明
void print(data)
將參數 data 以字串方式輸出
void println(data) 將參數 data 以字串方式輸出,且在最後加上換行符號
4-6 out物件的輸出與緩衝區處理
-緩衝區處理(說明)

out物件另一項功能是緩衝區處理,JSP容器在執
行JSP程式碼時,可以選擇將處理的結果馬上輸
出到客戶端的瀏覽程式顯示,或是先輸出到暫放
的緩衝區,等到JSP程式執行完或緩衝區已滿,
才送到瀏覽程式顯示,如下圖所示:
4-6 out物件的輸出與緩衝區處理
-緩衝區處理(輸出內容)

JSP程式可以直接將輸出內容送到瀏覽程式顯示,
或將輸出結果先輸出到緩衝區,當遇到下列情況
才將輸出的內容送到瀏覽程式,如下所示:
• 執行完JSP程式後。
• 如果page指引元素的autoFlush屬性為true,
當緩衝區已滿自動送出緩衝區內容。
• 執行到的out.close()方法關閉輸出串流時,此
時已執行部分就會送出。
• 執行到out..flush()方法馬上將緩衝區的內容
送出。
4-6 out物件的輸出與緩衝區處理-緩
衝區處理(方法)
方法
void close()
void flush()
void clear()
說明
關閉輸出串流時,將已執行部分送出緩衝區
將緩衝區的內容送出
清除緩衝區內容,如果緩衝區內容已經送出是空
的,就會產生 IOException 例外,關於例外的說明
請參閱第 9 章
void clearBuffer()
清除緩衝區內容,如果緩衝區內容已經送出是空
的,並不會產生 IOException 例外
int getBufferSize()
傳回緩衝區大小,以 byte 為單位
int getRemaining()
傳回緩衝區剩下的大小,以 byte 為單位
boolean isAutoFlush() 傳回緩衝區已滿是否自動送出緩衝區內容,true 為
是
4-7 response物件的標頭和快取處
理




4-7-1
4-7-2
4-7-3
4-7-4
使用Refresh標頭定時更新網頁
Cache-Control標頭的快取處理
轉址到其它的網頁或JSP程式
設定輸出文件的資料類型
4-7-1 使用Refresh標頭定時更新網
頁
response.的setIntHeader()和setHeader()方
法可以使用Refresh標頭來指定間隔時間,以便
定時更新網頁內容,如下所示:
response.setIntHeader("Refresh", 2);
 如果想在一定的間隔時間後,轉址到其它網址或
JSP程式,此時的第2個參數就是加上URL網址的
字串,如下所示:
response.setHeader("Refresh",
"2;url=Ch4_1_3.jsp");
 上述第2個參數字串的url參數指定網址或其它
JSP程式,在2秒後,就會自動轉址到此URL網址。

4-7-2 Cache-Control標頭的快取處
理-說明


在客戶端電腦啟動瀏覽程式瀏覽網頁時,伺服端、
客戶端電腦或Proxy伺服器都會將網頁內容保留
在指定快取空間的資料夾或磁碟,以便加速網頁
的瀏覽。
當客戶端重複瀏覽同一頁網頁時,瀏覽程式會先
到客戶端和Proxy伺服器的快取找找看是否檔案
已經存在,如果有,就直接由快取取出網頁內容,
而不是每次都連結到伺服端快取或網站重新下載
網頁內容,如此,可以節省下載檔案時間,提高
網頁瀏覽的效率。
4-7-2 Cache-Control標頭的快取處
理-設定
不過對於一些需要輸入保密資料的網頁,為了安
全原因或是希望每次都連結網頁下載網頁內容,
所以並不能將網頁內容保留在快取之中,或是只
讓它保留一段指定的時間。JSP程式可以使用
setHeader()方法指定Cache-Control標頭的快
取處理,如下所示:
response.setHeader("Cache-Control", "nocache");
 上述程式碼指定Cache-Control標頭值為nocache,也就是關閉快取功能,這是HTTP 1.1版
支援的標頭。

4-7-2 Cache-Control標頭的快取處
理-參數值
參數值
no-cache
no-store
public
private
must-revalidate
proxy-revalidate
max-age = second
說明
關閉快取功能,網頁內容不會儲存在客戶端和 Proxy 伺服器的
快取,但可以儲存在伺服端快取
關閉快取功能,網頁內容不會儲存在伺服端、客戶端和 Proxy
伺服器的任何快取之中
所有的網頁內容都會儲存在快取,不論是否有密碼保護的網頁
都一樣,換句話說,其安全性相當的低
網頁內容只會儲存在客戶端快取和伺服端的非共享快取,在共
享快取會刪除網頁內容
客戶端在讀取網頁內容時,將跳過 Proxy 伺服器,直接和伺服
端網站確認是否是最新的網頁
客戶端在讀取網頁內容時,將直接和伺服端網站確認是否是最
新的網頁,不過最新的網頁內容可以透過 Proxy 伺服器分享給
其它使用者
指定網頁內容保留在快取的最大時間為 second 的秒數,這和
Expires 標頭擁有相同功能,不過 max-age 的設定值高於 Expires
標頭的設定
4-7-2 Cache-Control標頭的快取處
理-另一種方法
JSP程式除了可以指定快取處理的參數外,
我們還可以使用Expires標頭指定保留在快
取的時間(max-age只適用在HTTP 1.1
版),如下所示:
response.setDateHeader("Expires", 0);
 上述程式碼的第2個參數是保留在快取的毫
秒數,0表示不保留在快取。

4-7-3 轉址到其它的網頁或JSP程式
轉址功能是指在執行JSP程式時,可以轉址到其
它URL網址或網站的其它網頁或JSP程式。在
response物件sendRedirect()方法的參數可以
指定轉址的URL網址,如下所示:
response.sendRedirect(“Ch4_1_2.jsp");
 上述程式碼轉址到同一個目錄的Ch4_1_2.jsp,
參數可以是完整URL網址或同一個網站的相對路
徑,也可以是HTML文件,如下所示:
response.sendRedirect("http://www.hinet.ne
t");
response.sendRedirect(“../Ch03/Ch3_2_1.js
p");

4-7-4 設定輸出文件的資料類型
JSP程式除了可以使用page指引元素的
contentType屬性指定HTTP通訊協定傳送
資料到瀏覽程式的MIME資料類型外,
response物件的setContentType()方法
也一樣可以指定MIME資料類型,如下所示:
response.setContentType("text/xml");
 上述程式碼指定Content-type型態為
text/xml,表示傳送的內容是XML文件。

4-8 物件範圍的變數存取-存取方法

在JSP物件範圍對應的request、session、
application和pageContext物件都擁有的一組
通用方法,可以存入和取出物件屬性,也就是儲
存在物件的變數值,其相關方法的說明,如下表
所示:
方法
說明
void setAttribute(String,
指定屬性名稱為參數 String,值是參數 Object
Object)
Object getAttribute(String)
取得參數 String 名稱的屬性值
Enumeration
取得物件的所有屬性名稱
getAttributeNames()
void removeAttribute(String)
刪除參數 String 的屬性
4-8 物件範圍的變數存取-建立範圍
變數
在JSP程式可以使用pageContext、request、
session和application隱含物件的setAttribute()
方法來建立Page、Request、Session和
Application物件範圍的變數,如下所示:
pageContext.setAttribute("name", "陳會安");
request.setAttribute("name", "陳會安");
session.setAttribute("name", "陳會安");
application.setAttribute("name", "陳會安");

4-8 物件範圍的變數存取-取得變數
值

同樣的,我們可以使用pageContext、request、
session和application物件的getAttribute()方
法取得各範圍的變數值,如下所示:
Page範圍:
<%=pageContext.getAttribute("name")%><br>
Request範圍:
<%=request.getAttribute("name")%><br>
Session範圍:
<%=session.getAttribute("name")%><br>
Application範圍:
<%=application.getAttribute("name")%><br>