簡體   English   中英

如何將會話從一個servlet轉發到另一個?

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

您可以使用setAttributegetAttribute將內容綁定到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.

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