Jsp培訓資料知识点

Jsp培訓資料知识点

一、JSP簡介

Internet

Internet上最熱門的服務之一就是WWW服務。客戶端的瀏覽器通過HTTP協議發送請求,WEB服務器得到請求後返回一個相應的響應信息。以下是典型的WWW架構:

Internet從最初的文檔發佈平台向一個網絡應用平台發展時,就出現了各種相應的技術。在服務器端,各種各樣的腳本運行環境也開發出來。利用CGIASPPHPJSP等技術,一個用戶可以將一個HTTP請求發送到一個可執行的應用程序而不是一個靜態的HTML文件,服務器將會運行這個程序,將處理結果返回給客戶,或者對數據記錄進行操作,通過這個模式就可以在服務器和客戶之間進行有效的動態交互。

什麼是JSP

JSP(JavaServer Pages)Sun公司倡導、許多公司參與一起建立的一種動態網頁技術標准。在傳統的HTML(*.htm,*.html)文件中加入JAVA程序片段(Scriptlet)JSP標記(Tag)就構成了JSP網頁(*.jsp)

粗略看來JSP網頁和HTML網頁非常相似──都包含用標簽封裝的文本。當HTML標簽(“<” “>”)被用戶的瀏覽器處理以顯示網頁的時候,JSP標簽(“<%” “%>”)能通過WEB服務器的處理來生成動態的內容。

JSP的運行環境

大家都知道目前的服務器軟件,比如:MicrosoftInternet Information Server(IIS)都不支持JSP的,而要運行JSP程序就必須借助支持JSP的平台。當今JSP應用平台有Caucho公司的Resin,Apache公司的Tomcat,Sun公司的JSWDKIBMWeb Sphere Application,BEA Weblogic等。本教材所有代碼都在Tomcat試運行。

Tomcat的安裝:先安裝JDK,後安裝Tomcat。具體請參考教程“JAVA的配置”。

JSP的作用域

JSP頁面的生成是從一個請求開邕的,但是它所創建的一些Java對象的生命周期可以跨越多個請求。所有這些對象都有一個scope屬性,它定義了一個指向該對象的引用在何處可用以及容器何時刪除對象。

JSP容器支持4種不同的作用域:

1、 Page(頁面)JSP容器將在JSP頁面返回一個響頻或都將請求轉發給另一個頁面這後刪除對象。

2、 Request(請求):一個頁面可能經常將請求轉發給另一個頁面,這樣就會有多個頁面處理同一個請求。所有這些頁面都可以訪問請求作用域的對象。

3、 Session(會話):可以與創建該對象共享一個會話的任何頁面訪問這些些象。

4、 Application(應用程序):使用“會話作用域”在同一個WEB應用程序內的任何位置訪問對象。

二、JSP的結構

JSP結構圖

一個完整的JSP網頁實例

 

指令page

<%@ page language=”java” import=”java.sql.*”%>

<HTML>

 

輸出注釋

<!—

這是一個JSP示例文件

 

模板(靜態的文本)

-->

<HEAD><TITLE>JSP示例</TITLE></HEAD>

<BODY>

 

隱藏的注釋

<%--

以下是網頁正文

--%>

 

JSP動作

<jsp:useBean id=”usebean” class=”mypack.Pack” scope=”page”/>

 

JSP表達式

<%=usebean.getName()%>

<%!

 

JSP聲明

private static final UserName=”Tom”;

%>

<%

 

JSP腳本小程序

request.setArrtibute(“username”,UserName);

String product=request.getParameter (“product”);

If(UserName==null){

out.println(“名字是空的”);

}

%>

</BODY></HTML>

三、JSP注釋和指令

JSP注釋

可以輸出的注釋

語法:<!—comment[<%=expression%>]-->

輸出的注釋是發送到瀏覽器端的,你可以在網頁的源碼中看到它。

隱藏的注釋

語法:<%--comment--%>

用隱藏注釋標記的字符會在JSP編譯時被忽略,也不會顯示在客戶瀏覽中。

JSP指令

page指令

該指令用來定義當前頁面的屬性。

語法:

<%@ page {屬性=“屬性值”}*%>

屬性列表:language=”script語言,定義的是Scriptlet所使用的語言,只有一種JAVA語言,所以一般可以不設。

extends=”繼承的類名:參數值是完整的JAVA類名,限繼承了該類。

import=”引入的包名:用來指明頁面的代碼中將會用到的類、接口的包名或類名。

session=”true|false”:用於設定用戶是否需要session(session就是客戶端與服務器的一次會話)

buffer=”none|8kb|sizekb”:用於指定輸出緩存的大小,默認為8kb

isThreadSafe=”true|false”:指定是否支持多線程處理,也就是說JSP是否能同時處理多個請求。

info=”message”:定義一個可以通過getServletInfo()方法提取的字符,即輸出infomessage

errorPage=”url”:指定一頁面的URL地址,當頁面執行有例外發生,即交給指定的URL處理。

isErrorPage=”true|false”:指明頁面是否為另一頁面的例外進行處理,默認為false

contentType=”mimeType[;charset=characterSet]”|”text/html;charset=ISO-8859-1” :指定了MIME的類型和JSP文件的字符編碼方式,這些都是必須先傳送經客戶端的。通常的MIME類型有:text/html,text/plain,image/gif等。默認的MIME類型為”text/html”,字符編碼為ISO-8859-1(繁體中文為Big5,簡體中文為gb2312)

Page指令示例

<%@ page contentType=”text/html;charset=Big5”%>

<%@ page import=”java.sql.*”%>

<%@ page errorPage=”error.jsp”%>error.jsp頁裡可設<%@ page isErrorPage=”true”%>即可以輸出拋出的錯誤<%=exception.getMessage()%>

<%@ page info=”Author:Andy v:1.0”%>在頁面中通過方法<%=getServletInfo()%>,瀏覽器顯示為Author:Andy v:1.0

include指令

include指令用來向當前頁面中插入一個靜態文件的內容,這個文件可以是HTML文件,也可以是JSP文件或其它的文本文件(如:*.txt)

指令格式如下

<%@ include file=”URL”%>

URL指包含文件的路徑名,如果路徑以”/”開頭是指網站的虛擬路徑的根目錄下,如果以文件名或目錄名開頭那麼就是當前路徑。

示例:

<%@ include file=”inc.jsp”%>即把inc.jsp文件的內容包含到當前頁面中。

Include的作用在實際應用中經常有到,可以用include來包含一個會在多個頁面中用到的文件,比如一個版權信頁、導航條、公司聯繫信息等。

但是對那些更新很快的信息,這種方法會顯麻煩,因為包含的頁面更新之後,只有在當前頁更新後,包含的頁面更新才能起作用。也就是說如果當前頁沒有更新,就看不到包含頁的更新。

taglib指令

JSP使用標記來定義頁面元素,即要使用到tablib指令。

語法:

<%@ taglib uri=”URI To Tag Library” prefix=”tag prefix”%>

uri可以是絕對或相對路徑,它指明了“標記庫描述符(TLD)”的位置,prefix指定了標記的前綴。

示例:

<%@ taglib uri=”WEB-INF/struts-bean.tld” prefix=”bean”%>

頁面中可以如下調用:

<bean:write name=”NAME”/>writestruts-bean標記庫的一個標記,name指一個Bean

四、JSP腳本元素

JSP聲明

聲明是在JSP程序中聲明合法的變量和方法。

JSP語法:

<%!聲明一;聲明二;…%>

JSP語法中的聲明語句用來聲明將要在JSP程序使用的變量和方法。變量和方法必須聲明,不然系統會報錯。可以一次聲明多個變量和方法,只要以”;”結束就可以了。

當聲明變量和方法時,請注意以下規則:

□一條完整的JSP語法中的聲明語名是以”;”結尾的,在這一點上JSP語法中的腳本小程序有同樣的規則,但JSP表達式不用”;”

□可以直接使用<%@ page %>中被包含進來的已經聲明的變量的方法,不需要對它們重新進行聲明。

□一個聲明公在一個頁面有效,如果想在每個頁面都用到一些聲明,最好把它們寫成一個單獨的文作,然後用<%@ include %>或者<jsp:include>元素包含進來。如果我們在兩個不同的JSP文件聲明了相同的變量,而且在另外一個JSP文件中把這兩個文件都包含進去,那麼JSP服務器就會報錯。

