一、request對象
1、訪問請求參數
2、在作用域中管理屬性
3、獲取Cookie
4、解決中文亂碼
5、獲取客戶端信息
6、顯示國際化信息
是一個javax.servlet.http.HttpServletRequest對象
request封裝了用戶瀏覽器提交的信息,因此可以調用相應的方法可以獲取這些封裝的信息。例如:請求的頭信息(Header)、系統信息(比如:編碼方式)、請求的方式(比如:GET或POST)、請求的參數名稱和參數值等信息;
用戶的HTTP請求有某種結構,包含請求行、頭域和可能的信息體。
如:post/hello.html/HTTP.1.1
????????Host:localhost:8080
????????<form ...></form>
首行是請求行,規定了請求的方法
第二行是頭(header),頭Host規定了hello.html的internet地址。可以有多個頭。
第三行是信息體,包含了提交信息的表單等。
1 訪問請求參數
我們知道request對象用于處理HTTP請求中的各項參數。在這些參數中,最常用的就是獲取訪問請求參數。
當我們通過超鏈接的形式發送請求時,可以為該請求傳遞參數,這可以通過在超鏈接的后面加上問號“?”來實現。注意這個問號為英文半角的符號。
在頁面中定義超鏈接:<a href=”delete.jsp?id=1”>刪除</a>
格式:request.getParameter(“parameterName”)
作用:用表單和超鏈接傳遞參數的時候,使用getParameter方法可以返回給定參數的值,如果參數不存在則返回空值。
例:String name=request.getParameter("name");
表單文件:user.html
<form action="getuser.jsp"method=“get">
<input type="text" name="user">
<input type="submit">
</form>
獲取表單信息:getuser.jsp
<%
String u=request.getParameter("user");
out.println(u);
%>
如在地址欄中寫入http://localhost:8080/MyProject/1.jsp?id=1&name=2;
或是在頁面的鏈接中<a href=“1.jsp?id=1&name=2”>
同樣可以在1.jsp中使用getParameter(“id”)和getParameter(“name”)獲得對應的值 。
漢字亂碼問題
JSP在表單傳輸過程中,使用的默認編碼是ISO-8859-1,因此如果傳輸漢字,會導致亂碼。
解決辦法(getBytes()方法是得到一個系統默認或規定的編碼格式的字節數組)
方法一(post):?String str=request.getParameter(“name”);
? ? ? ? ? ? ? ? ? ? ? ? ? ?byte b[]=str.getBytes(“ISO-8859-1”);
? ? ? ? ? ? ? ? ? ? ? ? ? ?str=new String(b);???
?等價于? ?String str123=new String(str.getBytes("ISO-8859-1"),"gb2312");
方法二? ?(post):在getParameter方法前,加入:request.setCharacterEncoding("gb2312");
2 在作用域中管理屬性
在進行請求轉發時,需要把一些數據傳遞到轉發后的頁面進行處理。這時,就需要使用request對象的setAttribute()方法將數據保存到request范圍內的變量中。
request對象的setAttribute()方法的語法格式如下:
request.setAttribute(String name,Object object);
參數說明:
name: 變量名,為String類型
object:用于指定需要在request范圍內傳遞的數據
getAttribute()方法獲取該變量的值:
request.getAttribute(String name);
3、獲取cookie
在互聯網中,cookie是小段的文本信息,在網絡服務器上生成,并發送給瀏覽器的。
通過使用cookie可以標識用戶身份,記錄用戶名和密碼,跟蹤重復用戶等。瀏覽器將cookie以key/value的形式保存到客戶機的某個指定目錄中。
?????? getCookies(): 獲取到所有cookie對象的集合;
?????? getName():? 獲取到指定名稱的cookie;
????? ?getValue(): 獲取到cookie對象的值。
另外將一個cookie對象發送到客戶端使用了response對象的addCookie()方法。
Cookie是服務器暫存在客戶機上的一些信息,用來記錄用戶的身份或訪問網站的記錄。當客戶再次訪問同一個服務器時,瀏覽器會將這些信息發給服務器,服務器從而能夠識別用戶并顯示用戶的訪問記錄。
Cookie信息保存在客戶機的硬盤上,位于
C:\Documents and Settings\登錄用戶名\Cookies 和
C:\Documents and Settings\登錄用戶名\Local Settings\Temporary Internet Files
public String getName():獲取Cookie的名字
public String getValue():獲取Cookie的值
public void setMaxAge(int maxAge):設置Cookie的有效時間,以秒為單位
? ? ? ? ? ? ? ? ? ? ? ? maxAge如果為正數,在有效期內,用戶關閉瀏覽器后再重新啟動,Cookie仍有效
? ? ? ? ? ? ? ? ? ? ? ? maxAge如果為負數,只在當前瀏覽器有效,當關閉瀏覽器時,Cookie失效
? ? ? ? ? ? ? ? ? ? ? ? maxAge如果為0,會刪除過去有效的Cookie。
public int getMaxAge():獲取cookie在失效以前的最大時間,以秒計算
Cookie的發送和接收
服務器向客戶程序發送Cookie,3個步驟:
創建Cookie對象,給出Cookie的名稱和值,Cookie cookie=new Cookie("text",textname);
設置最大時效(以秒為單位)如:cookie.setMaxAge(60*60*24*7);//一周
注:如果不設置,將存儲在瀏覽器的內存上
將Cookie放入HTTP響應報頭? ??response.addCookie(cookie);
從客戶端讀取Cookie
調用request.getCookies(),這個調用返回Cookie對象數組
使用循環語句對Cookie數組進行遍歷
在循環中使用判斷語句找出所需要的Cookie。
示例:
<%? ?Cookie a[]=request.getCookies();
for(int i=0;i<a.length;i++){
if(a[i].getName().equal(“”))
…}%>
Cookie的設置和獲取
setCookie.jsp
<%
Cookie c=new Cookie("season","spring");
c.setMaxAge(30);
response.addCookie(c);
Cookie d=new Cookie("nextseason","summer");
d.setMaxAge(10);
response.addCookie(d);
%>
getCookie.jsp
<%
Cookie a[]=request.getCookies();
for(int i=0;i<a.length;i++)
{
out.println(a[i].getName()+" "+a[i].getValue()+"<br>");
}
%>
Cookie是服務器暫存在客戶機上的一些信息,用來記錄用戶的身份或訪問網站的記錄。當客戶反復多次訪問同一個服務器時,服務器需要某種手段來識別用戶并顯示用戶的訪問記錄,即cookie。
Cookie信息保存在客戶機的硬盤上,位于C:\Documents and Settings\登錄用戶名\Cookies
和 C:\Documents and Settings\登錄用戶名\Local Settings\Temporary Internet Files
獲取cookie
通過cookie保存并讀取用戶登錄信息
編寫deal.jsp文件,用于向cookie中寫入注冊信息
4 解決中文亂碼
在上面的代碼中我們為id參數傳遞了一個字符串類型的值“001”,如果將這個參數的值更改為中文,則在show.jsp就會發生大家都不愿意看到的問題——在顯示參數值時中文內容變成了亂碼。這是因為請求參數的文字編碼方式與頁面中的不一致所造成的,所有的request請求都是iso-8859-1的,而在此頁面采用的是UTF-8的編碼方式。
要解決此問題,只要將獲取到的數據通過String的構造方法使用指定的編碼類型重新構造一個String對象即可正確地顯示出中文信息。漢字亂碼問題
JSP在表單傳輸過程中,使用的默認編碼是ISO-8859-1,因此如果傳輸漢字,會導致亂碼。
解決辦法(getBytes()方法是得到一個系統默認或規定的編碼格式的字節數組)
方法一(post):String str=request.getParameter(“name”);
byte b[]=str.getBytes(“ISO-8859-1”);
str=new String(b);??? ?
等價于? ?String str123=new String(str.getBytes("ISO-8859-1"),"gb2312")
方法二(post):在getParameter方法前,加入:request.setCharacterEncoding("gb2312");
5.獲取客戶端信息
方??法?? ?說??明
getHeader(String name)?? ?獲得HTTP協議定義的文件頭信息
getHeaders(String name)返回指定名字的request Header的所有值,其結果是一個枚舉型的實例
getHeadersNames()?? ?返回所有request Header的名字,其結果是一個枚舉型的實例
getMethod()?? ?獲得客戶端向服務器端傳送數據的方法,如get,post,header,trace等
getProtocol()?? ?獲得客戶端向服務器端傳送數據所依據的協議名稱
getRequestURI()?? ?獲得發出請求字符串的客戶端地址,不包括請求的參數
getRequestURL()?? ?獲取發出請求字符串的客戶端地址
getRealPath()?? ?返回當前請求文件的絕對路徑
getRemoteAddr()?? ?獲取客戶端的IP地址
getRemoteHost()?? ?獲取客戶端的主機名
getServerName()?? ?獲取服務器的名字
getServerPath()?? ?獲取客戶端所請求的腳本文件的文件路徑
getServerPort()?? ?獲取服務器的端口號
例 使用request對象的相關方法獲取客戶端信息
6 顯示國際化信息
瀏覽器可以通過accept-language的HTTP報頭向Web服務器指明它所使用的本地語言。request對象中的getLocale()和getLocales()方法允許JSP開發人員獲取這一信息,獲取的信息屬于java.util.Local類型。
java.util.Local類型的對象封裝了一個國家和一種國家所使用的語言。使用這一信息,JSP開發者就可以使用語言所特有的信息作出響應。
P121 例 頁面信息國際化,根據所在區域顯示不同語言
如果所在區域為中國,將顯示"您好!歡迎訪問我們公司網站!"
如果所在區域為應該,則顯示"hello, welcome to access our company's web!"
二、response
1、重定向網頁
2、處理HTTP文件頭
3、設置輸出緩沖
是一個javax.servlet.http.HttpServletReponse對象。與request相對應,Response對象用來提供給客戶端瀏覽器的參考信息,比如響應的頭行,響應的message body(HTML文本內容)以及服務端的狀態碼信息。
注意:任何標頭的設定都應在本體回傳前設定好,否則設定的值將不起任何作用。
response 動態響應contentType
response.setContentType(Stringtype)
設置輸出數據的類型
text/html:網頁
text/plain:純文本
application/x-msexcel:Excel文件
application/msword:Word文件
例:將當前頁面轉換為word文檔
<% response.setContentType (“application/msword;charset=gb2312”); %>
response 設置http文件頭
作用:設置HTTP應答報文的首部字段和值格式:response.setHeader(String name, String value)例如:利用setHeader方法可以設置頁面的自動刷新時間
reponse.setHeader(“Refresh”,”5”)
每5秒種用戶自動刷新該網頁
reponse.setHeader(“Refresh”, “5;URL=http://www.163.com”)
5秒種后自動跳轉到新頁面
1 重定向網頁
使用response對象提供的sendRedirect()方法可以將網頁重定向到另一個頁面。
重定向操作支持將地址重定向到不同的主機上,這一點與轉發不同。在客戶端瀏覽器上將會得到跳轉的地址,并重新發送請求鏈接。用戶可以從瀏覽器的地址欄中看到跳轉后的地址。進行重定向操作后,request中的屬性全部失效,并且開始一個新的request對象。
sendRedirect()方法的語法格式如下:response.sendRedirect(String path);
指定目標路徑:相對路徑,不同主機的其他URL地址
作用:瀏覽器重定向,把當前響應返回到瀏覽器。在通過瀏覽器發送到新的指定地址
格式:response.sendRedirect(“url”)
例如: response.sendRedirect(“http://www.163.com”);
response.sendRedirect(“aa.jsp”);
response.sendRedirect(“aa.jsp?user=tom”);
?response 的狀態行
服務器對用戶響應時,發送的首行稱為狀態行
設定狀態顯示碼的方法
void sendError(int sc) ??傳送狀態碼(status code)
void sendError(int sc,String msg) 傳送狀態碼和錯誤信息.用給定的狀態碼發給客戶端一個錯誤響應。 在發生錯誤時使用,如400表示無效的請求服務器將返回一個預設信息。
void setStatus(int sc) 設置狀態碼沒有錯誤發生時使用,如狀態碼200表示成功
例4.10 通過sendRedirect()方法重定向頁面到用戶登錄頁面response綜合實例1: 登錄
默認情況下, SendRedirect 不會保留請求對象中參數,除非用“?參數名=值”;需要保存請求的相關信息時要用forward,因為用的是同一個request;
SendRedirect 會在客戶端呈現跳轉后的URL地址;使用<jsp:forward>完全是在服務器上進行,瀏覽器地址欄中的地址保持不變
使用<jsp:forward>實際是一個request內置對象, SendRedirect是兩個。
2 處理HTTP文件頭
通過response對象可以設置HTTP響應報頭,其中,最常用的是禁用緩存、設置頁面自動刷新和定時跳轉網頁。下面分別進行介紹。
1、禁用緩存
<%
response.setHeader(“Cache-Control”, “no-store”);
response.setDateHeader(“Expires”,0);
%>
2、設置頁面自動刷新
<%
response.setHeader(“refresh”, “10”);
%>
3、定時跳轉網頁
<%
response.setHeader(“refresh”, “5; URL=login.jsp”);
%>
3 設置輸出緩沖
服務器要輸出到客戶端的內容不會直接寫到客戶端,而是先寫到一個輸出緩沖區,在計算機術語中,緩沖區被定義為暫時放置輸入或輸出資料的內存。
當滿足以下三種情況之一,就會把緩沖區的內容寫到客戶端。
JSP頁面的輸出信息已經全部寫入到了緩沖區;
緩沖區已滿;
在JSP頁面中,調用了response對象的flushBuffer()方法或out對象的flush()方法
例:設置緩沖區的大小為32KB
response.setBufferSize(32)
0KB,則表示不緩沖。
三、session對象
1、創建及獲取客戶的會話
2、從會話中移動指定的綁定對象
3、銷毀Session
4、會話超時的管理
5、session對象的應用
session對象表示 “會話”。一次會話是瀏覽器和服務器的一次交互過程。
在JSP頁面中,可以用session對象來保存特定用戶的會話信息,session 的類型是javax.servlet.http.HttpSession
session對象在客戶端向該頁面發出請求時建立,在session到期或者關閉瀏覽器時撤銷。
session對象常用來在不同的頁面之間傳遞數據
session的工作原理:客戶首次訪問服務器的一個頁面時,服務器就會為該客戶分配一個session對象,同時為該session對象指定一個唯一的ID,并將該ID號發送到客戶端并寫入到Cookie中,使得客戶端與服務器的session建立一一對應關系。
當客戶繼續訪問服務上的其他資源時,不再為該客戶分配新的session,直到客戶端瀏覽器關閉、超時或調用session的invalidate()方法使其失效,客戶端與服務器的會話結束。
當客戶端重新打開瀏覽器訪問網站時,服務器會重新為客戶分配一個session對象,重新分配session id。
常見功能: 保存用戶的登錄信息,購物車等
session對象
HTTP協議是一種無狀態協議。
?一個用戶向服務器發出請求(request),然后服務器返回響應(response),連接就被關閉了,在服務器端不保留連接的有關信息,因此當下一次連接時,服務器已沒有以前的連接信息了,無法判斷這一次連接和以前的連接是否屬于同一用戶。 內置session(會話)對象記錄有關連接的信息.由Tomcat服務器負責創建。
session對象的Id
當一個用戶首次訪問Web服務目錄中的某個JSP頁面時,JSP引擎為其產生一個session對象。
為用戶產生的session對象調用相應的方法可以存儲用戶在訪問各個頁面期間提交的各種信息。為用戶產生的session對象中含有一個String類型的Id號,JSP引擎同時將這個Id號發送到用戶端、存放在用戶的瀏覽器的Cookie中。。每個用戶都對應著一個session對象(該用戶的會話),不同用戶的session對象互不相同,即具有不同的Id號碼。
session對象存儲數據
session對象使用下列方法處理數據:
(1) public void setAttribute(String key, Object obj)
session對象可以調用該方法將參數Object指定的對象obj添加到session對象中,并為添加的對象指定了一個索引關鍵字,如果添加的兩個對象的關鍵字相同,則先前添加的對象被清除。
(2)public Object getAttibute(String key)
獲取session對象含有的關鍵字是key的對象。由于任何對象都可以添加到session對象中,因此用該方法取回對象時,應強制轉化為原來的類型
(3)public Enumeration getAttributeNames()
session對象調用該方法產生一個枚舉對象,該枚舉對象使用nextElemets()遍歷session中的各個對象所對應的關鍵字。
(4)public long getCreationTime() ?
session對象調用該方法可以獲取該對象創建的時間,單位是毫秒。
(5)public void removeAttribute(String name)
session對象調用該方法移掉關鍵字key對應的對象.
?session對象的生存期限
一個用戶在某個web服務目錄的session對象的生存期限
依賴于session對象是否調用invalidate()方法使得session無效
依賴于session對象達到了設置的最長的“發呆”狀態時間
依賴于服務器是否被關閉。
重新設置各個Web服務目錄下的session對象的最長“發呆”時間。打開Tomcat安裝目錄conf目錄下的配置文件web.xml,找到
<session-config>
<session-timeout>30</session-timeout>
</session-config>
將其中的30修改成所要求的值即可,如果時間修改為負數,發呆時間不受限制。
session對象可以使用下列方法獲取或設置和生存時間有關的信息:
public long getCreationTime() 獲取session創建的時間,單位是毫秒。
● public long getLastAccessedTime() 獲取session最后一次被操作的時間。
● public int getMaxInactiveInterval() 獲取session最長的“發呆”時間(單位是秒)。
● public void setMaxInactiveInterval(int interval) 設置session最長的“發呆”時間
● public boolean isNew() 判斷session是否是一個新建的對象。
● invalidate() 使session無效。
?使用session設置時間間隔????????????????????
為了限制用戶在很短的時間間隔內不斷地使用某頁面所提供的某種功能,而影響其他用戶使用該頁面所提供的功能,因此我們可以利用用戶的session來設置用戶使用當前頁面所提供功能的間隔時間,從而限制該用戶等待若干“時間”后,再次使用該頁面所提供的功能。
1、 創建及獲取客戶的會話
通過session對象可以存儲或讀取客戶相關的信息。例如,用戶名或購物信息等。這可以通過session對象的setAttribute()方法和getAttribute()方法實現。
1. setAttribute()
response.setAttribute(String name, Object obj); (“username”, “綠草”)
name:用于指定作用域在session范圍內的變量名
obj: 保存在session范圍內的對象。
2. getAttribute()
response.getAttribute(String name); (“username”)
name:用于保存在session范圍內的關鍵字
2 、從會話中移除指定的綁定對象
對于存儲在session會話中的對象,如果想將其從session會話中移除,可以使用session對象的removeAttribute()方法,該方法的語法格式如下:removeAttribute(String name)
參數說明如下:
name:用于指定作用域在session范圍內的變量名。一定要保證該變量在session范圍內有效,否則將拋出異常。
例:將保存在session會話中的username對象移除的代碼如下:
<%response.removeAttribute(“username”);%>
3、 銷毀session
雖然當客戶端長時間不向服務器發送請求后,session對象會自動消失,但對于某些實時統計在線人數的網站(例如,聊天室),每次都等session過期后,才能統計出準確的人數,這是遠遠不夠的。所以還需要手動的銷毀session。通過session對象的invalidate()方法可以銷毀session,其語法格式如下:session.invalidate();
?session對象被銷毀后,將不可以再使用該session對象了。如果在session被銷毀后,再調用session對象的任何方法,都將報出“Session already invalidated”異常。
4、 會話超時管理
在應用session對象時應該注意session的生命周期。一般來說,session的生命周期在20~30分鐘之間。當用戶首次訪問時將產生一個新的會話,以后服務器就可以記住這個會話狀態,當會話生命周期超時時,或者服務器端強制使會話失效時,這個session就不能使用了。
在開發程序時應該考慮到用戶訪問網站時可能發生的各種情況,比如用戶登錄網站后在session的有效期外進行相應操作,用戶會看到一張錯誤頁面。這樣的現象是不允許發生的。為了避免這種情況的發生,在開發系統時應該對session的有效性進行判斷。
設置會話生命周期的方法:
pgetLastAccessedTime():返回客戶端最后一次與會話相關聯的請求時間
pgetMaxInactiveInterval():以秒為單位返回一個會話內兩個請求最大時間間隔
psetMaxInactiveInterval()以秒為單位設置session的有效時間
例:設置session的有效期為10000秒,超出這個范圍session將失效
session.setMaxInactiveInterval(10000);
cookie和session區別
在某種程度上,cookie和session內置對象有些相似,但二者存在本質的差別:
Cookie存在于客戶端,session存在于服務器
Cookie主要用戶保存脫機數據,而session內置對象主要用于跟蹤用戶會話
但他們也存在一些共同點,那就是不論是cookie還是session內置對象都需要瀏覽器支持cookie并且沒有禁用cookie。
5、session對象的應用
session是較常用的內置對象之一,與requeset對象相比其作用范圍更大。下面通過實例介紹session對象的應用。?? session對象與URL重寫
如果用戶端不支持Cookie,那么用戶在不同網頁之間的session對象可能是互不相同的,因為如果服務器無法將Id存放到用戶端,就不能建立session對象和用戶的一一對應關系。可以通過URL重寫來實現session對象的惟一性。
所謂URL重寫,就是當用戶從一個頁面重新鏈接到另一個頁面時,通過向這個新的URL添加參數,把session對象的Id傳帶過去,這樣就可以保障用戶在該網站各個頁面中的session對象是完全相同的。
可以使用response對象調用encodeURL()或encodeRedirectURL()方法實現URL重寫.
如果用戶瀏覽器不支持Cookie,則不能建立session對象與用戶的一一對應關系,因此需要url重寫。
格式:String str=response.encodeRedirectURL(“new.jsp”);?然后鏈接目標寫成<%=str%>
session對象存儲數據
session可以保存用戶訪問web服務目錄期間的有關數據。
格式:public void setAttribute(name, value)
public Object getAttribute(String name)
例:session.setAttribute(“item”,“鋼筆”);(購買頁面)
String 商品=(String)session.getAttribute(“item”); (結賬頁面)
out.println(“<%=商品%>”);????????????????????
四、application對象
1、訪問應用程序初始化參數
2、管理應用程序環境屬性
application對象代表一個Web應用,負責提供應用程序在服務器運行時的一些全局信息,它在服務器啟動時創建,直到服務器關閉時消失。
application對象的類型是javax.servlet.ServletContext
所有訪問這個應用的用戶都共享一個application對象,application對象可以用來存儲與應用相關的信息.
有關屬性操作的方法:
public void setAttribute(name,value)設置請求對象中的一個屬性。
public java.lang.Object getAttribute(String key)返回name指定的屬性值,若name不存在則返回null
public java.util.Enumeration getAttributeNames()返回request對象所有屬性的名稱,并將其封裝在Enumeration對象中。
public void removeAttribute(String name)通過指定名,移除application中的某個對象
application對象的常用方法
(1)public void setAttribute(String key, Object obj)
application對象可以調用該方法將參數Object指定的對象 obj添加到application對象中,并為添加的對象指定了一個索引關鍵字,如果添加的兩個對象的關鍵字相同,則先前添加對象被清除。(2)public Object getAttibue(String key)
獲取application對象含有的關鍵字是key的對象。由于任何對象都可以添加到application對象中,因此用該方法取回對象時,應強制轉化為原來的類型。
(3)public Enumeration getAttributeNames()
application對象調用該方法產生一個枚舉對象,該枚舉對象使用nextElemets()遍歷application中的各個對象所對應的關鍵字。
(4)public void removeAttribue(String key)
從當前application對象中刪除關鍵字是key的對象。
(5)public String getServletInfo()
application對象可以調用該方法獲取Servlet編譯器的當前版本的信息。
1 訪問應用程序初始化參數
application對象提供了對應用程序初始化參數進行訪問的方法。
應用程序初始化參數在web.xml文件中進行設置,web.xml文件位于Web應用所在目錄下的WEB-INF子目錄中。在web.xml文件中通過<context-param>標記配置應用程序初始化參數。
2 管理應用程序環境屬性
與session對象相同,也可以在application對象中設置屬性。
與session對象不同的是,session只是在當前客戶的會話范圍內有效,當超過保存時間,session對象就被收回;而application對象在整個應用區域中都有效。application對象管理應用程序環境屬性的方法分別介紹如下。
getAttributeNames():獲得所有application對象使用的屬性名。
getAttribute(String name):從application對象中獲取指定對象名。
setAttribute(String key,Object obj):使用指定名稱和指定對象在application對象中進行關聯。???? removeAttribute(String name):從application對象中去掉指定名稱的屬性。
利用App.對象統計訪問頁面的用戶數
count.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<% int n;
???if(application.getAttribute("count")==null)
???{???application.setAttribute("count","1");??}
???else
???{???n=Integer.parseInt((String)application.getAttribute("count"));
??????n++;
??????application.setAttribute("count",Integer.toString(n)); }
%>
這個頁面已經被瀏覽了<%=(String)application.getAttribute("count")%>次</h>
</html>
五、 out對象
1、向客戶端輸出數據
out對象一個最基本的應用就是向客戶端瀏覽器輸出信息。可以輸出各種數據類型的數據,在輸出非字符串類型的數據時,會自動轉換為字符串進行輸出。
out對象提供了print()和println()兩種向頁面中輸出信息的方法,
print()方法輸出完后,不換行
println()方法在輸出完后,換行。
print和println可以輸出各種格式的數據類型,但最終都轉換成字符串。
2.管理響應緩沖
方法說明
clear()?? ?清除緩沖區中的內容
clearBuffer()?? ?清除當前緩沖區中的內容
flush()?? ?刷新流
isAutoFlush()?? ?檢測當前緩沖區已滿時是自動清空,還是拋出異常
getBufferSize()?? ?獲取緩沖區的大小
out對象是一個輸出流,用來向用戶端輸出數據。
out對象可調用如下的方法用于各種數據的輸出,
out.print(Boolean),out.println(Boolean) 用于輸出一個布爾值。
out.print(char),out.println(char)? 輸出一個字符。
out.print(double),out.println(double) 輸出一個雙精度的浮點數。
out.print(float),out.println(float) 用于輸出一個單精度的浮點數。
out.print(long),out.println(long)? 輸出一個長整型數據。
out.print(String),out.println(String) 輸出一個字符串對象的內容。
out.newLine()? 輸出一個換行符。
out.flush() 輸出緩沖區里的內容。
out.close() 關閉流。
JSP程序利用out對象將網頁內容輸出時,都要和客戶端做一次連接,并且會為此消耗不少的資源;
因此可以將要輸出的內容放在一個固定大小的緩沖區中,等到緩沖區滿時再一次將內容送往客戶端,這就要將autoFlush設為true,否則緩沖區滿時將產生IOException錯誤
out對象對緩沖區進行操作常用方法:
public abstract void clear()清空緩沖區中的內容,不將數據發送至客戶端。
public abstract void clearBuffer()清空緩沖區中的內容,并將緩沖區中的數據發送到客戶端。
public abstract void getBuffersize()獲得緩沖區的大小,對比回顧page指令
public abstract void getRemaing()返回緩沖區剩余空間的大小
public abstract void flush()輸出緩沖區中的數據。
public abstract void isAutoFlush()獲取AutoFlush的取值
其它內置對象
六、獲取會話范圍的pageContext對象
方法說明
forward(java.lang.String relativeUtlpath)?? ?把頁面轉發到另一個頁面
getAttribute(String name)?? ?獲取參數值
getAttributeNamesInScope(int scope)?? ?獲取某范圍的參數名稱的集合,返回值為java.util.Enumeration對象
getException()?? ?返回exception對象
getRequest()?? ?返回request對象
getResponse()?? ?返回response對象
getSession()?? ?返回session對象
getOut()?? ?返回out對象
getApplication?? ?返回application對象
setAttribute()?? ?為指定范圍內的屬性設置屬性值
removeAttribute()?? ?刪除指定范圍內的指定屬性
七、讀取Web.xml配置信息的config對象
方法說明
getServletContext()?? ?獲取Servlet上下文
getServletName()?? ?獲取Servlet服務器名
getInitParameter()?? ?獲取服務器所有初始參數名稱,返回值為java.util.Enumeration對象
getInitParameterNames()?? ?獲取服務器中name參數的初始值
八、應答或請求的page對象
方法說明
getClass()?? ?返回當前Object的類
hashCode()?? ?返回該Object的哈希代碼
toString()?? ?把該Object類轉換成字符串
equals(Object o)?? ?比較該對象和指定的對象是否相等
九、獲取異常信息的exception對象
方法說明
getMessage()?? ?返回exception對象的異常信息字符串
getLocalizedmessage()?? ?返回本地化的異常錯誤
toString()?? ?返回關于異常錯誤的簡單信息描述
fillInStackTrace()?? ?重寫異常錯誤的棧執行軌跡