[英]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.