雖然Jsp已經(jīng)是中古時期的技術(shù)了,但是對于很多新入門的程序員來說,學(xué)會Jsp不僅是了解JavaEE設(shè)計原理的重要環(huán)節(jié),也是了解現(xiàn)在盛行的前后端分離技術(shù)的源流的基礎(chǔ)。而且,很多程序員可能會接觸到的一些中古時期的代碼修改,很可能需要對Jsp頁面進行修改,因此,了解并會使用Jsp對Java Web程序員來講,還是非常必要的。
下面我們就來了解一個Jsp內(nèi)置對象的相關(guān)知識。
一、什么是Jsp內(nèi)置對象
顧名思義,Jsp內(nèi)置對象就是Jsp本身自帶的,不需要new一下也能直接使用的對象,為提高程序員的開發(fā)效率,Jsp將一些內(nèi)置對象預(yù)定義好,這樣就可以直接使用了。Jsp的內(nèi)置對象是web容器實現(xiàn)和管理的,在使用的時候可以直接調(diào)用,而不需要實例化。但是在項目里,需要引入servlet和jsp的jar包。
Jsp內(nèi)置對象使用的代碼實例如下:
二、Jsp有哪些內(nèi)置對象
Jsp的內(nèi)置對象主要有以下9種:
1、out對象
out對象是Jsp內(nèi)置的向客戶端輸出內(nèi)容的對象。out對象繼承于java.io.Writer,其類型為javax.servlet.jsp.JspWriter,與與HttpServletResponse接口的getWriter()方法獲得PrintWriter對象對象的功能相同。out對象的常用方法包括print, println, newline等。
2、request對象
request對象用于存儲客戶端向服務(wù)端發(fā)送的請求信息。其類型為javax.servlet.http.HttpServletRequest。request的常用方法有getProtocol、getRemoteAddr、getRemoteHost、getQueryString、getMethod、getParameter、setAttribute、getParameterNames、getParameterValues、getRequestURI等。代碼示例如下:
3、response對象
與request相對應(yīng),response對象表示服務(wù)器端對客戶端的響應(yīng),其類型為javax.servlet.http.HttpServletResponse。大部分時候,程序無需使用response來響應(yīng)客戶端請求,因為有個更簡單的響應(yīng)對象——out,它代表頁面輸出流,直接使用out生成響應(yīng)更簡單。但out是JspWriter的實例,JspWriter是Writer的子類,Writer是字符流,無法輸出非字符內(nèi)容。假如需要在JSP頁面動態(tài)生成一副位圖、或者一個PDF文檔,使用out作為相應(yīng)對象將無法完成,此時需要response作為響應(yīng)輸出。除此之外,還可以使用response來重定向請求,以及用于客戶端增加Cookie。代碼示例如下:
4、session對象
HTTP是無狀態(tài)協(xié)議,這意味著每次客戶端檢索網(wǎng)頁時,都要單獨打開一個服務(wù)器連接,因此服務(wù)器不會記錄下先前客戶端請求的任何信息。在這種情況下,Jsp利用servlet提供的HttpSession來識別用戶,存儲這個用戶的所有訪問信息。這就是session對象,其類型為javax.servlet.http.HttpSession。默認(rèn)情況下,JSP允許會話跟蹤,一個新的HttpSession對象將會自動地為新的客戶端實例化。禁止會話跟蹤需要顯式地關(guān)掉它,通過將page指令中session屬性值設(shè)為false來實現(xiàn)。
<%@ page session="false" %>
其代碼示例如下:
5、application對象
application對象是jsp中的全局變量,用于用戶間數(shù)據(jù)的共享,其類型為ServletContext。在從服務(wù)器啟動到關(guān)閉的過程中,application對象一直存在。在任何地方對application對象進行操作,都會影響到其它用戶的訪問。其代碼示例如下:
6、exception對象
exception對象是Jsp內(nèi)置的異常處理對象。其類型為java.lang.Throwable。代表JSP腳本中產(chǎn)生的錯誤和異常,是JSP頁面機制的一部分。但是在JSP腳本中無須處理異常。所以,如果想使用jsp的exception對象,必須把頁面中的isErrorPage設(shè)為true。如下圖所示:
實際上,JSP腳本所包含的所有可能出現(xiàn)的異常都可以交給錯誤處理頁面進行處理。但是需要指定errorPage,如圖所示:
這樣的話,如果程序中出現(xiàn)什么異常,就可以直接使用exception.toString()來打印出異常了。
7、page對象
page對象即為當(dāng)前jsp頁面的內(nèi)置對象,類似開java里面的this,為處理當(dāng)前請求時,該頁面實現(xiàn)類的實例。在轉(zhuǎn)換后的Servlet類的代碼中,可以看到Object page = this。其類型為java.long.Object。page對象常以指令形式為Jsp頁面定義全局屬性。類型于:
<%@ page autoFlush = "false" %>
<%@ page buffer = "16kb" autoflush = "true" %>
<%@ page contentType = "text/html:charset=UTF-8" %>
8、pageContext對象
pageContext對象代表頁面上下文,其類型為javax.servlet.jsp.PageContext。用來代表整個JSP頁面。該對象主要用于訪問 JSP 之間的共享數(shù)據(jù),使用pageContext可以訪問page、request、session、application范圍的變量。JSP頁面中只需將pageContext對象傳遞給某個Java類的實例對象,在該Java對象中就可以訪問和調(diào)用其他隱式對象的功能了。在Jsp中,pageContext可以獲取到其它的內(nèi)置對象,雖然本身內(nèi)置對象在jsp中可以直接使用,但是在el表達(dá)式中卻不能直接使用,所以可以通過pageContext來獲取。
9、config對象
config對象代表當(dāng)前JSP配置信息,其類型為ServletConfig,config對象常用來獲取Servlet的初始化參數(shù)。例如:
<%=config.getServletName()%>
<%=config.getInitParameter("name")%>
三、Jsp內(nèi)置對象的使用范圍
在這些內(nèi)置對象中:
pageContext僅對當(dāng)前頁面有效,頁面跳轉(zhuǎn)后無效;
request對同一次請求有效,重定向后無效;
session對同一次會話有效,無論怎么跳轉(zhuǎn),都有效,關(guān)閉/切換瀏覽器后無效,從登錄到退出之間全部有效;
application 整個服務(wù)器運行期間有效,切換瀏覽器也依然有效。除非服務(wù)器端重啟了服務(wù)。
以上就是Jsp內(nèi)置對象的使用方法,在平時的工作中,你會用到嗎?
聯(lián)系客服