□也可以在程序中聲明一個新類。

示例:

<%! int I=0;%>

<%! String name,sex,tel,email;%>

JSP表達式

語法:

<%=某個表達式%>

表達式元素表示的是一個在Java腳本語言中被定義的Java表達式,在動作後被自動轉化為字符串,然後插入到表達式所在JSP文件的位置顯示。

使用表達式需注意以下不能用分號”;”作為表達式的結束符。

示例:

<%=(new java.util.Date()).toString()%>

<%=(1+4)*3%>

JSP腳本小程序

語法:

<% JSP Scriptlet的代碼段%>

寫在兩個”%”之間的JSP程序,包含有效的程序段。一個腳本小程序能夠包含多個JSP語句、方法、變量、表達式。

示例:scriptlet.jsp源代碼如下

<%@ page contentType="text/html; charset=Big5" %>

<html><head><title>scriptlet</title></head>

<body bgcolor="#ffffff">

<h3>

<%for(int i=0;i<7;i++){%>

<%=i%><br>

<%}%>

</h3>

</body></html>

訪問scriptlet.jsp顯示如下:

五、JSP動作

<jsp:forward>

該動作是定向一個HTML頁、JSP文件、或是一個程序段,即重定向。該動作只有一個page屬性。

語法:

<jsp:forward page={“relativeURL”|”<%=expression%>”}/>

或帶傳遞參數

<jsp:forward page={“relativeURL”|”<%=expression%>”}>

<jsp:param name=”parameterName” value=”{“parameter Value”|”<%=expression%>”}”/>

</jsp:forward>

page指定重定向的頁面,它的值可以是一個URL如“/login/login.htm,或是一個JSP表達式。

<jsp:param>是可選標簽,能夠附帶參數給重定向的頁面,該頁面可以取得該參數的值。

示例:

如果在main.jsp頁面中有代碼如下:

<jsp:forward page=”/prog/login.jsp”/>即訪問main.jsp頁面時,執行到該標簽時被重定向到/prog/login.jsp頁面。

<jsp:plugin>

該動作是執行一個appletBean有關的指令。在網頁中插入appletBean時使用該動作。而瀏覽器顯示需要Java插件。

語法:

<jsp:plugin type=”bean/applet” code=”classFileName” codebase=”classFileDirectoryName”

[name=”instanceName”]

[archive=”URIToArchive,…”]

[align=”bottom/top/middle/left/right”]

[height=”displayPixels”]

[width=”displayPixels”]

[hspace=”leftRightPixels”]

[vspace=”topBottomPixels”]

[jreversion=”JREVersionNumber/1.1]

[nspluginurl=”URLToPlugin”]

[iepluginurl=”URLToPlugin”]>

