標籤:
一、JSP域對象
1.JSP屬性範圍(域物件範圍)
JSP提供了四個域對象,分別是pageContext、request、session、application。
pageContext: 屬性範圍僅限於當前JSP頁面。一個屬性只能在一個頁面取得,跳轉到其他頁面無法取得。
request: 屬性作用範圍僅限於同一個請求。一個頁面中設定的屬性,只要經過了伺服器的跳轉,跳轉之後的頁面都可以繼續取得。
session: 儲存在session對象中的屬性可以被屬於同一個會話的所有Servlet和JSP頁面訪問。瀏覽器開啟到關閉稱作一次會話。
application: 儲存在application對象中的屬性可以被同一個Web應用程式的所有Servlet和JSP頁面訪問。
2.域對象的相關方法
(1)setAttribute()
設定屬性的方法。之前所講解的四種屬性範圍,實際上都是通過pageContext屬性範圍設定上的。開啟pageContext所在的說明文檔。
PageContext類繼承了JspContext類,在JspContext類中定義了setAttribute方法,如下:
此方法中存在一個scope的整型變數,此變數就表示一個屬性的儲存範圍。
後面有一個int類型的變數,在PageContext中可以發現有4種。
public static final int PAGE_SCOPE = 1; public static final int REQUEST_SCOPE = 2; public static final int SESSION_SCOPE = 3; public static final int APPLICATION_SCOPE = 4;
這個setAttribute()方法如果不寫後面的int類型的scope參數,則此參數預設為PAGE_SCOPE,則此時setAttribute()方法設定的就是page屬性範圍,如果傳遞過來的int型別參數scope為REQUEST_SCOPE,則此時setAttribute()方法設定的就是request屬性範圍,同理,傳遞的scope參數為SESSION_SCOPE和APPLICATION_SCOPE時,則表示setAttribute()方法設定的就是session屬性範圍和application屬性範圍。
(2)getAttribute(String name)
擷取指定的屬性。
(3)getAttributeNames()
擷取所有屬性名稱字組成的Enumeration對象。
(2)removeAttribute(String name)
移除指定的屬性。
二、請求轉寄和重新導向
1.用法
<html> <head> <title>My JSP ‘hello.jsp‘ starting page</title> </head> <body> <form action="ForwardServlet">年齡: <input type="text" name="age"><br><input type="submit" value="提交"></form> </body></html>
ForwardServlet.java
public class ForwardServlet extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{String age = req.getParameter("age");System.out.println("ForwardServlet: age = " + age);//請求的轉寄//1.調用HttpServletRequest的getRequestDispatcher()方法擷取RequestDispatcher對象。String path = "TestServlet";RequestDispatcher dispatcher = req.getRequestDispatcher("/" + path);//2.調用RequestDispatcher對象的forward()方法dispatcher.forward(req,resp);}public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{doGet(req,resp);}}
TestServlet.java
public class TestServlet extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{String age = req.getParameter("age");System.out.println("TestServlet: age = " + age);}public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{doGet(req,resp);}}
結果:
ForwardServlet: age = 123
TestServlet: age = 123
如果把ForwardServlet內部重新導向到TestServlet。
public class ForwardServlet extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{String age = req.getParameter("age");System.out.println("ForwardServletage = " + age);//請求的重新導向String path = "TestServlet";resp.sendRedirect(path);}public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{doGet(req,resp);}}
結果:
ForwardServletage = 23
TestServlet: age = null
JavaWeb總結(四)—JSP深入解析