servlet的4大作用域和9大內置對象

序號 隱式對象 說明 描述 作用域
1 request 轉譯後對應HttpServletRequest/ServletRequest對象 得到用戶信息 Request
2 response 轉譯後對應HttpServletRespons/ServletResponse對象 服務器向客戶端的迴應信息 Page
3 session 轉譯後對應HttpSession對象 用來保存用戶信息 Session
4 application 轉譯後對應ServletContext對象 所有用戶的共享信息 Application
5 out 轉譯後對應JspWriter對象,其內部關聯一個PringWriter對象 用於頁面輸出 Page
6 page 轉譯後對應this 指當前頁面轉換後的servlet類的實例 Page
7 config 轉譯後對應this 服務器配置,可以取得初始化參數 Page
8 exception 轉譯後對應Throwable對象,代表由其他JSP頁面拋出的異常對象,只會出現於JSP錯誤頁面(isErrorPage設置爲true的JSP頁面) 表示jsp頁面所發生的異常,在錯誤頁中才起作用 Page
9 pageContext 轉譯後對應PageContext對象,它提供了JSP頁面資源的封裝,並可設置頁面範圍屬性 jsp頁面容器 Page

只有在jsp腳本和jsp表達式中,才能使用內置對象!
流轉對象:request,response,out
作用域對象:application,session,request,pageContext。
在這裏插入圖片描述

Jsp隱含變量

1、out來源於Java.io.Writer類,它用於發送輸出流到客戶端。
2、request來源於javax.servlet.http.HttpServletRequest接口。它被關聯到每一個HTTP請求。
3、response 來源於javax.servlet.http.HttpServletResponse。response對象用於把取得的數據返回到客戶端。
4、pageContext 提供訪問JSP頁面的命名空間。它也提供用來訪問其他的JSP隱含對象。
5、session 來源於javax.servlet.http.HttpSession。它用於存儲客戶端請求的信息,因此它是有狀態交互式的。
6、application 來源於javax.servlet.ServletContext。
7、config 來源於ServletConfig,它包含了當前JSP/Servlet所在的WEB應用的配置信息。
8、page 來源於當前被訪問JSP頁面的實例化。它實際使用的是JSP轉換成的Servlet。
9、exception 用於捕獲JSP拋出的異常。它只有在JSP頁面屬性isErrorPage=true時纔可用。

out對象:

out.jsp:

<body>
	<%
	out.println("first line <br />");
	response.getWriter().println("second line <br />");
	%>
</body>

結果:

second line 
 first line 

out對象的數據放在緩衝區中,等jsp頁面加載完畢纔會加載處理

pageContext對象

①javax.servlet.jsp.PageContext(抽象類)類型,pageContext 對象直譯時可以稱作“頁面上下文”對象,代表的是當前頁面運行的一些屬性。此對象提供自身和其他3個作用域層次的屬性查詢和修改能力,同時可以獲取其他8個內置對象。它也提供了轉發請求到其它資源和包含其他資源的方法:該對象的方法都是抽象方法。作用域爲page(頁面執行期)。
②常用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope,一般情況下pageContext對象用到得也不是很多,只有在項目所面臨的情況比較複雜的情況下,纔會利用到頁面屬性來輔助處理。

他有4個作用範圍:

pageContext.PAGE_SCOPE:表示頁面範圍
pageContext.REQUEST_SCOPE:表示請求範圍
pageContext.SESSION_SCOPE:表示會話範圍
pageContext.APPLICATION_SCOPE:表示web應用程序範圍

pageContex.jsp:

	<%
		//獲取request對象
		HttpServletRequest req=(HttpServletRequest)pageContext.getRequest();
		//設置page範圍內屬性
		pageContext.setAttribute("str", "java",pageContext.PAGE_SCOPE);
		//設置request範圍屬性
		req.setAttribute("str", "java web");
		//獲得page範圍屬性
		String str1=(String) pageContext.getAttribute("str",pageContext.PAGE_SCOPE);
		String str2=(String) pageContext.getAttribute("str",pageContext.REQUEST_SCOPE);	
	%>
	<%="page範圍:"+str1 %><br />
	<%="request範圍:"+str2 %><br />

結果:

page範圍:java
request範圍:java web

request對象

①javax.servlet.ServletRequest的子類型,equest 對象代表的是來自客戶端的請求,例如我們在FORM表單中填寫的信息等,封裝了由WEB瀏覽器或其它客戶端生 成地HTTP請求的細節(參數,屬性,頭標和數據等),是最常用的對象。作用域爲request(用戶請求期)。
②常用的方法有:getParameter、getParameterNames 和getParameterValues等,通過調用這幾個方法來獲取請求對象中所包含的參數的值,方法可查看API。

response對象

①javax.servlet.ServletResponse的子類型,response 對象代表的是對客戶端的響應,此對象封裝了返回到HTTP客戶端的輸出,向頁面作者提供設置響應頭標和狀 態碼的方式。經常用來設置HTTP標題,添加cookie,設置響應內容的類型和狀態,發送HTTP重定向和編碼URL等。作用域爲page(頁面執行期)。
②也就是說可以通過response 對象來組織發送到客戶端的數據。但是由於組織方式比較底層,所以不建議普通讀者使用,需要向客戶端發送文字時直接使用。
③常用方法有:sendRedirect、setContentType、encodeRedirectURL、addHeader、addCookie、getWriter等

