JSP基礎:JSP九大內置對象

前言:本人2014級大專,現在於仁和集團商業信息部作爲軟件開發員實習,在學校的微軟IT分院,學了一年的JAVA軟件技術,自我感覺學的還是挺充實的,一年多的時間沒有浪費,三年制一年半學習,一年半實習,一週六天上課,時間還是挺緊的。現出來工作,學校發的書也帶出來了。在學校主要是以練爲主,很多東西知道怎麼用,但是卻不太清楚其真正的含義。爲了將學校所學的知識鞏固在腦海,所以自己結合所學重新看一遍書,跟着書上的代碼敲一遍,以前很多不明白的,現在也搞懂了不少,基本上關於JSP的博文,都是我從《Java Web 從入門到精通》上所搬下來的,畢竟出版的圖書其內容語句還是很精煉的。然後結合自己的語言,再次將部分繁瑣的文字去除,寫出的博文,用以以後淡忘時,能夠一翻就能回想起這些知識,也可作爲一些初學者的快速入門參考。
PS:當碰到沒見過的方法,上面有陌生的單詞時,先別忙着把整個方法複製下來到去搜索,你可以先把其中的單詞結合方法先猜測其意思,然後再搜索翻譯。這樣能加深印象。其實很多方法的用處光從其中用到的單詞釋義就能猜測出來的。並且這樣也對你的單詞積累有幫助。我用的獵豹瀏覽器上自帶的獵豹翻譯就挺方便的。正文中一些方法我也會將其中單詞的釋義寫出來。方便讀者觀閱。

正文:

由於JSP使用Java作爲腳本語言,所以JSP將具有強大的對象處理能力,並且可以動態創建Web頁面內容。但Java語法在使用一個對象前,需要實例化這個對象,這其實是一件比較繁瑣的事情。JSP爲了簡化開發,提供了一些內置對象,用來實現很多JSP應用。在使用JSP內置對象時,不需要先定義這些對象,直接使用即可。

在JSP中一共預先定義了9個這樣的對象,分別爲:request、response、session、application、out、pageContext、config、page和exception。

一、request

request對象封裝了由客戶端產生的HTTP請求的所有細節,主要包括HTTP頭信息、系統信息、請求方式和請求參數等。通過request對象提供的相應方法可以處理客戶端瀏覽器提交的HTTP請求中的各項參數。

常用:
request.getParameter(“參數名”);
在jsp頁面或後臺中用以獲取form表單傳遞的參數,也可以直接在URL中傳遞,例:<ahref=”select.jsp?id=1”>搜索</a>,就傳遞了一個參數名爲id,值爲1的參數。如要同時指定多個參數,使用符號&分隔。
request.setAttribute(String name,Object object);
進行請求轉發時,利用這個方法將數據存入request對象,作爲Object對象存入
request.getAttribute(String name);
進行請求轉發後,利用這個方法將已存入request對象的數據根據,name變量名取出,因爲取出來時是Object對象,所以需要轉換類型
request.getCookies();
從request中獲得所有Cookie對象,用Cookie[] 集合接收。

獲取客戶端信息:
  <body>

       客戶端提交信息的方式:<%=request.getMethod()%><br />

       使用的協議:<%=request.getProtocol()%><br />

       獲取發出請求字符串的客戶端地址:<%=request.getRequestURI()%><br />

       獲取發出請求字符串的客戶端地址:<%=request.getRequestURL()%><br />

       獲取提交數據的客戶端IP地址:<%=request.getRemoteAddr()%><br />

       獲取服務器端口號:<%=request.getServerPort()%><br />

       獲取服務器的名稱:<%=request.getServerName()%><br />

       獲取客戶端的主機名:<%=request.getRemoteHost()%><br />

       獲取客戶端所請求的腳本文件的文件路徑:<%=request.getServletPath()%><br />

       獲得Http協議定義的文件頭信息Host的值:<%=request.getHeader("host")%><br />

       獲得Http協議定義的文件頭信息User-Agent的值:<%=request.getHeader("user-agent") %><br />

       獲得Http協議定義的文件頭信息accept-language的值:<%=request.getHeader("accept-language") %><br/>

       獲得請求文件的絕對路徑:<%=request.getSession().getServletContext().getRealPath("")%>

 </body>
效果:

二、response

response對象用於響應客戶請求,向客戶端輸出信息。它封裝了JSP產生的響應,併發送到客戶端以響應客戶端的請求。請求的數據可以是各種數據類型,甚至是文件。resopnse對象在JSP頁面內有效。

常用:
response.sendRedirect(String path);
該方法可將網頁重定向到另一個頁面。在客戶端瀏覽器上將會得到跳轉的地址,並重新發送請求鏈接。用戶可以從瀏覽器的地址欄中看到跳轉後的地址。進行重定向操作後,request中的屬性全部失效,並且開始一個新的request對象。
注:使用該方法,方法之後的代碼已經沒有意義了,因爲已經重定向到別的頁面了,如該方法後還有其他代碼,可能產生錯誤。

