我有一個Web應用程序,在那裏我有不同的導航定位點標記,如家庭,個人資料等
我想要什麼:
當我按下像家裏或輪廓錨標記。我只想確保當前用戶在標籤/ JSP頁面中獲取其信息。
我試圖樣本實施例:
<a href="${pageContext.request.contextPath}/JSPAddress.jsp">Profile</a>
我有一個Web應用程序,在那裏我有不同的導航定位點標記,如家庭,個人資料等
我想要什麼:
當我按下像家裏或輪廓錨標記。我只想確保當前用戶在標籤/ JSP頁面中獲取其信息。
我試圖樣本實施例:
<a href="${pageContext.request.contextPath}/JSPAddress.jsp">Profile</a>
的pageContext
是在JSP中提供一個隱含的對象。 The EL documentation說
JSP頁面的上下文。提供對各種對象包括:
參數servletContext:...
會話:...
要求:...
響應:...
因此,這個表達式將獲得當前HttpServletRequest
對象並獲取當前請求的context path,並附加/JSPAddress.jsp
來創建一個鏈接(即使在更改時訪問此資源的上下文路徑也會工作)。
該表達式的主要目的是保持鏈接與應用程序上下文的「相對」,並將它們與應用程序路徑的更改隔離開來。
例如,如果你的JSP(名爲thisJSP.jsp
)在http://myhost.com/myWebApp/thisJSP.jsp
被訪問時,thecontext道路將myWebApp
。因此,生成的鏈接href將爲/myWebApp/JSPAddress.jsp
。
如果有一天您決定將JSP部署到上下文路徑爲corpWebApp
的另一臺服務器上,則爲該鏈接生成的href將自動更改爲/corpWebApp/JSPAddress.jsp
,而不需要您做任何工作。
'$ {pageContext.request.contextPath}'和'$ {request.contextPath}'有什麼區別? – MeBigFatGuy 2011-05-01 19:30:12
@MeBigFatGuy我不相信'request'是EL中的一個隱式對象(雖然有一個'requestScope') - 通過'pageContext'獲取對請求實例的引用的方式就像在OP代碼片段中一樣。 – 2011-05-01 21:03:23
使用request.getContextPath()
而不是使用JSP表達式語言中的${pageContext.request.contextPath}
。
<%
String contextPath = request.getContextPath();
%>
out.println(contextPath);
輸出:willPrintMyProjectcontextPath
不鼓勵片段,不應再使用。表達語言是做這件事的正確方式,並且已經有很長一段時間了。 – KjetilNordin 2016-11-18 15:16:57
@KjetilNordin從scriptlet中,你必須做'request.getContextPath()'而不是'pageContext.getRequest()。getContextPath()',這對JSP腳本翻譯來說是天真的。 – 2016-12-23 18:06:24
答案不回答問題的標題。接受的答案已經表明pageContext在JSP中是隱含的。這個答案沒有用,它是噪音,並且反駁勸阻的編碼方式。它比接受的答案還大三歲,並且絕不應該提到非常過時的做法。所以我恭敬地不同意你的評論@MarcusJuniusBrutus – KjetilNordin 2016-12-27 10:12:44
在JSP頁面的頂部包含<%@ page isELIgnored="false"%>
。
將鼠標放在'[el]'標籤上方並點擊popbox上的「info」鏈接。 – BalusC 2011-05-02 13:57:32