jsp有九大內置物件
page:表示當前jsp頁面,類似于this;
pageContext:JSP 的頁面容器,用于訪問 page、request、application 和 session 的屬性,可以存放資料,是域物件之一;
request:請求,可以用來存放資料,是域物件之一;
response:回應請求,處理資訊回傳客戶端;
out:輸出內容到網頁;
session:可以存放資料,域物件之一;
application:就是servletContext改了個名,可以存放資料,域物件之一;
config:這是一個 Servlet 配置物件,用于 Servlet 和頁面的初始化引數;
exception:例外處理,只有在 JSP 頁面的 page 指令中指定 isErrorPage 的取值 true 時,才可以在本頁面使用 exception 物件,
上面提到了四個域物件,分別是
pageContext
request
session
application 它們四個都有存取資料的功能,都下面三個方法: setAttribute(String name, Object o)將屬性保存到域物件中 getAttribute(String name)獲取域物件中的屬性值 removeAttribute(String name)將屬性從域物件中移除 區別在于它們三個存盤資料的域不同pageContext:存盤的資料只在當前頁面有效,也就是本頁面存,本頁面取,頁面死了資料就死了;
request:存盤的資料僅在本次請求有效,但是請求轉發時資料仍然有效;
session:存盤的資料僅在當前會話范圍有效,關閉瀏覽器后失效;
application:資料存盤在服務器中,只有服務器關閉資料才會失效, 下面我們對這四個與物件進行一次存取測驗: 首先建立一個Demo001.jsp用于存資料并且立刻取資料<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>資料存</title> </head> <body> <% pageContext.setAttribute("name", "金木三001"); request.setAttribute("name", "金木三002"); session.setAttribute("name", "金木三003"); application.setAttribute("name", "金木三004"); String a = (String)pageContext.getAttribute("name"); String b = (String)request.getAttribute("name"); String c = (String)session.getAttribute("name"); String d = (String)application.getAttribute("name"); %> <h1><%= a %></h1> <h1><%= b %></h1> <h1><%= c %></h1> <h1><%= d %></h1> </body> </html>

沒有問題,四個都能讀取到
然后我們建立一個Demo002.jsp,換一個頁面來讀取資料
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>資料存</title> </head> <body> <% String a = (String)pageContext.getAttribute("name"); String b = (String)request.getAttribute("name"); String c = (String)session.getAttribute("name"); String d = (String)application.getAttribute("name"); %> <h1><%= a %></h1> <h1><%= b %></h1> <h1><%= c %></h1> <h1><%= d %></h1> </body> </html>

可以發現,pageContext和request存的資料已經取不到了
然后我們關閉瀏覽器,重新打開直接訪問Demo002.jsp

和想的一樣,session存的資料也沒有了
然后我們修改一下Demo001.jsp,給它加上一句請求轉發,將請求轉發到Demo002.jsp試一下
修改后的Demo001.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>資料存</title> </head> <body> <% pageContext.setAttribute("name", "金木三001"); request.setAttribute("name", "金木三002"); session.setAttribute("name", "金木三003"); application.setAttribute("name", "金木三004"); String a = (String)pageContext.getAttribute("name"); String b = (String)request.getAttribute("name"); String c = (String)session.getAttribute("name"); String d = (String)application.getAttribute("name"); pageContext.forward("Demo002.jsp"); %> </body> </html>

我們發現,request存盤的資料還在,所以說請求轉發能夠攜帶請求中存盤的資料, (本文僅作個人學習記錄用,如有紕漏,敬請指正)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/500498.html
標籤:Java
下一篇:零基礎學Java(13)方法引數