處理HTTP文件頭
1、禁用緩存
response.setHeader(“Cache-Control”,”no-store”); //Cache-Control釋義:高速緩存控制  no-store釋義:不儲存
response.setDateHeader(“Expires”,0) //Expires釋義:過期時間/是否過期
在默認情況下,瀏覽器將會對顯示的網頁內容進行緩存。這樣,當用戶再次訪問相關網頁時,瀏覽器會判斷網頁是否有變化,如果沒有變化則直接顯示緩存中的內容,這樣可以提高網頁的顯示速度。但是對於一些安全性比較高的網站。通常需要禁用緩存。
2、設置頁面自動刷新
response.setHeader(“refresh”,”10”);
使網頁每10秒刷新一次。該功能可以用來製作一個簡單的動態鬧鐘。
3、定時跳轉網頁
response.setHeader(“refresh”,”5;URL=login.jsp”);
以2爲基礎,使網頁5秒後自動跳轉到指定的頁面。

設置輸出緩衝:
通常情況下,服務器要輸出到客戶端的內容不會直接寫到客戶端,而是先寫到一個輸出緩衝區。當滿足以下三種情況之一,就會把緩衝區的內容寫到客戶端。
---JSP頁面的輸出信息已經全部寫入到緩衝區。
---緩衝區已滿。
---在JSP頁面中,調用了response對象的flushBuffer()方法或out對象的flush()方法。

response對象對緩衝區進行配置的5種方法
flushBuffer()——強制將緩衝區的內容輸出到客戶端。
setBufferSize(int size)——設置緩衝區的大小,單位爲KB。
getBufferSize()——獲取相應所使用的緩衝區的實際大小,如果沒有使用緩衝區,則返回0。
reset()——清除緩衝區的內容,同時清楚狀態碼和報頭。
isCommitted()——檢測服務器端是否已經把數據寫入到了客戶端。
例:response.setBufferSize(1024);設置緩衝區的大小爲1024KB。
如果將緩衝區的大小設置爲0,則表示不緩衝。

三、session

Session在網絡中被稱爲會話。由於HTTP協議是一種無狀態協議,也就是當一個客戶向服務器發出請求,服務器接收請求,並返回響應後,該連接就結束了,而服務器並不保存相關的信息。爲了彌補這一缺點,HTTP協議提供了session。通過session可以在應用程序的Web頁面間進行跳轉時,保存用戶的狀態,使整個用戶會話一直存在下去,直到關閉瀏覽器。但是,如果一個會話中,客戶端長時間不向服務器發出請求,session對象就會自動消失。這個時間取決於服務器,Tomcat默認爲30分鐘。這個時間也可以通過提供的方法進行修改。

常用:
session.setAttribute(String name,Object obj);
該方法用於將信息保存在session範圍內。
session.getAttribute(String name);
該方法用於獲取保存在session範圍內的信息。
與request的set與getAttribute方法一樣,這裏也是作爲Object對象進行存取信息的,取出來時也要進行類型轉換。
removeAttrivute(String name);
根據變量名,將保存在session會話中對應的對象移除;

銷燬session:
session.invalidate();       //invalidate:使無效/使作廢
session對象被銷燬後,將不可以再使用session對象了。如果在調用該方法後,再調用session.的任何方法,都將報出Session already invalidated異常。

會話超時的管理:
在應用session對象時應該注意session的生命週期。一般來說,session的生命週期在20~30分鐘之間。當用戶首次訪問時將產生一個新的會話,服務器就可以記住這個會話狀態,當會話生命週期超時,或者服務器強制使會話失效時,這個session就不能用了。
這就是爲什麼你用一個賬號登錄了某個網站,然後二三十分鐘之後你刷新頁面。網站會提示你重新登錄的原因。

在session對象中提供了設置會話生命週期的方法:
getLastAccessedTime();——返回客戶端最後一次與會話相關聯的請求時間。
getMaxInactiveInterval();——以秒爲單位返回一個繪畫內兩個請求最大時間間隔。
setMaxInactiveInterval();——以秒爲單位設置session的有效時間。

四、application

application對象用於保存所有應用程序中的公有數據。它在服務器啓動時自動創建,在服務器停止時銷燬。當application對象沒有被銷燬時,所有用戶都可以共享該application對象。與session對象相比,application對象的生命週期更長,類似於系統的“全局變量”

訪問應用程序初始化參數:
application.getInitParameter(String name);
該方法用於返回web.xml文件中已命名的參數值。
例:
web.xml設置了url這個參數

