之前在drp項目中就接觸了${pageContext.request.contextPath},當時沒有注意,這次在java版高校雲平台ITOO4.0中再次與之相遇,真是無巧不成書啊。再次遇到,我再置之不理,那就說不過去了吧。
說著個之前,我們必須先要簡單的說說EL運算式。 EL運算式
EL 全名為ExpressionLanguage。作用是: Ø 擷取資料:
EL運算式主要用於替換JSP頁面中的指令碼運算式,以從各種類型的web域 中檢索java對象、擷取資料。(某個web域中的對象,訪問javabean的屬性、訪問list集合、訪問map集合、訪問數組) Ø 執行運算:
利用EL運算式可以在JSP頁面中執行一些基本的關係運算、邏輯運算和算術運算,以在JSP頁面中完成一些簡單的邏輯運算。${user==null} Ø 擷取web開發常用對象
EL 運算式定義了一些隱式對象,利用這些隱式對象,web開發人員可以很輕鬆獲得對web常用對象的引用,從而獲得這些對象中的資料。 Ø 調用Java方法
EL運算式允許使用者開發自訂EL函數,以在JSP頁面中通過EL運算式調用Java類的方法。
關於擷取資料,主要採用下面的方式:
使用EL運算式擷取資料文法:“${標識符}”
EL運算式語句在執行時,會調用pageContext.findAttribute方法,用標識符為關鍵字,分別從page、request、session、application四個域中尋找相應的對象,找到則返回相應對象,找不到則返回””(注意,不是null,而是Null 字元串)。 ${pageContext.request.contextPath}
{pageContext.request.contextPath}其實就是一種el運算式的寫法,利用el擷取值的原理,從get方法中擷取資料:
pageContext.getRequest()得到HttpServletRequest對象,這是第一步,第二步是利用拿到的HttpServletRequest調用getContextPath方法。
作用是:取出部署的應用程式名稱,這樣不管如何部署,所用路徑都是正確的。
其他的擷取路徑的方式存在的優缺點:
http://www.cnblogs.com/langtianya/archive/2013/03/04/2942515.html
此外大家之前習慣的寫法是採用jsp指令碼進行的輸出:具體的是:
<%=request.getContextPath()%>,作用是可以返回當前頁面所在的應用的名字。 Ø EL優於指令碼<%%>
1 、EL運算式用${}表示,可用在所有的HTML和JSP標籤中作用是代替JSP頁面中複雜的JAVA代碼.
2 、EL運算式可操作常量變數 和隱式對象. 最常用的隱式對象有${param}和${paramValues}. ${param}表示返回請求參數中單個字串的值. ${paramValues}表示返回請求參數的一組值.pageScope表示頁面範圍的變數.requestScope表示請求對象的變數.sessionScope表示會話範圍內的變數.applicationScope表示應用範圍的變數.
3 、 <%@pageisELIgnored="true"%> 表示是否禁用EL語言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中預設的啟用EL語言.
4 、EL語言可顯示 邏輯運算式如${trueand false}結果是false 關聯運算式如${5>6}結果是false 算術運算式如 ${5+5} 結果是10
5 、EL中的變數搜尋範圍是:page,equest,session,application 點運算子(.)和"[ ]"都是表示擷取變數的值.區別是[ ]可以顯示非詞類的變數 知識小拓展
request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";這是在drp項目中也是十分常見的一個運算式,在我們使用${pageContext.request.contextPath}之前經常用的。
那麼究竟是什麼意思呢。
看似難以理解,其實就是獲得應用的根url,或者說訪問地址,舉個例子,我們經常訪問本地地址的8080連接埠號碼,也就是http://localhost:8080;
具體解釋:
1、request.getScheme() 返回協議的名稱 http,和後面的"://" 拼起來就成了http://
2、request.getServerName()這是擷取你的伺服器的名稱 本機就是localhost或者127.0.0.1,均表示本地
3、request.getServerPort() 返回連接埠號碼,比如8080 小結
之前對這三個之間有點記不清楚,總結了 一下,一下子明朗多了,知識還是在於顆粒歸倉啊。