session對象

①avax.servlet.http.HttpSession類型,主要用於跟蹤對話。HttpSession是一個類似哈希表的與單一WEB瀏覽器會話相關的對象,它存在於HTTP請求之間,可以存 儲任何類型的命名對象。作用域session(會話期)。若不需要在請求之間跟蹤會話對象,可以通過在page指令中指定session=“false”。

②session對象代表服務器與客戶端所建立的會話,當需要在不同的JSP頁面中保留客戶信息的情況下使用,比如在線購物、客戶軌跡跟蹤等。“session” 對象建立在 cookie的基礎上,所以使用時應注意判斷一下客戶端是否打開了cookie。注意:不要把cookie也理解爲九大內置對象之一,cookie主要是實現了session的作用。

概要:
HTTP是無狀態(stateless)協議;
Web Server 對每一個客戶端請求都沒有歷史記憶;
Session用來保存客戶端狀態信息;
由Web Server 寫入;
存於客戶端;
客戶端的每次訪問都把上次的session記錄傳遞給Web Server;
Web Server讀取客戶端提交的session來獲取客戶端的狀態信息。

③常用方法有:getAttribute、setAttribute、removeAttribute、setMaxInactiveInterval、getId、 getValue、 getValueNames和putValue等。

application對象

①javax.servlet.ServletContext類型,作用域是application(整個程序運行期)。它提供了關於服務器版本,應用級初始化參數和應用內資源絕對路徑,註冊信息的方 式,負責提供應用程序在服務器中運行時的一些全局信息。

②常用的方法有:getMimeType、getRealPath、getResourceAsStream等。

③獲取ServletContext對象的途徑:

方法一:通過GenericServlet提供的 getServletContext()

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext3 = getServletContext();
}

方法二:通過ServletConfig提供的getServletContext()
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext2 = getServletConfig().getServletContext();
}

方法三:通過HttpServletRequest獲取
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext1 = req.getServletContext();
}

方法四:通過HttpSession獲取。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = req.getSession().getServletContext();
}

servlet的環境通過調用getServletConfig().getContext()方法獲得。

config對象

①javax.servlet.ServletConfig類型,“config” 對象提供一些配置信息,作用域爲page(頁面執行期)。

②常用的方法有:getInitParameter和getInitParameterNames,以獲得Servlet初始化時的參數。

exception對象

exception.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <%
    int a=4;
    int b=0;
   %>
輸出結果爲:<%=(a/b) %> <%--此處會產生異常--%>
</body>
</html>

error.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%=exception.getMessage()%><br>
</body>
</html>

page對象

①java.lang.Object類型,指向頁面自身的方式。作用域爲page(頁面執行期)。

②“page” 對象代表了正在運行的由JSP文件產生的類對象,不建議一般讀者使用。

四個作用域:

四個域對象:

pageContext  --  page域   (本jsp對象)                           

request  --  request域(本請求)

session  -- session域(本會話)

application  --  context域(web工程)

1)域對象作用:保存數據和獲取數據,用於數據共享。

2)域對象方法:

setAttribute("name",Object) 保存數據

getAttribute("name")  獲取數據

removeAttribute("name") 清除數據

3)域對象作用範圍:

page域: 只能在當前jsp頁面中使用(當前頁面)

request域: 只能在同一個請求中使用(轉發)

session域: 只能在同一個會話(session對象)中使用(私有的)

 context域: 只能在同一個web應用中使用。(全局的)

1、如果把變量放到pageContext裏,就說明它的作用域是page,它的有效範圍只在當前jsp頁面裏。 從把變量放到pageContext開始,到jsp頁面結束,你都可以使用這個變量。
2、如果把變量放到request裏,就說明它的作用域是request,它的有效範圍是當前請求週期。所謂請求週期,就是指從http請求發起,到服務器處理結束,返回響應的整個過程。就算在這個過程中,使用request對象的getRequestDispatcher(“path”).forward(request, response)的請求轉發方式跳轉了多個jsp頁面,在這些頁面裏你都可以使用這個變量,但如果使用了response對象的sendRedirect(“path”)重定向方式,那這個request域就會失去效果。因爲response的sendRedirect(“path”)重定向方式,跟request對象的getRequestDispatcher(“path”).forward(request, response)的請求轉發方式是有區別的,因爲重定向涉及到瀏覽器的兩次請求和兩次響應,故第二次的request會將第一次的request域刷新。
3、如果把變量放到session裏,就說明它的作用域是session,有效範圍是當前會話。所謂當前會話,是指從用戶打開瀏覽器開始,到用戶關閉瀏覽器這中間的過程。這個過程可能包含多個請求響應。也就是說,只要用戶不關瀏覽器,服務器就有辦法知道這些請求是一個人發起的,整個過程被稱爲一個會話(session),而放到會話中的變量。
4、如果把變量放到application裏,就說明它的作用域是application,它的有效範圍是整個應用。整個應用是指從應用啓動,到應用結束。我們沒有說“從服務器啓動,到服務器關閉”是因爲一個服務器可能部署多個應用,當然你關閉了服務器,就會把上面所有的應用都關閉了。application作用域裏的變量,它們的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用。與上述三個不同的是,application裏的變量可以被所有用戶共用。如果用戶甲的操作修改了application中的變量,用戶乙訪問時得到的是修改後的值。

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