成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JSP第二篇【內(nèi)置對象的介紹、4種屬性范圍、應(yīng)用場景】

lookSomeone / 1834人閱讀

摘要:什么是內(nèi)置對象引擎在調(diào)用對應(yīng)的時,會傳遞或創(chuàng)建個與開發(fā)相關(guān)的對象供使用。九個內(nèi)置對象對象對象的得到緩存大小得到未使用緩存的大小對象用于向瀏覽器輸出數(shù)據(jù),與之對應(yīng)的是的對象。種屬性范圍到目前為止,我們已經(jīng)學(xué)了種屬性范圍了。

什么是JSP內(nèi)置對象
JSP引擎在調(diào)用JSP對應(yīng)的jspServlet時,會傳遞或創(chuàng)建9個與web開發(fā)相關(guān)的對象供jspServlet使用。JSP技術(shù)的設(shè)計者為便于開發(fā)人員在編寫JSP頁面時獲得這些web對象的引用,特意定義了9個相應(yīng)的變量,開發(fā)人員在JSP頁面中通過這些變量就可以快速獲得這9大對象的引用

細心的朋友會發(fā)現(xiàn),我們沒有在JSP頁面上定義過out對象,卻可以直接使用!其實out對象就是JSP內(nèi)置對象之一。

九個內(nèi)置對象:

pageContext

page

config

request

response

session

application

exception

out

out對象

out對象的API

int getBufferSize()【得到緩存大小】

int getRemaining()【得到未使用緩存的大小】

boolean isAutoFlush()

void println()

void flush()

void close()

void clearBuffer()

void clear()

out對象用于向瀏覽器輸出數(shù)據(jù),與之對應(yīng)的是Servlet的PrintWriter對象。然而這個out對象的類型并不是PrintWriter,是JspWriter

我們可以簡單理解為:JspWriter就是帶緩存的PrintWrieter。

out對象的原理如下:

只有向out對象中寫入了內(nèi)容,且滿足如下任何一個條件時,out對象才去調(diào)用ServletResponse.getWriter方法,并通過該方法返回的PrintWriter對象將out對象的緩沖區(qū)中的內(nèi)容真正寫入到Servlet引擎提供的緩沖區(qū)中

設(shè)置page指令的buffer屬性關(guān)閉了out對象的緩存功能

out對象的緩沖區(qū)已滿

整個JSP頁面結(jié)束

一般我們在JSP頁面輸出都是用表達式(<%=%>),所以out對象用得并不是很多

request

內(nèi)置對象request其實就是HttpServletRequest,在Servlet講解的時候已經(jīng)詳細說明了,沒什么好說的

response

內(nèi)置對象response其實就是HttpServletResponse,在Servlet講解的時候已經(jīng)詳細說明了,沒什么好說的

config

內(nèi)置對象config其實就是ServletConfig,在Servlet講解的時候已經(jīng)詳細說明了,沒什么好說的

session

內(nèi)置對象session其實就是HttpSession。,在Servlet講解的時候已經(jīng)詳細說明了,沒什么好說的

注意:在page指令配置如下信息,session將不可使用

    <%@page session="false" %>
application

內(nèi)置對象application其實就是ServletContext對象,在Servlet講解的時候已經(jīng)詳細說明了,沒什么好說的

page

內(nèi)置對象page是HttpJasPage對象,其實page對象代表的就是當(dāng)前JSP頁面,是當(dāng)前JSP編譯后的Servlet類的對象。也就是說:page對象相當(dāng)于普通java類的this

exception

內(nèi)置對象exception是java.lang.Exception類的對象,exception封裝了JSP頁面拋出的異常信息。exception經(jīng)常被用來處理錯誤頁面

前面我們已經(jīng)講過了怎么設(shè)置錯誤頁面了,下面我們就來簡單使用一下exception對象吧

1.jsp頁面

    <%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %>
    
    
    
        
    
    
    
    <%--模擬空指針異常的錯誤--%>
    <%
    
        String sss = null;
        sss.length();
    %>
    
    
    

error.jsp頁面


    <%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
    
    
    
        錯誤頁面
    
    
    
    <%
        out.println("程序拋出了異常:" + exception);
    %>
    
    
    

效果:

pageContext

pageContext是內(nèi)置對象中最重要的一個對象,它代表著JSP頁面編譯后的內(nèi)容(也就是JSP頁面的運行環(huán)境)!

pageContext獲取8個內(nèi)置對象

既然它代表了JSP頁面編譯后的內(nèi)容,理所當(dāng)然的:它封裝了對其他8大內(nèi)置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內(nèi)置對象!

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        獲取八大內(nèi)置對象
    
    
    <%
    
        System.out.println(pageContext.getSession());
        System.out.println(pageContext.getRequest());
        System.out.println(pageContext.getResponse());
    
        System.out.println(pageContext.getException());
    
        System.out.println(pageContext.getPage());
        System.out.println(pageContext.getServletConfig());
        System.out.println(pageContext.getServletContext());
        System.out.println(pageContext.getOut());
    
    %>
    
    
    

看下效果:

pageContext作為域?qū)ο?/b>

類似于request,session,ServletContext作為域?qū)ο蠖?strong>都有以下三個方法:

setAttribute(String name,Objcet o)

getAttribute(String name)

removeAttribute(String name)

當(dāng)然了,pageContext也不例外,pageContext也有這三個方法!

pageContext本質(zhì)上代表的是當(dāng)前JSP頁面編譯后的內(nèi)容,作為域?qū)ο蠖?,它就代表著?dāng)前JSP頁面(也就是page)!也就是說:pageContext域?qū)ο笾辉趐age范圍內(nèi)有效,超出了page范圍就無效了!

首先來看看在page范圍內(nèi)能不能使用

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        使用page域?qū)ο?/title>
    </head>
    <body>
    <%
        pageContext.setAttribute("name", "zhongfucheng");
    %>
    <%
        String value = (String) pageContext.getAttribute("name");
        System.out.println(value);
    %>
    
    </body>
    </html>

</pre>
<p>效果如下:</p>
<p><script type="text/javascript">showImg("https://segmentfault.com/img/remote/1460000013228736?w=839&h=563");</script></p>

<p>我們現(xiàn)在來試驗一下<strong>是不是超出了page范圍就無效了!</strong>
</p>
<p><strong>在2.jsp中request域?qū)ο笤O(shè)置屬性</strong></p>

<pre>
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>request域?qū)ο笤O(shè)置屬性
    
    
    <%
        //這是request域?qū)ο蟊4娴膬?nèi)容
        request.setAttribute("name","zhongfucheng");
    %>

    <%--跳轉(zhuǎn)到1.jsp中--%>

    
    
    
    

企圖在1.jsp中pageContext取出request存進去的屬性

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        在page域?qū)ο螳@取屬性
    
    
    
    <%
        //企圖獲取request域?qū)ο蟠孢M的屬性
        String value = (String) pageContext.getAttribute("name");
        System.out.println(value);
    %>
    
    
    

效果如下:

pageContext本質(zhì)上代表著編譯后JSP的內(nèi)容,pageContext還可以封裝了訪問其他域的方法

上面的pageContext默認是page范圍的,但pageContext對象重載了set、get、removeAttribute這三個方法

getAttribute(String name,int scope)

setAttribute(String name,Object value,int scope)

removeAttribute(String name,int scope)

多了一個設(shè)置域范圍的一個參數(shù),如果不指定默認就是page。當(dāng)然了,pageContext把request、session、application、page這幾個域?qū)ο蠓庋b著了靜態(tài)變量供我們使用。

PageContext.APPLICATION_SCOPE

PageContext.SESSION_SCOPE

PageContext.REQUEST_SCOPE

PageContext.PAGE_SCOPE

剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域?qū)ο笤O(shè)置的屬性的。現(xiàn)在我們使用重載后的方法看一下能不能獲取得到

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        在page域?qū)ο螳@取request域?qū)ο蟮膶傩?/title>
    </head>
    <body>
    
    <%
        //使用重載的方法獲取request域?qū)ο蟮膶傩?        String value = (String) pageContext.getAttribute("name",pageContext.REQUEST_SCOPE);
        System.out.println(value);
    %>
    
    </body>
    </html>
</pre>
<p>效果:</p>
<p><script type="text/javascript">showImg("https://segmentfault.com/img/remote/1460000013228738?w=1368&h=549");</script></p>


