国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

lookSomeone / 1815人閱讀

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

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

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

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

pageContext

page

config

request

response

session

application

exception

out

out對(duì)象

out對(duì)象的API

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

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

boolean isAutoFlush()

void println()

void flush()

void close()

void clearBuffer()

void clear()

out對(duì)象用于向?yàn)g覽器輸出數(shù)據(jù),與之對(duì)應(yīng)的是Servlet的PrintWriter對(duì)象。然而這個(gè)out對(duì)象的類(lèi)型并不是PrintWriter,是JspWriter

我們可以簡(jiǎn)單理解為:JspWriter就是帶緩存的PrintWrieter

out對(duì)象的原理如下:

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

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

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

整個(gè)JSP頁(yè)面結(jié)束

一般我們?cè)贘SP頁(yè)面輸出都是用表達(dá)式(<%=%>),所以out對(duì)象用得并不是很多!

request

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

response

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

config

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

session

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

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

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

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

page

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

exception

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

前面我們已經(jīng)講過(guò)了怎么設(shè)置錯(cuò)誤頁(yè)面了,下面我們就來(lái)簡(jiǎn)單使用一下exception對(duì)象吧

1.jsp頁(yè)面

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

error.jsp頁(yè)面


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

效果:

pageContext

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

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

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

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        獲取八大內(nèi)置對(duì)象
    
    
    <%
    
        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>

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

setAttribute(String name,Objcet o)

getAttribute(String name)

removeAttribute(String name)

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

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

首先來(lái)看看在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)在來(lái)試驗(yàn)一下<strong>是不是超出了page范圍就無(wú)效了!</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存進(jìn)去的屬性

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

效果如下:

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

上面的pageContext默認(rèn)是page范圍的,但pageContext對(duì)象重載了set、get、removeAttribute這三個(gè)方法

getAttribute(String name,int scope)

setAttribute(String name,Object value,int scope)

removeAttribute(String name,int scope)

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

PageContext.APPLICATION_SCOPE

PageContext.SESSION_SCOPE

PageContext.REQUEST_SCOPE

PageContext.PAGE_SCOPE

剛才我們沒(méi)有使用重載方法的時(shí)候,使用pageContext是無(wú)法獲取到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還有這么一個(gè)方法:</p>
<p><strong>findAttribute(String name)</strong></p>
</p>
<p>
<strong>該方法會(huì)查找各個(gè)域的屬性,從小到大開(kāi)始尋找!也就是page—>request->session->application。</strong>這個(gè)是EL表達(dá)式的原理!,EL表達(dá)式后面會(huì)講到!</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類(lèi)中定義了一個(gè)forward方法和兩個(gè)include方法來(lái)分別簡(jiǎn)化和替代RequestDispatcher.forward方法和include方法。

pageContext.forward(String url)

pageContext.include(String url)

4種屬性范圍

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

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

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

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

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

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

setAttribute(String name, Object o )

getAttribute(String name)

removeAttribute(String name)

應(yīng)用場(chǎng)景

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

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/68449.html

相關(guān)文章

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

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

    KevinYan 評(píng)論0 收藏0
  • JSP面試題都在這里

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

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

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

    flyer_dev 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<