[<jsp:params>

[<jsp:param name=”parameterName” value=”{parameterValue/<%=expression%>}”/>+</jsp:params>]

[<jsp:fallback>text message for user </jsp:fallback>]

</jsp:plugin>

<jsp:useBean>

這個標簽的作用是把JavaBeans組件引入到JSP中來,從而使JSP的功能更為強大。將大多數Java處理移出JSP頁面的一種方法是將它封裝在一個JavaBean中。

語法:

<jsp:useBean id=”name” scope=”page|request|session|application” class=”className”|class=”className” type=”typeName”|beanName=”beanName” type=”typeName”|type=”typeName”/>

id是在所定義的Beans的確認變量,能在後面的程序中使用此變量名來分辨不同的Beans。這個變量區分大小寫。

scopeBeans存在的范圍(page,request,session,application)id變量的有效范圍。默認值是page

class定義JavaBean實現的類的完全名稱,如果沒有指定type屬性,那麼必須指定class屬性

type腳本變量的類型。這可以與對象、對象的超類或者由對象實現地Java接口。如果沒有指定class那麼必須指定type

benaNameJavaBean的名稱。它必須是“A.B.C”形式。

示例:

<jsp:useBean id=”mybean” class=”mypack.Test” scope=”page” />

Test.java源程序

package mypack;

import java.util.Date;

public class Test {

private String abc="";

public String getString(){//返回一個字符串

return abc;

}

public void setString(String abc){

this.abc=abc;

}

public Date getDate(){//返回當前系統時間

Date date=new Date();

return date;

}

}

test.jsp源程序如下:

<%@ page contentType="text/html; charset=Big5" %>

<jsp:useBean id="test" scope="request" class="mypack.Test"/>

<html>

<head>

<title>

test

</title>

</head>

<%test.setString("這是一個測試例子");%>

<body bgcolor="#ffffff">

<h1>

<%=test.getString()%><br>

<%=test.getDate()%>

</h1>

</body>

</html>

訪問test.jsp顯示結果如下:

<jsp:getProperty>

該標簽也是和Beans有關的動作,用於獲得Beans的屬性值,並可以將其使用或顯示在JSP頁面中,將其轉換成String型,然後輸出。在使用它之前,必須用<jsp:useBean>創建它,所以它們是成對出現的。

語法:

<jsp:getProperty name=”beanName” property=”propertyName”/>

name:其中name指向用useBean組件時的id值。

property:指明要想得到Beans的那個屬性。

示例:

test.jsp加入該標簽,源程序如下:

<%@ page contentType="text/html; charset=Big5" %>

<jsp:useBean id="test" scope="request" class="mypack.Test"/>

<html><head><title>test</title>

name<jsp:useBean>idpropertyBeans的一個屬性

</head>

<%test.setString("這是一個測試例子");%>

<body bgcolor="#ffffff">

<h1>

<%=test.getString()%><br>

<%=test.getDate()%>

</h1>

<jsp:getProperty name="test" property="date"/>

</body></html>

顯示結果如下:

 

這是<jsp:getProperty>輸出的字符

<jsp:setProperty>

該動作是與Beans有關的指令,用於設置Beans的屬性。該動作使用Beans指定的設置方法,在Beans中設置一個或多個屬性值。在使用<jsp:setProperty>之前必須使用<jsp:useBean>聲明將要使用的Bean,在<jsp:useBean>中的id值與<jsp:setProperty>name的值完全相同。

語法:

<jsp:setProperty name=”beanName” property=”*”|property=”propertyName” [param=”parameterName”]|property=”propertyName” value=”{String|<%=expression%>}”/>

name:是表示已經存在的<jsp:useBean>中創建的Beans實例的名字,id的值。

property:匹配Beans中的屬性。

<jsp:setPropety>的兩種變化形式:

1、 可以直接從HTTP請求參數賦值。即可以直接用網頁表單給Beans屬性賦值。

如果表單參數與Beans屬性名稱一致即可以這樣使用property=”*”

例如:一個網頁輸入表單的源程序如下:

<%@ page contentType="text/html; charset=Big5" %>

<html>

<head>

<title>

setpropertyinput

</title>

 

Test類裡的setString()屬性相對應

</head>

<body bgcolor="#ffffff">

<form action="test.jsp" method="GET">

<input name="string" type="text">

<input type="submit" value="submit">

</form>

</body>

</html>

test.jsp源程序如下:

<%@ page contentType="text/html; charset=Big5" %>

<jsp:useBean id="test" scope="page" class="mypack.Test"/>

<html><head><title>test</title></head>

 

輸出的字符即為表單輸入的字符

<body bgcolor="#ffffff">

<jsp:setProperty name="test" property="*"/>

<jsp:getProperty name="test" property="string"/>

</body></html>

如果表單參數與Beans屬性名稱不一致可以如下設置賦值:

<jsp:setProperty naem=”test” property=”string” param=”aa”/>

 

Beans屬性

網頁表單參數


2、 可以直接使用String常量或者JSP表達式賦值。

<jsp:setProperty name=”test” property=”string” value=”aaaaaaaa”/>

<jsp:setProperty name=”test” property=”string” value=’<%=new Date().toString()%>’/>

<jsp:include page=”path” flush=”True”/>

六、JSP內建對象

JSP1.1中規范要求JSP腳本語言支持一組常見的“內建”對象,這些對象之所以稱為內建的,是因為你不需要在使用它們之前進行聲明。

JSP提供9個預先定義的變量,它們是:

1、 out傳達響應的輸出流

2、 request包含客戶端的請求

3、 response對客戶端的響應

4、 page指向JSP頁面本身

5、 session客戶端請求時的一次對話

6、 application代碼段的運行環境

7、 exception頁面運行時拋出的例外

8、 pageContext頁面的管理屬性

9、 config代碼段的配置對象

out輸出數據

JSP程序中,out是用來向客戶端發送內容的打印輸出預定義變量。Out是專門為向客戶端發送輸出而設計的,它的基類的javax.servlet.jsp.Jspwriter

out提供二種方法向客戶端輸出內容:

print()輸出完畢後,並不結束該行。

println()輸出完畢後,會結束當前行,下一個輸出語句將在下一行開始輸出。

其它重要的方法:

out.newLine()輸出一個換行符號

out.flush()輸出緩沖區裡的數據

out.close()將關閉輸出流,

out.clearBuffer()清除緩沖區裡的數據,並把數據輸出到客戶端

out.clear()清除緩沖區裡的數據,但不把數據輸出到客戶端

out.getBufferSize()獲得緩沖區的大小(int)

out.getRemaining()獲得緩沖區中沒有被占用的空間大小(int)

out.isAutoFlush()返回布爾值,其取值在於<%@ page autoFlush=”true|false”%>的設置

示例:

<%

out.newLine();

out.println(“<h1>A Example</h1>”);

out.close();

out.println(“這一行將不會輸出”);

%>

顯示結是如下圖:

request對象

requestJSP中最常用到的對象之一,它包含了客戶請求的信息,在那些與用戶交互的網頁中,這個對象是基礎,只有通過它,才能了解到用戶的需求。該對象主要用於接受客戶端通過HTTP協義鏈接傳輸到服務器端的數據。

request對象的主要方法如下:

1、 getCookies(String name)返回客戶端的Cookie對象,結果是一個Cookie數組

2、 getHeader()獲得HTTP協義定義的傳送文件頭的信息。比如getHeader(“User-Agent”)返回客戶端瀏覽器的版本號、類型

3、 getAttributeNames()返回request對象的所有屬性name,其結果是一個類舉實例(Enumeration)

4、 getParameterNames()獲得客戶端送給服務器端的所有參數的名字,結果也是一個類舉類的實例

5、 getHeaderNames()返回header的名字,結果也是一個類舉

6、 getHeaders(String name)返回指定名字的header的所有值,結果是一個類舉

7、 getMethod()獲得客戶端向服務器端傳送數據的方法(GET,POST,PUT)

8、 getParaemter(String name)獲得客戶端傳送給服務端的參數值,該參數由name指定

9、 getAttribute(String name)返回指定的屬性值,如果指定的屬性值不存在則返回null

10getParameterValues(String name)獲得指定參數的所有值,參數由name指定

11getQueryString()獲得查詢字符串,該字符串是由客戶端以GET方法向服務器端傳送的

12getRequestURI()獲得發出請求的客戶端地址

13getServletPath()獲得客戶端所請求腳本文件的文件路徑

14setAttribute(String name,java.lang.Object o)設定名字為namerequest參數的值

15getServerName()獲得服務器名稱

16getServerPort()獲得服務器端口號

17getRemoteAddr()獲得客戶端的IP地址

18getRemoteHost()獲得客戶端計算機的名稱

19getProtocol()獲得客戶端向服務器端傳送數據所依據的協義名稱

示例:表單頁form.jsp源程序如下:

<%@ page contentType="text/html; charset=Big5" %>

<html><head>

<title>form</title></head>

<body bgcolor="#ffffff">

<form action="formok.jsp" method="GET">

姓名:<input name="name" type="text"><br>

愛好:<input name="like" type="checkbox" value="sing">唱歌

<input name="like" type="checkbox" value="ball">打球

<input name="like" type="checkbox" value="game">遊戲<br>

<input type="submit" value="submit">

</form>

</body></html>

接收數據的formok.jsp源程序如下:

<%@ page contentType="text/html; charset=Big5" %>

<%@ page import="java.lang.Object,java.util.Enumeration"%>

<html><head><title>formok</title></head>

<body bgcolor="#ffffff">

<h3>

從表單中獲取字符串:<%=request.getQueryString()%><br>

表單所提交的參數名枚舉:<br>

<%

Enumeration e=request.getParameterNames();

while(e.hasMoreElements()){

out.println(e.nextElement().toString());}

%>

<br>

相關參數的參數值如下:<br>

姓名:<%=request.getParameter("name")%><br>

愛好:<%

for(int i=0;i<request.getParameterValues("like").length;i++){

out.println(request.getParameterValues("like")[i]);

}

%>

</h3>

</body></html>

訪問form.jsp並輸入數據顯示如下:

提交後的結果如下所示:

response對象

該對象用於向客戶端發送數據,響應客戶端的請求,如CookieHTTP文件頭信息等。

該對象的方法如下:

1、 addCookie(Cookie cookie)添加一個Cookie對象,用來保存客戶端的用戶信息。用requestgetCookies()方法可以獲得這個Cookie

2、 addHeader(String name,String value)添加HTTP文件頭,該header將會傳到客戶端去,如果同名的header存在,原來的header就會被覆蓋

3、 containsHeader(String name)判斷指定名字的HTTP文件頭是否存在並返回布爾值

4、 sendError(int sc)向客戶端發送錯誤信息,例如505服務器內部錯誤

5、 setHeader(String name,String value)設定指定名字的HTTP文件頭的值,如果該值存在,那麼它會被覆蓋

示例:

利用response來定時刷新頁面,定是為一秒鐘。源程序如下:

<%@ page contentType="text/html; charset=Big5" %>

<html><head>

<title>頁面定時刷新</title>

</head>

<body bgcolor="#ffffff">

<%

response.setHeader("Refresh","1");//定義header頭的Refresh的屬性,1秒刷新一次

%>

</body></html>

page對象

該對象就是指向當前的JSP頁面本身,有點象類中的this指針。該對象一般很少在JSP編程中用到。所以該方法不作詳細介紹。

session對象

session對象指的就是客戶端與服務器端的一次對話,此次對話從客戶端鏈接到服務器的第一個請求開始,直到客戶端與此服務器斷開鏈接。它用來在每一個用戶之間分別保存用戶信息,系統會為用戶生成一個獨一無二的session對象,用它來記錄用戶的個人信息,一旦用戶退出網站,那麼該session對象就會被注銷。

主要方法如下:

1、 getAttribute(String name)獲得指定名字的屬性,如果該屬性不存在,將返回null

2、 getAttributeNames()返回session對象中存儲的每一個屬性對象,結果是一Enumeration類實從例

3、 getCreationTime()返回該session對象創建的時間,以毫秒算,從1970/1/1算起

4、 getId()每生成一個session對象服務器都會給他一個唯一的編號,該主法返回編號

5、 getLastAccessedTime()返回當前session對象最後一次被操作的時間

6、 getMaxInactiveInterval()獲取session對象的生存時間

7、 removeAttribute(String name)刪除與指定名字name相聯繫的session信息

8、 setAttribute(String name,java.lang.Object value)設置指定名字的屬性值value,並把它存在session對象中

示例:session.jsp源程序如下:

<%@ page contentType="text/html; charset=Big5" %>

<html><head>

<title>session</title>

</head>

<body bgcolor="#ffffff">

<%!String se="sessionTest";%>

<%

session.setAttribute("sess",se);//se保存到session對象中,它是名字是sess

%>

session的創建時間:<%=session.getCreationTime()%><br />

session ID:<%=session.getId()%><br>

最後操作時間:<%=session.getLastAccessedTime()%><br />

生存時間:<%=session.getMaxInactiveInterval()%><br />

這個session:<%=session.getAttribute("sess").toString()%>

</body></html>

訪問session.jsp顯示如下:

application對象

application變量的對一個Web Application有效的全局變量,它開始於服務器的啟動,直到服務器關閉,在此期間,此對象將一直存在。與session不同的地方是,session是用戶作為主角,它將隨用戶的斷開而消失,application則是服務器作為主角,服務器的啟動和關閉決定了application的生命。

主要方法如下:

1、 getAttribute(String name)返回由name指定名字的application對象的屬性的值

2、 getAttributeNames()返回所有的application對象的屬性名字,結果是一個枚舉實例

3、 getInitParameter(String name)返回name指定的某個屬性的初始值

4、 getServerInfo()獲得當前版本Servlet編譯器的信息

5、 setAttribute(String name,Object object)object來初始化某個屬性,該屬性由name指定

6、 log(String msg)把指定的消息寫入服務器的Servlet日志文件

7、 log(Exception exception,String msg)把指定例外的軌跡及錯誤消息寫入日志

8、 log(String message,Throwable throwable)throwable例外寫入日志

9、 getMajorVersion()返回服務器支持的Servlet API的主版本號

10getMinorVersion()返回服務器支持的Servlet API的次版本號

示例:application.jsp源程序如下:

<%@ page contentType="text/html; charset=Big5" %>

<html><head>

<title>application</title>

</head>

<body bgcolor="#ffffff">

JSP版本號:<%=application.getServerInfo()%><br />

Servlet API的主版本號:<%=application.getMajorVersion()%><br />

Servlet API的次版本號:<%=application.getMinorVersion()%>

</body></html>

訪問顯示如下:

示例:由於application一直存在於服務器,是一個全局變量,可以利用此特性做一個計數器。

Applicatincount.jsp源程序如下

<%@ page contentType="text/html; charset=Big5" %>

<html><head>

<title>applicationcount</title>

</head>

<body bgcolor="#ffffff">

<%

if(application.getAttribute("count")==null){

application.setAttribute("count","1"); }else{application.setAttribute("count",Integer.toString(Integer.valueOf(application.getAttribute("count").toString()).intValue()+1));

}

%>

你是第<%=application.getAttribute("count")%>位訪問者

</body></html>

顯示結果如下:

exception對象

該對象是一個例外對象,當JSP頁面在運行過程中發生了例外,就產生這個對象。一個JSP頁面可以使用此對象,但必須設置<%@ page isErrorPage=”true”%>

對象的方法如下:

1、 String getMessage()返回描述例外的消息字符串

2、 String toString()以字符串的形式,返回關於例外的簡短描述消息

3、 PrintStackTrace()以標准的形式輸出一個錯誤和錯誤的堆楗

示例:error.jsp,當錯誤指向該頁時即可補獲錯誤信息並顯示

<%@ page contentType="text/html; charset=Big5" %>

<%@ page isErrorPage="true"%>

<html><head>

<title>error</title>

</head>

<body bgcolor="#ffffff">

<%

//獲得並打印例外信息

String error=exception.getMessage();

out.println(error);

//獲得例外信息的描述

String errdesc=exception.toString();

out.println(errdesc);

%>

</body></html>

pageContext對象

該對象提供了JSP頁面內所有的對象及名字空間的訪問,它可以訪問到本頁面所在Session,也可以取得本頁面所在的application的某一屬性值,它相當於頁面中所有對象功能的集成者。

對象的方法如下:

1、 getOut()返回當前向客戶端響應被使用的JspWriter(out)

2、 getSession()返回當前頁中的session對象

3、 getPage()返回當前頁的Object對象

4、 getRequest()返回當前頁的Request對象

5、 getResponse()返回當前頁的Response對象

6、 getException()返回當前頁的Exception對象

7、 getServletConfig()返回當前頁的ServletConfig對象

8、 getServletContext()返回當前頁的ServletContext對象

9、 setAttribute(String name,Object o,int scope)在指定范圍內設置屬性入屬性

10setAttribute(String name,Object attribute)值設置屬性及屬性值

11getAttribute(String name)取屬性的屬性值

12getAttribute(String name,int scope)在指定范圍內取屬性的屬性值

13findAttribute(String name)尋找一個屬性,找到即返回屬性值,沒有即返回null

14removeAttribute(String name)刪除某屬性

15removeAttribute(String name,int scope)在指定范圍內刪除某屬性

16getAttributesScope(String name)返回一個整形數值,指某屬性的作用范圍

17getAttributeNamesInScope(int scope)返回指定范圍內可用的屬性名枚舉(Enumernation)

18release()釋放pageContext所占的資源

19forward(String URL)使當前頁面重定向另一頁面

上面指定范圍scope值的含義為:

page scope1表示

request scope2表示

session scope3表示

application scope4表示

示例:

<%

String a="aaa";

sessio