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


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

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

JSP的9大內置對象:

application:是servletContext的實例,代表JSP所屬的web項目本身

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

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

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

page:代表該頁面本身,沒有太大用處

pageContext:頁面上下文對象

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()%>的方式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM