簡體   English   中英

如何在jsp頁面和servlet之間共享數據

[英]How do I share data between a jsp page and servlet

我有幾個.jsp頁面和幾個servlet。

我需要將一些信息保存到會話變量中。 在jsp頁面中,我只是指

session.get...()

要么

session.set...()

無需顯式聲明HttpSession對象。

但是在servlet中,適用正確的編程規則,因此我必須首先創建一個對象。

我擔心的是如果我創建這樣的對象

HttpSession session = new HttpSession();

然后用這樣的東西寫

session.setAttribute("files",fileList);

我擔心的是,我沒有寫入.jsp文件中引用的同一會話對象。

我該怎么做,以便可以在任何jsp或servlet中寫入同一對象。

您需要通過調用HttpServletRequest.getSession()方法來獲取HttpSession。

HttpServletRequest傳遞給您的doGet()方法。 如果沒有針對該請求的會話,則getSession()將創建一個會話。 如果一個會話已經存在並與此請求相關聯,則getSession()將改為檢索現有會話。 如果使用此標准機制,那么您將自動在JSP和Servlet之間共享同一會話。

您永遠不要嘗試直接構造HttpSession,因為它是由容器管理的。 實際上,您不能通過調用new HttpSesion()創建一個新的對象,因為HttpSession只是一個接口,無法實例化。

要預處理數據,請使用Servlet的doGet()方法。

Data data = dataDAO.load();
request.setAttribute("data", data);
request.getRequestDispatcher("page.jsp").forward(request, response);

要訪問JSP中的數據,請使用EL(它將在頁面,請求,會話和應用程序范圍中按此順序搜索具有給定名稱的屬性)。

<br>Plain object: ${data}
<br>A property: ${data.property}
<br>Explicitly search in request scope: ${requestScope.data}

要將數據從JSP發送到Servlet,通常使用由客戶端控制的請求參數。 最常見的HTML表單已用於此目的。 另外,您也可以使用Javascript向服務器端觸發異步請求。

生活在同一范圍內的任何事物都可以訪問特定范圍內的任何事物。 從客戶端發起請求(通過單擊鏈接,按鈕,書簽或在地址欄中輸入URL)開始到服務器發送響應的最后一位為止,請求范圍一直存在。 您通常在其中存儲請求特定數據,例如表單數據。 會話作用域從客戶端第一次請求網頁並且尚未創建HttpSession的那一刻起一直存在,直到HttpSession在一段未使用的時間(在web.xml中可配置)之后超時為止,或當代碼使用HttpSession#invalidate()顯式超時時。 通常,您在其中存儲用戶特定的數據,如登錄的用戶和用戶首選項等。 應用程序作用域從服務器啟動到服務器關閉(或重新啟動)之間一直存在。 通常,您在其中存儲應用程序范圍的數據,例如靜態下拉數據,DAO工廠,webapp配置數據等。

該請求可由Servlet類中的HttpServletRequest參數訪問。
Servlet類中的HttpServletRequest#getSession()可訪問該會話。
Servlet類中的繼承的getServletContext()方法可訪問該應用程序。
它們都有一個get / setAttribute()方法。

要了解有關JSP / Servlet / EL的更多信息,我可以向您推薦Sun Java EE 5教程第二部分第1-8章

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM