關於在JSP頁面中爲何必定要用${pageContext.request.contextPath}來獲取項目路徑,而不能用${request.contextPath}?

這裏的疑問在於pageContext和request都是JSP中的內置對象之一,爲何不直接用${request.contextPath}來獲取項目路徑?html

出現這種疑問,實際上是將JSP的內置對象和EL表達式的內置對象混淆了。java

JSP的9大內置對象:web

application:是servletContext的實例,表明JSP所屬的web項目自己服務器

config:是servletConfig的實例,表明當前JSP的配置信息cookie

exception:是java.lang.Throwable的實例,該對象只有在JSP頁面中設置了isErrorPage爲true時,才能使用session

out:jspWriter的實例,表明JSP頁面的輸出流app

page:表明該頁面自己,沒有太大用處
jsp

pageContext:頁面上下文對象htm

request:是httpservletrequest的實例,表明一次請求對象

response:是httpservletresponse的實例,表明服務器的響應

session:是Httpsession的實例,表明一次會話

EL表達式的11個內置對象:(EL表達式的格式${表達式},它是一種簡單的數據訪問方式,是爲了在JSP頁面中不使用Java腳本語言而引進的)

pageContext:表明該頁面的pageContext對象,和JSP的pageContext對象相同

pageScope:用於獲取page範圍內的屬性值

requestScope:用於獲取request範圍內的屬性值

responseScope:用於獲取response範圍內的屬性值

sessionScope:用於獲取session範圍內的屬性值

applicationScope:用於獲取application範圍內的屬性值

param和paramValues:用於獲取請求的參數值

header和headerValues:用於獲取請求頭信息

cookie:用於獲取cookie中的值

initParam:用於獲取web應用的初始化信息

經過以上比較,不難發現EL表達式中只有pageContext對象,而沒有request對象,request對象是JSP的內置對象。那麼在EL表達式中獲取request對象,只能經過${pageContext.request}獲取,同理,response和session對象也得這樣得到。因此在獲取項目絕對路徑時,只能經過${pageContext.request.contextPath}來獲取,對應於Java腳本語言中的<%=request.getContextPath()%>的方式

相關文章
相關標籤/搜索