javascript
JSP作用域与特殊对象
引言:
????????JSP中一共有四大作用域,所謂的“作用域”是指“信息共享的范圍”,即一個“信息”能夠在多大的范圍內是有效的。
一、作用域通信對象:
JSP內置對象的四個作用域分別為:pageContext、request、session、application 。
作用域表如下:
| pageContext | 當前頁內有效 |
| request | 同一個請求內有效 |
| session | 同一個會話內有效 |
| application | 同一個應用內有效 |
關于pageContext:
pageContext對象代表當前頁面的上下文環境,類型為javax.servlet.jsp.PageContext。
- 作用1:可以獲取頁面所有相關的屬性
- 作用2:可以得到當前頁面中所有其他的JSP隱含對象(out、request、response、session、application等)及其所支持的屬性
四個內置對象的常用方法均為:
- void setAttribute(String key, Object value):以鍵/值的方式,將一個對象的值存放到其中。
- Object getAttribute(String key):根據名稱去獲取內置對象中存放對象的值。
有效范圍總結:
-
pageContext.setAttribute() 設置的屬性只在當前頁面中有效,通過pageContext.getAttribute() 來獲取。
-
request. setAttribute() 設置的屬性在同一個請求中有效,通過request.getAttribute() 來獲取。
適用情況:<jsp:forward> -
session. setAttribute() 設置的屬性在同一個會話中有效,同一會話中的其他頁面可以通過session.getAttribute() 來獲取,即便這些頁面是在不同的請求中。
適用情況:
- application.setAttribute() 設置的屬性在同一個應用中有效,同一應用中其他頁面可以通過application.getAttribute() 來獲取,即便這些頁面可能在不同的會話中。
例題:
統計訪問頁面的用戶數
<%Integer count = (Integer) application.getAttribute("count");if (count != null) {count++;} else {count = 1;}application.setAttribute("count", count); %> <%Integer i = (Integer) application.getAttribute("count");out.println("統計訪問量:目前有" + i + "人訪問過本網站"); %>- 問題:如果將application對象換成session對象,會有什么不同?
答:訪問量會一直是1。
二、特殊對象:
JSP的特殊對象一共有四個:cookie、config、page、exception。
1、cookie對象:
cookie的寫入,要結合response對象來實現。
寫入Cookie的主要步驟:
1、創建cookie對象。
2、設定cookie的屬性(一般設置Cookie的有效期)。
3、調用response.addCookie(Cookie c)方法將其寫入到客戶端。
Cookie的有效期:
- 過期屬性是按秒為單位記錄的,使用正整數。
- 負值表示該cookie的生存期是當前瀏覽器會話。
- 零值表示立即刪除該cookie。
- 如果不設置cookie的有效期,就不能在硬盤上保存cookie信息,一旦瀏覽器關閉,cookie信息就消失。
- Cookie有效期的設置必須在將Cookie寫入客戶端之前進行。
對于cookie的讀取,要結合request對象來實現:
<% Cookie a[ ]=request.getCookies(); //根據設置時的cookie個數決定數組元素個數 for( int i=0;i<a.length;i++){ String name=(String)( a[i].getName() );String value=(String) (a[i].getValue() );out.println(name+”:”+value);} %>2、config對象:
- config對象:主要用來獲取服務器的配置信息,它實現的是javax.servlet.ServletConfig接口。
- 使用config對象可以獲取Web應用配置描述文件web.xml的相關信息。
config對象的常用方法:
- public String getInitParameter(String name) 獲取服務器指定name參數的初始值。
- public ServletContext getServletContext()獲取Servlet的上下文。
- public String getServletName() 獲取Servlet的服務器名。
例:
Web.xml中設置初始化參數,
頁面中通過config對象訪問:
<%ServletContext sc=config.getServletContext(); %><%=sc.getInitParameter("copyright") %>3、page對象:
- 使用 page 對象可以訪問 Servlet 類的所有變量和方法,相當于this,代表當前頁面本身的對象。
- java.lang.Object類的一個實例 。
例:
<% @ page info=”我的信息” contentType=”text/html;charset=GBK”%> <html> <body><%=((javax.servlet.jsp.HttpJspPage)page).getServletInfo()%> </body> </html>4、exception對象:
exception對象用于處理 JSP 頁面中的錯誤。
例:
<%@ page isErrorPage="true" %> <html><head><title>隱式對象</title></head><body><h1>隱式對象:異常</h1>已檢測到以下錯誤:br><b><%= exception %></b><br><% exception.printStackTrace(out); %></body> <html>可以指定別的頁面輸出報錯信息:
a.Jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" errorPage="error.jsp"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body><%!int a[] = { 0, 1, 2 };%><%=a[3]%> </body> </html>error.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" isErrorPage="true"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body>錯誤原因:<%=exception.getMessage()%><%=exception.toString()%> </body></html>運行結果:
🆗,大致就這些。
總結
以上是生活随笔為你收集整理的JSP作用域与特殊对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JSP脚本与指令元素
- 下一篇: JSP——JavaBean应用