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

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

html 輸出 獲取項目路徑 session PE ade ror ESS val

這裏的疑問在於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()%>的方式

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