- 相關(guān)推薦
JSP內(nèi)置對(duì)象及EL表達(dá)式使用
在JSP內(nèi)置對(duì)象及EL表達(dá)式時(shí)我們通常會(huì)遇到一些棘手的問題,下面小編給大家提供了JSP內(nèi)置對(duì)象及EL表達(dá)式使用,大家可以參考閱讀,更多詳情請(qǐng)關(guān)注應(yīng)屆畢業(yè)生考試網(wǎng)。
JSP 的內(nèi)置對(duì)象是為了方便, 開發(fā) JSP 的時(shí)候,把一些對(duì)象設(shè)置為內(nèi)置對(duì)象,開發(fā)者在 JSP 頁(yè)面編程的時(shí)候不必聲明這些對(duì)象就能直接使用。
本文我們具體講解一下Jsp內(nèi)置對(duì)象及EL表達(dá)式的使用。
一、JSP的內(nèi)置對(duì)象(9個(gè)JSP內(nèi)置對(duì)象)
JSP的內(nèi)置對(duì)象引用名稱 對(duì)應(yīng)的類型
request HttpServletRequest
response HttpServletResponse
session HttpSession(有開關(guān)的:page指令的session屬性的取值)
application ServletContext
config ServletConfig
page this(當(dāng)前Servlet對(duì)象)
exception java.lang.Throwable(有開關(guān):page指令的isErrorPage屬性改為true)
out JspWriter
pageContext javax.servlet.jsp.PageContext非常重要
pageContext對(duì)象有三大作用:
1、本身是一個(gè)域?qū)ο,表示的域范圍是本?yè)面。
同時(shí)還能操作其他三個(gè)域?qū)ο螅≒ageContext ,ServletRequest, HttpSession,ServletContext)
設(shè)置屬性:
void setAttribute(String name,Object value)
void removeAttribute(String name)
Object getAttribute(String name)
操作其他的三個(gè)域?qū)ο螅O(shè)置屬性:
void setAttribute(String name,Object value,int scope)
void removeAttribute(String name,int scope)
Object getAttribute(String name,int scope)
參數(shù)int scope是由PageContext類提供的靜態(tài)變量規(guī)定的。
PageContext.PAGE_SCOPE:頁(yè)面范圍(是PageContext本身中的那個(gè)Map,代號(hào)page)
PageContext.REQUEST_SCOPE:請(qǐng)求范圍(是ServletRequest中的那個(gè)Map,代號(hào)request)
PageContext.SESSION_SCOPE:請(qǐng)求范圍(是HttpSession中的那個(gè)Map,代號(hào)session)
PageContext.APPLICATION_SCOPE:請(qǐng)求范圍(是ServletContext中的那個(gè)Map,代號(hào)application)
Object findAttribute(String name):依次按照page,request, session ,application范圍搜索指定名稱的對(duì)象,找到為止。
EL表達(dá)式便是調(diào)用了此方法(非常有用)
2、獲取其他8個(gè)隱式對(duì)象
3、提供了轉(zhuǎn)發(fā)和包含的方便方法
若不用pageContext對(duì)象:
RequestDispatcher rd = request.getRequestDispatcher("/url");
rd.forward(request,response);
用pageContext對(duì)象:
pageContext.forward("url");
pageContext.include("url");
四大域?qū)ο?兩個(gè)資源之間互傳數(shù)據(jù))
JSP中隱式對(duì)象的名稱 范圍名稱 具體的類型
pageContext page javax.servlet.jsp.PageContext
request request javax.servlet.ServletRequest
session session javax.servlet.http.HttpSession
application application javax.servlet.ServletContext (如果使用,必須同步處理)
二、EL表達(dá)式
它只是JSP中的表達(dá)式,不是一種開發(fā)語(yǔ)言。
基本語(yǔ)法:${EL表達(dá)式}
1. 獲取數(shù)據(jù)
EL表達(dá)式只能獲取四大域中的數(shù)據(jù)。
EL表達(dá)式獲取的對(duì)象如果是null,頁(yè)面不會(huì)顯示數(shù)據(jù)。因此,EL表達(dá)式中永遠(yuǎn)不會(huì)出現(xiàn)空指針異常
"."運(yùn)算符:
${p.name}:調(diào)用域中名稱為p對(duì)象的getName方法,點(diǎn)運(yùn)算符是用于獲取屬性的取值的。
[]運(yùn)算符:
(.運(yùn)算符能做的,[]也能做。[]能做的,.不一定能做)
比如${p.name}===${p['name']}==${p["name"]}
優(yōu)秀在可以取不符合Java命名規(guī)范的東東。
2. 數(shù)學(xué)邏輯運(yùn)算:
empty運(yùn)算符:
如果判斷的對(duì)象是null或者空字符串,都返回true。
對(duì)于集合,即使集合對(duì)象本身不是null,沒有任何元素,也返回true。
EL表達(dá)式不支持字符串連接操作。
三、EL內(nèi)置對(duì)象(11大EL內(nèi)置對(duì)象)
獲取JSP的內(nèi)置對(duì)象(11大EL內(nèi)置對(duì)象):難點(diǎn),不要與JSP的內(nèi)置對(duì)象和范圍名稱搞混
11大EL隱式對(duì)象中,其中一個(gè)是表示自身對(duì)象外,其余都是表示的Map結(jié)構(gòu)
EL隱式對(duì)象名稱 Java類型 備注
pageContext javax.servlet.jsp.PageContext 與JSP中的內(nèi)置對(duì)象完全相同
剩余的都是代表的Map集合
pageScope java.util.Map 代表著PageContext頁(yè)面范圍域那個(gè)Map
requestScope java.util.Map 代表著ServletRequest請(qǐng)求范圍域那個(gè)Map
sessionScope java.util.Map 代表著HttpSession會(huì)話范圍域那個(gè)Map
applicationScope java.util.Map 代表著ServletContext應(yīng)用范圍域那個(gè)Map
param java.util.Map 代表著請(qǐng)求參數(shù)。key:請(qǐng)求參數(shù)的名稱。value:請(qǐng)求參數(shù)的值,它是一個(gè)字符串。
paramValues java.util.Map 代表著請(qǐng)求參數(shù)。key:請(qǐng)求參數(shù)的名稱。value:請(qǐng)求參數(shù)的值,它是一個(gè)字符串?dāng)?shù)組。
header java.util.Map 代表著請(qǐng)求消息頭。key:頭名稱。value:頭值,它是一個(gè)字符串。
headerValues java.util.Map 代表著請(qǐng)求消息頭。key:頭名稱。value:頭值,它是一個(gè)字符串?dāng)?shù)組。
cookie java.util.Map 代表客戶端提交的Cookie的Map。key:cookie的name。value:cookie對(duì)象本身
initParam java.util.Map 代表著全局初始化參數(shù)(web.xml中context-param).key:參數(shù)名稱。value:參數(shù)值
EL表達(dá)式與JSP內(nèi)置對(duì)象問題
問:
${pageContex.request}和${request}有區(qū)別嗎?這里的request都是HttpServletRequest類嗎?
我在Action中有request.setAttribute("key",key);
key變量是集合時(shí)在jsp用${key}能拿到,但是key是個(gè)字符串時(shí)${key}就是null,為什么呢?
還有Attribute和Parameter有什么區(qū)別?可以分別有同名的嗎?(比如Parameter中有個(gè)"key",Attribute也有個(gè)"key")
可以的話,EL中區(qū)分嗎?先找哪個(gè)?
回復(fù)一:
有區(qū)別吧
request對(duì)象有若干個(gè)內(nèi)部信息,其中一個(gè)是attribute(key, value)隊(duì)列。
${pageContex.request}表示的是request對(duì)象本身,能取得request的所有信息。
${request}表示的是request對(duì)象內(nèi)部的attribute(key, value)隊(duì)列,只能取得該隊(duì)列內(nèi)的信息
回復(fù)二:
key變量是集合時(shí)在jsp用${key}能拿到,但是key是個(gè)字符串時(shí)${key}就是null,為什么呢?
你在頁(yè)面<%request.getparameter(‘key’)>可以取到!
Attribute和Parameter有什么區(qū)別:
getParameter(String name)獲得客戶端傳送給服務(wù)器的參數(shù)值,該參數(shù)是由name指定的,通常是表單中的參數(shù).
getAttribute(String name):返回有name 指定的屬性值,如果指定的屬性值不存在,則會(huì)返回一個(gè)null值.
【JSP內(nèi)置對(duì)象及EL表達(dá)式使用】相關(guān)文章:
JSP中九大內(nèi)置對(duì)象06-03
JSP中9個(gè)隱含對(duì)象09-10
Word 2013如何使用內(nèi)置的主題和樣式集08-05
java對(duì)象持久化的使用技巧09-23
在PHP中使用正則表達(dá)式進(jìn)行查找替換11-05
jsp試題及答案05-07
JSP的基礎(chǔ)原理05-30
PHP內(nèi)置函數(shù)有哪些11-04