【转载】JAVAEE之内置对象和属性范围
原文:JAVAEE之內(nèi)置對(duì)象和屬性范圍
內(nèi)置對(duì)象和屬性范圍
- ? 四種屬性范圍
- ? 九個(gè)內(nèi)置對(duì)象
1.內(nèi)置對(duì)象
如果說想要使用一個(gè)對(duì)象,必須new 出來,但是在我們的jsp操作中,發(fā)現(xiàn)我們使用過的out,request對(duì)象沒有進(jìn)行實(shí)例化,類似于這樣的對(duì)象,我們叫做jsp的內(nèi)置對(duì)象,也就是收不需要實(shí)例化的對(duì)象,總共有9個(gè)。
| 1 | pageContext | javax.servlet.jsp.PageContext |
| 2 | request | javax.servlet.http.HttpServletRequest |
| 3 | response | javax.servlet.http.HttpServletResponse |
| 4 | session | javax.servlet.http.HttpSession |
| 5 | application | javax.servlet.ServletContext |
| 6 | config | javax.servlet.ServletConfig |
| 7 | out | javax.servlet.jsp.jspWriter |
| 8 | page | java.lang.Object |
| 9 | exception | java.lang.Throwable |
2.屬性范圍
在jsp中,有四種屬性范圍,所謂屬性范圍,就是指在一個(gè)jsp中設(shè)置了屬性,是否可以在其他頁面能夠訪問。四種屬性范圍分別指的是以下的四種:
- ? ·屬性范圍在當(dāng)前頁面有效:設(shè)置了一個(gè)屬性,在設(shè)置屬性的頁面可以取得屬性,跳轉(zhuǎn)到其他頁面則無法取得設(shè)置的屬性
- ? ·屬性范圍在服務(wù)端跳轉(zhuǎn)范圍內(nèi)有效:一個(gè)頁面設(shè)置了屬性,然后經(jīng)過服務(wù)端跳轉(zhuǎn)(n次),依然可以取得設(shè)置的屬性
- ? ·屬性范圍在一次會(huì)話中有效:一個(gè)頁面設(shè)置屬性,無論是經(jīng)過服務(wù)端還是客戶端跳轉(zhuǎn),只要瀏覽器不重啟,設(shè)置的屬性都可以取得。
- ? ·屬性范圍在服務(wù)器上下文中有效:頁面設(shè)置的屬性,無論是經(jīng)過客戶端還是服務(wù)端跳轉(zhuǎn),無論是哪一個(gè)會(huì)話,只要服務(wù)器不重啟,設(shè)置的屬性都可以訪問。
| 1 | public void setAttribute(String name,Object val) | 設(shè)置屬性 |
| 2 | pulblic Object getAttribute(String name) | 取得屬性 |
| 3 | public void removeAttribute(String name) | 刪除屬性 |
2.1page屬性范圍
page屬性范圍也就是我們上面所提到的第一種屬性范圍,使用的是pageContext這個(gè)內(nèi)置對(duì)象設(shè)置和取得的,指的是在一個(gè)頁面使用pageContext設(shè)置了屬性之后,本頁面可以通過pageContext取得設(shè)置的屬性,跳轉(zhuǎn)到其他頁面之后無法取得設(shè)置的屬性。要注意的一點(diǎn),所謂的page屬性范圍使用的是pageContext這個(gè)內(nèi)置對(duì)象設(shè)置和取得的。
<%@page contentType="text/html; charset=utf-8"%> <%//設(shè)置屬性pageContext.setAttribute("company","廈門");pageContext.setAttribute("address","廈門市");pageContext.setAttribute("tel","0592-2565166"); %> <!-- 取得設(shè)置的屬性 --> <h1><%=pageContext.getAttribute("company") %></h1> <h1><%=pageContext.getAttribute("address") %></h1> <h1><%=pageContext.getAttribute("tel") %></h1>如果現(xiàn)在我們通過服務(wù)端跳轉(zhuǎn),看能不能取得設(shè)置的屬性
<%@page contentType="text/html; charset=utf-8"%> <!-- 取得設(shè)置的屬性 --> <h1><%=pageContext.getAttribute("company") %></h1> <h1><%=pageContext.getAttribute("address") %></h1> <h1><%=pageContext.getAttribute("tel") %></h1> <h1>這是pageAttributeDemo02.jsp</h1>發(fā)現(xiàn)我們通過服務(wù)端跳轉(zhuǎn)后取不到之前設(shè)置的page范圍的屬性了,如果說想要通過服務(wù)端跳轉(zhuǎn)后也能取得設(shè)置的屬性,我們必須使用第二種屬性范圍。
2.2request屬性范圍
request屬性范圍,是第二種屬性范圍,也就是說設(shè)置的屬性在當(dāng)前頁面可以取得,通過服務(wù)端跳轉(zhuǎn)之后也可以取得設(shè)置的屬性。
<%@page contentType="text/html; charset=utf-8"%> <%//設(shè)置屬性request.setAttribute("company","廈門");request.setAttribute("address","廈門市");request.setAttribute("tel","0592-2565166"); %> <!-- 取得設(shè)置的屬性 --> <h1><%=request.getAttribute("company") %></h1> <h1><%=request.getAttribute("address") %></h1> <h1><%=request.getAttribute("tel") %></h1> <jsp:forward page="pageAttributeDemo02.jsp"></jsp:forward> <%@page contentType="text/html; charset=utf-8"%> <!-- 取得設(shè)置的屬性 --> <h1><%=request.getAttribute("company") %></h1> <h1><%=request.getAttribute("address") %></h1> <h1><%=request.getAttribute("tel") %></h1> <h1>這是pageAttributeDemo02.jsp</h1>通過
<%@page contentType="text/html; charset=utf-8"%> <%//設(shè)置屬性request.setAttribute("company","廈門");request.setAttribute("address","廈門");request.setAttribute("tel","0592-2565166"); %> <!-- 取得設(shè)置的屬性 --> <h1><%=request.getAttribute("company") %></h1> <h1><%=request.getAttribute("address") %></h1> <h1><%=request.getAttribute("tel") %></h1> <jsp:forward page="requestAttributeDemo02.jsp"></jsp:forward>現(xiàn)在,我們發(fā)現(xiàn),request范圍屬性經(jīng)過多次跳轉(zhuǎn)之后,依然可以取得設(shè)置的屬性,那么現(xiàn)在如果經(jīng)過客戶端跳轉(zhuǎn)呢?
<%@page contentType="text/html; charset=utf-8"%> <%//設(shè)置屬性request.setAttribute("company","廈門");request.setAttribute("address","廈門");request.setAttribute("tel","0592-2565166"); %> <!-- 取得設(shè)置的屬性 --> <h1><%=request.getAttribute("company") %></h1> <h1><%=request.getAttribute("address") %></h1> <h1><%=request.getAttribute("tel") %></h1> <a href="requestAttributeDemo03.jsp">客戶端跳轉(zhuǎn)</a> <%@page contentType="text/html; charset=utf-8"%> <!-- 取得設(shè)置的屬性 --> <h1><%=request.getAttribute("company") %></h1> <h1><%=request.getAttribute("address") %></h1> <h1><%=request.getAttribute("tel") %></h1> <h1>這是requestAttributeDemo03.jsp</h1>通過程序運(yùn)行結(jié)果發(fā)現(xiàn),通過客戶端跳轉(zhuǎn)不能夠取得設(shè)置的request范圍的屬性,那么如果現(xiàn)在我就想要通過客戶端取得設(shè)置的屬性呢?那么我們可以使用第三種范圍屬性。
3.session
session屬性范圍就是我們第三種屬性范圍,也就是之前提到過的,屬性范圍在一次會(huì)話中有效。是無論經(jīng)過客戶端還是服務(wù)端跳轉(zhuǎn),都可以取得設(shè)置的屬性,當(dāng)然前提是瀏覽器不能重啟。
<%@page contentType="text/html; charset=utf-8"%> <%//設(shè)置屬性session.setAttribute("company","廈門");session.setAttribute("address","廈門");session.setAttribute("tel","0592-2565166"); %> <!-- 取得設(shè)置的屬性 --> <h1><%=session.getAttribute("company") %></h1> <h1><%=session.getAttribute("address") %></h1> <h1><%=session.getAttribute("tel") %></h1><a href="sessionAttributeDemo03.jsp">客戶端跳轉(zhuǎn)</a> <%@page contentType="text/html; charset=utf-8"%> <!-- 取得設(shè)置的屬性 --> <h1><%=session.getAttribute("company") %></h1> <h1><%=session.getAttribute("address") %></h1> <h1><%=session.getAttribute("tel") %></h1> <h1>02</h1> <%@page contentType="text/html; charset=utf-8"%> <!-- 取得設(shè)置的屬性 --> <h1><%=session.getAttribute("company") %></h1> <h1><%=session.getAttribute("address") %></h1> <h1><%=session.getAttribute("tel") %></h1> <h1>03</h1>以上的程序說明我們session范圍的屬性,在經(jīng)過客戶端或者服務(wù)端跳轉(zhuǎn)之后,設(shè)置的屬性依然可以取得。現(xiàn)在我們來重啟一下瀏覽器:通過操作發(fā)現(xiàn),重啟瀏覽器之后,取不到設(shè)置的session范圍屬性了,那么如果現(xiàn)在想要在瀏覽器重啟后取得設(shè)置的屬性,我們必須使用第四種屬性范圍。
4.application屬性范圍
application范圍屬性就是第四種范圍屬性,屬性是設(shè)置在服務(wù)器的上下文中,只要服務(wù)器不重啟,那么設(shè)置的屬性統(tǒng)統(tǒng)都可以取得。無論是經(jīng)過客戶端你還是服務(wù)端還是瀏覽器重啟,都可取得設(shè)置的屬性。
<%@page contentType="text/html; charset=utf-8"%> <%//設(shè)置屬性application.setAttribute("company","廈門");application.setAttribute("address","廈門");application.setAttribute("tel","0592-2565166"); %> <!-- 取得設(shè)置的屬性 --> <h1><%=application.getAttribute("company") %></h1> <h1><%=application.getAttribute("address") %></h1> <h1><%=application.getAttribute("tel") %></h1><a href="applicationAttributeDemo03.jsp">客戶端跳轉(zhuǎn)</a> <%@page contentType="text/html; charset=utf-8"%> <!-- 取得設(shè)置的屬性 --> <h1><%=application.getAttribute("company") %></h1> <h1><%=application.getAttribute("address") %></h1> <h1><%=application.getAttribute("tel") %></h1> <h1>03</h1>設(shè)置的application范圍的屬性,無論是通過客戶端還是服務(wù)端或者瀏覽器重啟,都可以取得設(shè)置的屬性。那么現(xiàn)在如果服務(wù)器重啟呢?通過操作發(fā)現(xiàn),重啟服務(wù)器后,之前設(shè)置的屬性取不到了,那么如果想要在重啟服務(wù)器后取得設(shè)置的屬性呢?那是沒有辦法的。
3.屬性范圍使用說明
在開發(fā)中,我們常用的屬性范圍就是request和session范圍,那么在開發(fā)中,怎么區(qū)分使用二者呢?一般來說,只對(duì)于同一個(gè)功能的屬性的傳遞,使用request范圍屬性。那么對(duì)于session范圍來說,主要還是用于登陸上面。
4.關(guān)于pageContext屬性的進(jìn)一步說明
上面我們講解的是四種屬性范圍,實(shí)際上四種屬性范圍都是通過pageContext設(shè)置的,在pageContext中,setAttribute()方式實(shí)際上被重載過:
·設(shè)置屬性:
public abstract void setAttribute(java.lang.String name, java.lang.Object value)public abstract void setAttribute(java.lang.String name,java.lang.Object value,int scope)對(duì)于這兩個(gè)方法,第一個(gè)方法是我們之前一直在使用的,對(duì)于第二個(gè)方法,相比第一個(gè)方法多了一個(gè)參數(shù)(int scope),實(shí)際上這個(gè)參數(shù)就是指定屬性范圍的參數(shù):
? ·APPLICATION_SCOPE
? ·PAGE_SCOPE
? ·SESSION_SCOPE
? ·REQUEST_SCOPE
也就是說,通過這個(gè)方法,我們可以設(shè)置四種屬性范圍。
<%@page contentType="text/html; charset=utf-8"%> <%pageContext.setAttribute("j1m","111",PageContext.SESSION_SCOPE); %> <a href="pageContextDemo02.jsp">跳轉(zhuǎn)</a> <%@page contentType="text/html; charset=utf-8"%> <h1>02</h1> <h1><%=session.getAttribute("jjm") %></h1>總結(jié),知道九個(gè)內(nèi)置對(duì)象(pageContext,session,request,response,applicatino,config,page,exception),充分掌握四種屬性范圍(page僅對(duì)于自己的頁面?zhèn)髦?#xff1b;request應(yīng)用于服務(wù)端傳值,但是客戶端跳轉(zhuǎn)不能傳值;session一般應(yīng)該于用戶的登錄注冊(cè)保存在一次會(huì)話中,會(huì)話結(jié)束,屬性值消失;application屬性范圍應(yīng)用于整個(gè)服務(wù)器中,服務(wù)器關(guān)閉屬性值消失。
轉(zhuǎn)載于:https://www.cnblogs.com/tieway59/p/10859225.html
總結(jié)
以上是生活随笔為你收集整理的【转载】JAVAEE之内置对象和属性范围的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python-基础day10
- 下一篇: navicat连接客户端报错