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

資訊專欄INFORMATION COLUMN

JSP第二篇【內置對象的介紹、4種屬性范圍、應用場景】

lookSomeone / 1809人閱讀

摘要:什么是內置對象引擎在調用對應的時,會傳遞或創建個與開發相關的對象供使用。九個內置對象對象對象的得到緩存大小得到未使用緩存的大小對象用于向瀏覽器輸出數據,與之對應的是的對象。種屬性范圍到目前為止,我們已經學了種屬性范圍了。

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

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

九個內置對象:

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對象用于向瀏覽器輸出數據,與之對應的是Servlet的PrintWriter對象。然而這個out對象的類型并不是PrintWriter,是JspWriter

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

out對象的原理如下:

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

設置page指令的buffer屬性關閉了out對象的緩存功能

out對象的緩沖區已滿

整個JSP頁面結束

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

request

內置對象request其實就是HttpServletRequest,在Servlet講解的時候已經詳細說明了,沒什么好說的

response

內置對象response其實就是HttpServletResponse,在Servlet講解的時候已經詳細說明了,沒什么好說的

config

內置對象config其實就是ServletConfig,在Servlet講解的時候已經詳細說明了,沒什么好說的

session

內置對象session其實就是HttpSession。,在Servlet講解的時候已經詳細說明了,沒什么好說的

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

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

內置對象application其實就是ServletContext對象,在Servlet講解的時候已經詳細說明了,沒什么好說的

page

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

exception

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

前面我們已經講過了怎么設置錯誤頁面了,下面我們就來簡單使用一下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是內置對象中最重要的一個對象,它代表著JSP頁面編譯后的內容(也就是JSP頁面的運行環境)!

pageContext獲取8個內置對象

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

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        獲取八大內置對象
    
    
    <%
    
        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作為域對象

類似于request,session,ServletContext作為域對象而言都有以下三個方法

setAttribute(String name,Objcet o)

getAttribute(String name)

removeAttribute(String name)

當然了,pageContext也不例外,pageContext也有這三個方法

pageContext本質上代表的是當前JSP頁面編譯后的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page范圍內有效,超出了page范圍就無效了

首先來看看在page范圍內能不能使用

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        使用page域對象
    
    
    <%
        pageContext.setAttribute("name", "zhongfucheng");
    %>
    <%
        String value = (String) pageContext.getAttribute("name");
        System.out.println(value);
    %>
    
    
    

效果如下:

我們現在來試驗一下是不是超出了page范圍就無效了!

在2.jsp中request域對象設置屬性

    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        request域對象設置屬性
    
    
    <%
        //這是request域對象保存的內容
        request.setAttribute("name","zhongfucheng");
    %>

    <%--跳轉到1.jsp中--%>

    
    
    
    

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

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        在page域對象獲取屬性
    
    
    
    <%
        //企圖獲取request域對象存進的屬性
        String value = (String) pageContext.getAttribute("name");
        System.out.println(value);
    %>
    
    
    

效果如下:

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

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

getAttribute(String name,int scope)

setAttribute(String name,Object value,int scope)

removeAttribute(String name,int scope)

多了一個設置域范圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用

PageContext.APPLICATION_SCOPE

PageContext.SESSION_SCOPE

PageContext.REQUEST_SCOPE

PageContext.PAGE_SCOPE

剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載后的方法看一下能不能獲取得到

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        在page域對象獲取request域對象的屬性
    
    
    
    <%
        //使用重載的方法獲取request域對象的屬性
        String value = (String) pageContext.getAttribute("name",pageContext.REQUEST_SCOPE);
        System.out.println(value);
    %>
    
    
    

效果:

pageContexst還有這么一個方法:

findAttribute(String name)

該方法會查找各個域的屬性,從小到大開始尋找!也就是page—>request->session->application。這個是EL表達式的原理!,EL表達式后面會講到!

我們用此方法看能不能查找出request域對象的屬性吧!

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        使用findAttribute
    
    
    
    <%
    
        //使用findAttribute查找2.jsp中request域對象的屬性
        String value = (String) pageContext.findAttribute("name");
        System.out.println(value);
    %>
    
    
    

效果如下:

引入和跳轉

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

pageContext.forward(String url)

pageContext.include(String url)

4種屬性范圍

到目前為止,我們已經學了4種屬性范圍了。

page【只在一個頁面中保存屬性,跳轉頁面無效】

requet【只在一次請求中保存屬性,服務器跳轉有效,瀏覽器跳轉無效】

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

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

4個內置對象都支持以下的方法:

setAttribute(String name, Object o )

getAttribute(String name)

removeAttribute(String name)

應用場景

request:如果客戶向服務器發請求,產生的數據,用戶看完就沒用了,像這樣的數據就存在request域,像新聞數據,屬于用戶看完就沒用的

session:如果客戶向服務器發請求,產生的數據,用戶用完了等一會兒還有用,像這樣的數據就存在session域中,像購物數據,用戶需要看到自己購物信息,并且等一會兒,還要用這個購物數據結帳

servletContext:如果客戶向服務器發請求,產生的數據,用戶用完了,還要給其它用戶用,像這樣的數據就存在servletContext域中,像聊天數據

如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章的同學,可以關注微信公眾號:Java3y

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68449.html

相關文章

  • Java3y文章目錄導航

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

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

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

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

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

    flyer_dev 評論0 收藏0

發表評論

0條評論

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