2012-01-15 110 views
4

在JSP頁面中,我們可以使用以下屬性訪問屬性:${name}。但是,如果我們在sevlet中執行以下操作:表達式語言。主導變量

req.getSession.setAttribute("name", sessionName); 
getServletContext().setAttribute("name", sevletContextName) 
req.setAttribute("name", reqName); 

那麼哪個變量JSP將在訪問時使用?

$ {name}的

+0

的http://文檔.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html – alf 2012-01-15 10:48:27

回答

6

的JSP EL看起來頁面,然後請求,然後會話,然後應用。

如果你想明確地訪問會話,使用

${sessionScope.name} 

對於servlet上下文,使用

${applicationScope.name} 

(以及類似的pageScoperequestScope

+0

嗯,謝謝。但pageScope和requestScope有哪些不同?請求範圍直到服務器asnwers(因爲1個請求可能在幾個servlet,jsp頁面等之間傳輸),頁面範圍僅存在於1個servlet或1個jsp中。這個權利? – MyTitle 2012-01-15 10:49:53

+1

如果您在JSP頁面中定義頁面範圍屬性,例如使用或使用pageContext.setAttribute(),則該屬性僅存在於此頁面。動態包含的頁面或轉發的頁面不會看到此屬性。 Servlet沒有頁面範圍屬性。 – 2012-01-15 11:29:30

+0

爲什麼我需要使用pageContext.setAttribute()而不是使用類變量?因爲不是線程安全的?或其他原因? – MyTitle 2012-02-08 18:17:03