[英]how to forward session from one servlet to another?
大家好,我正在為我的項目開發管理模塊。 一個人登錄時,將發送一個請求以登錄servlet。 當通過單擊其他選項進一步請求其他報告時,報告請求將發送到其他servlet,該請求將在頁面上顯示結果,這是普通用戶時顯示的結果。 會話在兩個servlet之間丟失。
我試圖在其他頁面上導航生成的報告,但是為此,我需要知道第二個servlet中的用戶類型。 這可以通過從登錄模塊bean類中獲取user_type的值來完成。
如何處理這種情況? 謝謝
我的登錄servlet是:
LoginService user = new LoginService();
user.setUserName(request.getParameter("username"));
user.setPassword(request.getParameter("password"));
user = UserDAO.login(user);
if (user.isValid())
{
HttpSession session = request.getSession(true);
session.setAttribute("currentSessionUser",user);
if(user.getUser_type().equalsIgnoreCase("admin")){
response.sendRedirect("administrator/homepage.jsp");
}else{
response.sendRedirect("homepage.jsp"); //logged-in page
}
}
else
response.sendRedirect("invalidlogin.jsp"); //error page
}
我嘗試在第二個servlet中使用它:-
LoginService session = (LoginService)request.getAttribute("currentSessionUser");
String drake = session.getUser_type();
System.out.println("usertype = " +drake);
這里LoginService是登錄模塊的bean類。 我在這里得到一個nullpointer異常。
我認為您正在嘗試做您的Web容器應為您處理的工作...在從同一客戶端會話進行的多個servlet調用過程中,應自動維護會話。 HttpServlet
方法被賦予HttpServletRequest
。 您可以使用該類的getSession
方法之一獲取相應的HttpSession
。
您可以使用setAttribute
和getAttribute
將內容綁定到HttpSession
。
編輯 :我從Servlet規范2.5中獲取此信息:
Servlet可以按名稱將對象屬性綁定到HttpSession實現中。 綁定到會話中的任何對象對於屬於同一ServletContext並處理標識為同一會話一部分的請求的任何其他Servlet都可用。
我認為您最好從HttpServletRequest中獲取HttpSession對象(至少假設它是HttpServlet)並通過它設置/獲取屬性。 如果為屬性選擇一個適當的名稱(它遵循與Java包命名相同的約定),則可以確保返回的對象(只要它不為null)可以強制轉換為您在其中放置的任何類型。 在請求本身上設置和獲取屬性無濟於事,除非您使用RequestDispatcher
從另一個servlet調用另一個servlet,否則我認為東西不會從一個servlet調用轉移到另一個servlet調用。在這里之后。
因此,在第二個代碼示例中,執行(LoginService)request.getSession().getAttribute("currentSessionUser");
,那應該起作用。 確保檢查是否為空,並可能選擇使用項目的程序包名稱約定的屬性名稱(例如com.mycompany...
)。
我不介意第二種意見,因為我不是一位EE / Web開發人員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.