<p>
<p>pageContexst還有這么一個方法:</p>
<p><strong>findAttribute(String name)</strong></p>
</p>
<p>
<strong>該方法會查找各個域的屬性,從小到大開始尋找!也就是page—>request->session->application。</strong>這個是EL表達式的原理!,EL表達式后面會講到!</p>
<p>我們用此方法看能不能查找出request域?qū)ο蟮膶傩园桑?/p>

<pre>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>使用findAttribute
    
    
    
    <%
    
        //使用findAttribute查找2.jsp中request域?qū)ο蟮膶傩?        String value = (String) pageContext.findAttribute("name");
        System.out.println(value);
    %>
    
    
    

效果如下:

引入和跳轉(zhuǎn)

PageContext類中定義了一個forward方法和兩個include方法來分別簡化和替代RequestDispatcher.forward方法和include方法

pageContext.forward(String url)

pageContext.include(String url)

4種屬性范圍

到目前為止,我們已經(jīng)學(xué)了4種屬性范圍了。

page【只在一個頁面中保存屬性,跳轉(zhuǎn)頁面無效】

requet【只在一次請求中保存屬性,服務(wù)器跳轉(zhuǎn)有效,瀏覽器跳轉(zhuǎn)無效】

session【在一個會話范圍中保存屬性,無論何種跳轉(zhuǎn)均有效,關(guān)閉瀏覽器后無效】

application【在整個服務(wù)器中保存,所有用戶都可以使用】

4個內(nèi)置對象都支持以下的方法:

setAttribute(String name, Object o )

getAttribute(String name)

removeAttribute(String name)

應(yīng)用場景

request:如果客戶向服務(wù)器發(fā)請求,產(chǎn)生的數(shù)據(jù),用戶看完就沒用了,像這樣的數(shù)據(jù)就存在request域,像新聞數(shù)據(jù),屬于用戶看完就沒用的

session:如果客戶向服務(wù)器發(fā)請求,產(chǎn)生的數(shù)據(jù),用戶用完了等一會兒還有用,像這樣的數(shù)據(jù)就存在session域中,像購物數(shù)據(jù),用戶需要看到自己購物信息,并且等一會兒,還要用這個購物數(shù)據(jù)結(jié)帳

servletContext:如果客戶向服務(wù)器發(fā)請求,產(chǎn)生的數(shù)據(jù),用戶用完了,還要給其它用戶用,像這樣的數(shù)據(jù)就存在servletContext域中,像聊天數(shù)據(jù)

如果文章有錯的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章的同學(xué),可以關(guān)注微信公眾號:Java3y

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68449.html

相關(guān)文章

  • Java3y文章目錄導(dǎo)航

    摘要:前言由于寫的文章已經(jīng)是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導(dǎo)航。 前言 由于寫的文章已經(jīng)是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時間才會更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號:Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡單 注解就這么簡單 Druid數(shù)據(jù)庫連接池...

    KevinYan 評論0 收藏0
  • JSP面試題都在這里

    摘要:下面是我整理下來的知識點圖上的知識點都可以在我其他的文章內(nèi)找到相應(yīng)內(nèi)容。在中,尤其重要的是對象。 下面是我整理下來的JSP知識點: showImg(https://segmentfault.com/img/remote/1460000013229216?w=4962&h=2653); 圖上的知識點都可以在我其他的文章內(nèi)找到相應(yīng)內(nèi)容。 JSP常見面試題 jsp靜態(tài)包含和動態(tài)包含的區(qū)別 j...

    gaosboy 評論0 收藏0
  • JSP第四篇【EL表達式介紹、獲取各類數(shù)據(jù)、11個內(nèi)置對象、執(zhí)行運算、回顯數(shù)據(jù)、自定義函數(shù)、fn方法

    什么是EL表達式? 表達式語言(Expression Language,EL),EL表達式是用${}括起來的腳本,用來更方便的讀取對象! EL表達式主要用來讀取數(shù)據(jù),進行內(nèi)容的顯示! 為什么要使用EL表達式? 為什么要使用EL表達式,我們先來看一下沒有EL表達式是怎么樣讀取對象數(shù)據(jù)的吧! 在1.jsp中設(shè)置了Session屬性 向session設(shè)置一個屬性 在2...

    flyer_dev 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<