2011-05-01 83 views
27

我有一個Web應用程序,在那裏我有不同的導航定位點標記,如家庭,個人資料等

我想要什麼:

當我按下像家裏或輪廓錨標記。我只想確保當前用戶在標籤/ JSP頁面中獲取其信息。

我試圖

樣本實施例:

<a href="${pageContext.request.contextPath}/JSPAddress.jsp">Profile</a> 
+7

將鼠標放在'[el]'標籤上方並點擊popbox上的「info」鏈接。 – BalusC 2011-05-02 13:57:32

回答

55

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,而不需要您做任何工作。

+1

'$ {pageContext.request.contextPath}'和'$ {request.contextPath}'有什麼區別? – MeBigFatGuy 2011-05-01 19:30:12

+9

@MeBigFatGuy我不相信'request'是EL中的一個隱式對象(雖然有一個'requestScope') - 通過'pageContext'獲取對請求實例的引用的方式就像在OP代碼片段中一樣。 – 2011-05-01 21:03:23

0

使用request.getContextPath()而不是使用JSP表達式語言中的${pageContext.request.contextPath}

<% 
String contextPath = request.getContextPath(); 
%> 
out.println(contextPath); 

輸出:willPrintMyProjectcontextPath

+4

不鼓勵片段,不應再使用。表達語言是做這件事的正確方式,並且已經有很長一段時間了。 – KjetilNordin 2016-11-18 15:16:57

+0

@KjetilNordin從scriptlet中,你必須做'request.getContextPath()'而不是'pageContext.getRequest()。getContextPath()',這對JSP腳本翻譯來說是天真的。 – 2016-12-23 18:06:24

+3

答案不回答問題的標題。接受的答案已經表明pageContext在JSP中是隱含的。這個答案沒有用,它是噪音,並且反駁勸阻的編碼方式。它比接受的答案還大三歲,並且絕不應該提到非常過時的做法。所以我恭敬地不同意你的評論@MarcusJuniusBrutus – KjetilNordin 2016-12-27 10:12:44

1

在JSP頁面的頂部包含<%@ page isELIgnored="false"%>