Jsp內建對象及EL運算式及相關問題講解

來源:互聯網
上載者:User

一、JSP的內建對象(9個JSP內建對象)

JSP的內建對象引用名稱   對應的類型

request          HttpServletRequest
response          HttpServletResponse
session          HttpSession(有開關的:page指令的session屬性的取值)
application         ServletContext
config            ServletConfig
page            this(當前Servlet對象)
exception         java.lang.Throwable(有開關:page指令的isErrorPage屬性改為true)
out              JspWriter
pageContext         javax.servlet.jsp.PageContext非常重要

pageContext對象有三大作用:

1、本身是一個域對象,表示的域範圍是本頁面。

   同時還能操作其他三個域對象(PageContext ,ServletRequest, HttpSession,ServletContext)

  設定屬性:

    void setAttribute(String name,Object value)

    void removeAttribute(String name)

    Object getAttribute(String name)

  操作其他的三個域對象,設定屬性:

    void setAttribute(String name,Object value,int scope)

    void removeAttribute(String name,int scope)

    Object getAttribute(String name,int scope)

    參數int scope是由PageContext類提供的靜態變數規定的。

    PageContext.PAGE_SCOPE:頁面範圍(是PageContext本身中的那個Map,代號page)

    PageContext.REQUEST_SCOPE:請求範圍(是ServletRequest中的那個Map,代號request)

    PageContext.SESSION_SCOPE:請求範圍(是HttpSession中的那個Map,代號session)

    PageContext.APPLICATION_SCOPE:請求範圍(是ServletContext中的那個Map,代號application)

Object findAttribute(String name):依次按照page,request, session ,application範圍搜尋指定名稱的對象,找到為止。

                 EL運算式便是調用了此方法(非常有用)

2、擷取其他8個隱式對象

3、提供了轉寄和包含的方便方法 

 若不用pageContext對象:

  RequestDispatcher rd = request.getRequestDispatcher("/url");

  rd.forward(request,response);

 用pageContext對象:
  pageContext.forward("url");

  pageContext.include("url");

四大域對象(兩個資源之間互傳資料)

JSP中隱式對象的名稱   範圍名稱       具體的類型

pageContext      page       javax.servlet.jsp.PageContext
request          request       javax.servlet.ServletRequest
session             session        javax.servlet.http.HttpSession
application        application     javax.servlet.ServletContext (如果使用,必須同步處理)

二、EL運算式

它只是JSP中的運算式,不是一種開發語言。

基本文法:${EL運算式}


1. 擷取資料

EL運算式只能擷取四大域中的資料。

EL運算式擷取的對象如果是null,頁面不會顯示資料。因此,EL運算式中永遠不會出現null 指標異常

"."運算子:

${p.name}:調用域中名稱為p對象的getName方法,點運算子是用於擷取屬性的取值的。

[]運算子:

(.運算子能做的,[]也能做。[]能做的,.不一定能做)

比如${p.name}===${p['name']}==${p["name"]}

優秀在可以取不符合Java命名規範的東東。

2. 數學邏輯運算:

empty運算子:如果判斷的對象是null或者Null 字元串,都返回true。

       對於集合,即使集合對象本身不是null,沒有任何元素,也返回true。

EL運算式不支援字串串連操作。

 
三、EL內建對象(11大EL內建對象)

 擷取JSP的內建對象(11大EL內建對象):痛點,不要與JSP的內建對象和範圍名稱搞混

11大EL隱式對象中,其中一個是表示自身對象外,其餘都是表示的Map結構

EL隱式對象名稱      Java類型              備忘

pageContext    javax.servlet.jsp.PageContext   與JSP中的內建對象完全相同

剩餘的都是代表的Map集合

pageScope        java.util.Map       代表著PageContext頁面範圍域那個Map
requestScope      java.util.Map       代表著ServletRequest請求範圍域那個Map
sessionScope       java.util.Map       代表著HttpSession會話範圍域那個Map
applicationScope     java.util.Map       代表著ServletContext應用範圍域那個Map
param           java.util.Map       代表著請求參數。key:請求參數的名稱。value:請求參數的值,它是一個字串。
paramValues        java.util.Map       代表著請求參數。key:請求參數的名稱。value:請求參數的值,它是一個字串數組。
header           java.util.Map      代表著請求訊息頭。key:頭名稱。value:頭值,它是一個字串。
headerValues       java.util.Map       代表著請求訊息頭。key:頭名稱。value:頭值,它是一個字串數組。
cookie         java.util.Map      代表用戶端提交的Cookie的Map。key:cookie的name。value:cookie對象本身
initParam         java.util.Map       代表著全域初始化參數(web.xml中context-param).key:參數名稱。value:參數值


EL運算式與JSP內建對象問題
 
問:

${pageContex.request}和${request}有區別嗎?這裡的request都是HttpServletRequest類嗎?
我在Action中有request.setAttribute("key",key);
key變數是集合時在jsp用${key}能拿到,但是key是個字串時${key}就是null,為什麼呢?
還有Attribute和Parameter有什麼區別?可以分別有同名的嗎?(比如Parameter中有個"key",Attribute也有個"key")
可以的話,EL中區分嗎?先找哪個?

回複一:

有區別吧
request對象有若干個內部資訊,其中一個是attribute(key, value)隊列。
${pageContex.request}表示的是request對象本身,能取得request的所有資訊。
${request}表示的是request對象內部的attribute(key, value)隊列,只能取得該隊列內的資訊

回複二:

key變數是集合時在jsp用${key}能拿到,但是key是個字串時${key}就是null,為什麼呢?
你在頁面<%request.getparameter(‘key’)>可以取到!

Attribute和Parameter有什麼區別:
getParameter(String  name)獲得用戶端傳送給伺服器的參數值,該參數是由name指定的,通常是表單中的參數.
getAttribute(String  name):返回有name 指定的屬性值,如果指定的屬性值不存在,則會返回一個null值.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.