<context-param>
<param-name>url</param-name>
<param-value>jdbc:sqlserver://localhost:1433;</param-value>
</context-param>
</web-app>
那麼利用application.getInitParameter(“url”);方法
就得到了值:jdbc:sqlserver://localhost:1433;

管理應用程序環境屬性:
與session對象相同,也可以在application對象中設置屬性。不同的是,session只是在當前客戶的會話範圍內有效,超過會話時間,session對象就被收回;而application對象在整個應用區域中都有效。
getAttributeNames();——獲得所有application對象使用的屬性名。
getAttribute(String name);——從application對象中獲取指定對象名。
setAttribute(String key,Object obj)——使用指定名稱和指定對象 application對象中進行關聯。
removeAttribute(String name)——從application對象中去掉指定名稱的屬性。

五、out

out對象一個最基本的應用就是向客戶端瀏覽器輸出信息。out對象可以輸出各種數據類型的數據,在輸出非字符串類型數據時,會自動轉換爲字符串進行輸出。

常用:
out.print();
該方法用於向客戶端瀏覽器輸出信息。通過該方法向客戶端瀏覽器輸出信息與使用JSP表達式輸出信息效果相同。<% out.pirnt(“Hello”)%> 與 <%= ”Hello” %>效果相同。
out.println();
和print()方法相同,區別在於println()在內容輸出後,會自動輸出一個換行符。

管理相應緩衝:
out對象一個比較重要的功能就是對緩衝區進行管理,方法如下
clear()——清除緩衝區中的內容。類似於重置響應流,以便於重新開始操作,清除緩衝區中的數據,若緩衝區已經是空的,則會產生IOException異常
clearBuffer()——清除當前緩衝區中的內容。而且即使緩衝區已經是空的,也能訪問該方法。
flush()——刷新流。
isAutoFlush——檢測當前緩衝區已滿時,是自動清空,還是拋出異常。
getBufferSize()——獲取緩衝區大小。

六、pageContext

獲取頁面上下文的pageContext對象十一個比較特殊的對象,通過它可以獲取JSP頁面的request、response、application、exception等對象。pageContext對象的創建和初始化都是由容器來完成的,JSP頁面中可以直接使用pageContext對象。


pageContext對象的常用方法:
forward(java.lang.String relativeUtlpath);——把頁面轉發到另一頁面。
getAttribute(String);——獲取參數值。
getAttributeNamesInScope(int scope);——獲取某範圍的參數名稱的集合,返回值爲java.util.Enumeration對象。
getException();——返回exception對象。
getRequest();——返回request對象。
getResponse();——返回response對象。
getSession();——返回session對象。
getOut();——返回out對象。
getApplication();——返回application對象。
setAttribute();——爲指定範圍內的屬性設置屬性值。
removeAttribute();——刪除指定範圍內的指定屬性。

pageContext對象在實際JSP開發過程中很少使用,因爲reqeust和response等對象均爲內置對象,如果通過pageContext來調用這些對象比較麻煩,可以直接調用其相關方法實現具體功能。

七、config

config對象主要用於取得服務器的配置信息。通過pageContext對象的getServletConfig()方法可以獲取一個config對象。當一個Servlet初始化時,容器把某些信息通過config對象傳遞給這個Servlet。開發者可以在web.xml文件中爲應用程序環境中的Servlet程序和JSP頁面提供初始化參數。


config對象的常用方法:
getServletContext();——獲取Servlet上下文。
getServletName();——獲取Servlet服務器名。
getInitParameter();——獲取服務器所有初始化參數名稱,返回值爲java.util.Enumeration對象。
getInitParameterNames();——獲取服務器中name參數的初始值。

八、page

page對象代表JSP本身,只有在JSP頁面內纔是合法的。Page對象本質上是包含當前Servlet接口引用的變量,可以看作是this關鍵字的別名。
page對象的常用方法:
getClass();——返回當前Object的類。
hashCode();——返回該Object的哈希代碼。
toString();——把該Object類轉換成字符串。
equals(Object o);——比較該對象和指定對象是否相等。

九、exception

一、exception對象用來處理JSP文件執行時發生的所有錯誤和異常,只有在page指令中設置爲isErrorPage屬性值爲true的頁面中纔可以使用,在一般的JSP頁面中使用該對象將無法編譯JSP文件。Exception對象幾乎定義了所有異常狀況,在Java程序中,可以使用try…catch關鍵字來處理異常狀況,如果在JSP頁面中出現沒有捕捉到的異常,就會生出exception對象,並把exception對象傳送到在page指令中設定的錯誤頁面中,然後在錯誤頁面中處理相應的exception對象。
exception對象的常用方法:
getMessage();——返回exception對象的異常信息字符串。
getLocalizedmessage();——返回本地化的異常錯誤。
toString();——返回關於異常錯誤的簡單信息描述。
fillInStackTrace();——重寫異常錯誤的棧執行軌跡。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章